透彻分析反射的基础---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文件在反射中起到了基石的作用.



原文地址:https://www.cnblogs.com/chenxiaochan/p/7253400.html