---------------------- android培训、java培训、期待与您交流! ----------------------
jdk1.5新特性(2):
枚举
枚举就是将类中的元素定义成对象,使用时不可改变,并只能使用这些对象
允许表示特定的数据点,这些数据点只接受分配时预先定义的值集合。每一个枚举都是一个对象
用普通方法实现枚举:
在一个类中定义多个该类对象类型的全局变量,每调用这个类只能实现这多个对象,不能改变,这几个对象中所要实现的功能可以用内部类实现
枚举中的变量对象列表必须放在所有成员之前,枚举的构造方法必须是私有的
枚举的变量对象后可以加参数列表来指向构造方法
枚举的变量对象后加上大括号可以表示他是有该枚举类的子类的实例对象
枚举只有一个成员时,就可以作为一个单例的实现模式
反射(1)
1:反射的基石-Class类
java程序中的java类属于同一事物,描述这类事物的java类名就是Class,用Class这个类就可以得到类中的各方面信息,属性
Class的实例对象是字节码(就是类被加载到内存的内容,字节码就是每个类别编译后的class文件中的内容,使用时,会将这些内容加载到内存)
Person p1 = new Person(); p1:由Person的字节码创建的对象
p1.getClass(); 得到创建它的字节码(用对象获得)
Class cls1 = Person.class cls1:Person的字节码(用类名获得)
Class.forName("java.lang.String") 获得一个完整路径名类的字节码,如果类加载过直接返回字节码,没加载过,先加载再返回字节码(用完整路径名获得)
九个预定义Class对象:
八个基本数据类型分别对应八个Class对象
void也有对应的Class对象
数组也是一种类型
只要在源程序中出现的类型,都有各自的Class实例对象
包装类的TYPE属性获取的就是包装类对应基本数据类型的字节码
反射就是把java类中的各种成份映射成java类
2:Constructor类
Constructor类代表某个类中的一个构造方法
Constructor[] constructors =
Class.forName("java.lang.String").getConstructors();得到某个类中的所有构造方法
Constructor Constructor = Class.forName("java.lang.String").getConstructor
(StringBuffer.class); 得到某一个构造方法 想得到对应的构造方法 就要传入对应的参数类型的字节码
getConstructor();方法因为里面的参数不确定,所以里面是可变参数形式,在1.5之前里面是容器形式
调用得到的构造方法是也要传入对应的对象
3:Field类
类中的成员变量
可以用一个类的字节码的getField()方法得到一个成员变量的字节码,但是无法得到值
如果想得到对应的成员变量的值需要用成员变量的字节码的get方法传入想得到值的对象名获取值
私有化的成员变量可以用getDeclaredField()方法得到字节码,然后用,字节码的setAccessible(true)设置是否可以访问,get方法传入想得到值的对象名获取值
字节码比较:
字节码的比较应该用 ==
---------------------- android培训、java培训、期待与您交流! ----------------------