———————-
android培训
、
java培训
、期待与您交流! ———————-
一个工作空间包括多个
project
,保留了一个
eclipse
的一套环境选项的配置,例如所使用的
javac
和
java
命令等。
面试
:记住写包名。公司网址倒过来写比如:
cn.itcast.day1,
记住少用没有意义的单词。习惯一旦养成就好了。
Perspective
(透视图) 查看某些小窗口的集合
如何查看变量值:
debug
调试,选中变量,单击右键,
watch
选择单步调试。
如何设置单个工程的
javac
和
java
(基础加强
5
)
高版本的
java
可以运行低版本的
javac
,反之则不可。
快捷键的绑定与代码模板:
perferences
——
Editor
——
templates
(插入光标:结束后,光标所在的位置,
cursor
)
import
语句可以导入一个类,或者某个包中的所有类。
Importstatic
语句导入一个类中的,某个静态方法或所有静态方法
面试
:
overload
(重载)和
override
(覆盖)的区别?是什么,为什么,并举例说明。
参数不固定的问题?
可变参数的特点:只能出现在参数列表的最后(后面不能在出现参数了);
…
位于变量类型和变量名之间,前后有无空格都可以;调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
增强
for
循环:语法
for
(
type
变量
:
集合变量名)
{…}
注意事项:迭代变量必须在()中定义!集合变量可以是数组或实现 了
iterable
接口的集合类。
举例:
public static int add(int x ,int …args){int sum=x;
for (int arg:args){sum+=arg;}return sum;}
基本数据的自动拆装箱及享元设计模式:
自动装箱:
integer num1=12;
自动拆箱:
System.out.println(num1+12);
面试
:享元设计模式(
flyweight
)(
友情提示
:内部类考的很多,不能被内部类考晕了)
有很多个小的对象,他们有很多属性相同,把他们变成一个对象,那些不同的属性,把他们变成方法的参数称之为外部状态,相同的属性称为这个对象的内部状态。
枚举的作用介绍:
为什么要有枚举?问题:要定义星期几或性别的变量,该怎么定义?假设用
1-7
分别表示一周,但是有人会写成
int weekday=0
;
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个
weekday
的类来模拟枚举功能。
私有的构造方法,每个元素分别用一个公有的静态成员变量表示,可以有若干公有方法或抽象方法,例如,要提供
nextDay
方法必须是抽象的。
好处是,在你编译源程序的时候就发现你的值不合法。
枚举的基本应用:举例:定义一个
weekday
的枚举;扩展:枚举类的
values,valueof,name,tostring,ordinal
等方法。总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。(
注意
看懂内部类的应用)
枚举的元素列表必须在最前面;创建对象用的是什么构造方法。
举例:
public enum TrafficLamp{
RED(30){public TrafficLamp(){return Green;}},Green(45){public TrafficLamp(){return YELLOW;}},YELLOW(5){public TrafficLamp(){return RED;}};
Public abstract TrafficLamp nextLamp();Private int time;
(抽象方法)
Private TrafficLamp(int time ){this.time=time;}(
构造函数
)}
反射的基石
——
>Class
类(大写的
C
)
Java
程序中的各个
java
类属于同一类事物,描述这类事物的
java
类名就是
Class
。
各个实例对象:对应各个类在内存中的字节码。一个类被加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?
那么它描述了那些方面的属性呢?类的名字,类的访问属性,类所属于的包名,字段名称的列表、方法名称的列表,等等。学习反射首先要明白
Class
这个类。
Class cls1=Person.class//
字节码
面试题
:
Class.forName(“java.lang.String”)
的作用?
得到类的(返回)字节码:一个是曾经被加载过,已经呆在
java
虚拟机里面,直接返回。还有就是
java
虚拟机没有加载,用类加载器去加载,把加载进来的字节码缓存进虚拟机里面。
如何得到各个字节码对应的实例对象:
类名
.class
例如
System.class
对象
.getclass(),
例如
new Date().getclass()
Class.forName(”
类名
“)
,例如
Class.forName(“java.util.Date”)<
做反射主要用这种
>
总之,只要在源程序中出现的类型,都有各自的
Class
实例对象。
isPrimitive
(是否是基本类型的字节码 )
TYPE
包装类型所包装的基本类型的字节码?
Int.class==Integer.TYPE(true)
什么是反射?反射就是把
java
类中的各种成分映射成相应的
java
类,例如:一个
java
类中用一个
Class
的类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个的
java
类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示
java
类的
Class
类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符包等信息,这些信息就是用相应类的实例对象来表示,他们是
Field
,
Method
,
Contructor
(构造方法),
Package
等等
一个类中的每个成员都可以用相应的反射
API
类的一个实例对象来表示,通过调用
Class
类的方法可以得到这些实例对象后,得到这些实例对象有什么用呢,怎么用呢,这正是学习和应用反射的要点。
(反射就是把
java
类中的各种成分(提取)映射成为相应的
java
类)
JDK1.5
的新特性(可变参数)
Constructor
类代表某个类中的一个构造方法:
得到某个类所有的构造方法:
例子
Constructor[] contructor=Class.forName(“java.lang.String “).getConstructors();
得到某一个构造方法:
Constructor contructor=Class.forName(“java.lang.String “).getConstructor(StringBuffer.class);
获得方法时要用到类型。
创建实例对象:
通常方式:
String str=new String(new StringBuffer(“abc”));
反射方式:
String str=(String)constructot.newInstance(new StringBuufer(“abc”));
调用获得的方法时要用到上面相同类型的实例对象。
Class.newInstance()
方法:
例子:
String obj=(String)Class.forName(“java.lang.String”).newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
该方法内部的具体代码是怎么样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
成员变量
的反射:
Field
类代表某个类中的一个成员变量,不会对应到变量的具体值。(知识点:暴力反射)
举例:其中定义的变量
x
是私有的,
y
是公有的。注意下面代码对二者访问的区别。
ReflectPoint pt1= new ReflectPoint(3,5);
Field fieldY=pt1.getClass().getField(“y”);//fieldY
的值是多少呢?
5
吗,错,
fieldY
不是对象上的变量而是类的。
System.out.println(fieldY.get(pt1));
Field fieldX=pt1.getClass().getDeclaredField(“x”);
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt1));
重点(
21
)反射的应用
作业:将任意一个对象中的所有
String
类型的成员变量所对应的字符串内容中的
“b”
改成
“a”
。
Method
(代表某个类中的一个成员方法)
得到类中的一个方法:
例子:
Method charAt=Class.forName(“java.lang.String”).getMethod(“charAt”,int.class);
调用方法:
通常方法:
System.out.println(st.charAt(1));
反射方法:
System.out.println(charAt.invoke(str,1));
如果传递给
Method
对像的
invoke<
调用
>
()方法的第一个参数是
NULL
这有着什么意义呢?说明该
Method
对象对应的是一个静态方法!
理解:为什么要用反射方式执行某个类中的
main
方法?
并不知道要执行的
main
方法的类的名字,现在给程序传进来一个参数(字符串),假设这个参数就是就是要启动的那个类的类名。注意类型不对的问题以及解决方案。
数组的反射
:具有相同维数和元素类型的数组属于同一个类型,即具有相同的
Class
实例对象。
代表数组的
Class
实例对象的
getSuperClass
()方法返回的父类为
Object
类对应的
Class
。
基本数据类型的一维数组可以被当做
Object
类型使用,不能当做
Object[]
类型使用;非基本类型的一维数组,即可以当做
Object
类型使用,又可当做
Object[]
类型使用。
If this class object represents a class of arrays,then the internal from of the name consists of the name of the element type preceded by one or more
‘
[
’
characters representing the depth of the array nesting.
(
[I
)括号里面的是什么含义:
元素类型 |
boolean |
byte |
char |
Class or interface |
Double |
Float |
Int |
Long |
Short |
Encoding |
Z |
B |
C |
Lclassname |
D |
F |
I |
J |
S |
面试小提示:编写程序养成好的编写习惯,注意程序中的细节问题?
———————-
android培训
、
java培训
、期待与您交流! ———————-详细请查看:
http://edu.csdn.net/heima