透彻分析反射的基础---class类
反射的基石---class类
反射就是把java类中的各种成分映射成相应的java类.例如:一个java类中用一个class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的 发动机,变速箱等等也是一个类.表示java类的class类显然要提供一系列的方法来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,他们是field,method,contructor,package等.
java程序中的各个java类属于同一个类事物,描述这类事物的java类名就是class.
什么是字节码:当在源程序中用到了person这个类的时候,首先将这个类的class编译的二级制编码加载到内存中来,然后再用这个二进制将它复制成一个个对象来.
如何得到各个字节码对应的实例对象或者说是获取class类
一共有三种方式:
1.类名.class,例如:System.class
2.对象.class,例如new Date().getClass
3.Class.forName("类名");例如:Class.forName("java.lang.String");
public class ReflectDemo { public static void main(String[] args) throws ClassNotFoundException { // 方式1 Person p = new Person(); Class c = p.getClass(); Person p2 = new Person(); Class c2 = p2.getClass(); System.out.println(p == p2);// false System.out.println(c == c2);// true // 方式2 Class c3 = Person.class; // int.class; // String.class; System.out.println(c == c3); // 方式3 // ClassNotFoundException Class c4 = Class.forName("Reflect.Person"); System.out.println(c == c4); } }
总结:
要想解剖一个类,必须先获取到该类的字节码文件对象,而解剖是用的就是class类中的方法,class文件在反射中起到了基石的作用.