反射类 -- Class
由来:
根据万物皆对象的思想,类本身也可以被看作是一个对象,因此对java中的所有类进行了封装,
抽取出了一个代表类的类:Class。
java中所有类的共性:1.方法 2.变量 6.构造方法等等
------------------------------------------------------------------------------
类 类 --- Class
字段类 --- Field ----- 提供了获取该字段的名称,权限修饰符,返回值类型等
方法类 --- Method
构造方法类 --- Constructor
---------------------------------------------------------------------------------
类加载器:将类放进内存中的东西
Class:
1.java.lang包下,被final修饰
2.没有构造方法,Class对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
3.java中的8大基本数据类型和关键字void都可以表示为Class对象
4.每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象
5.
怎么获取某个(Person)类的Class类的对象??
1.Class a = Class.forName(包名.Person);
获取的class对象a可以看做是一个类(Person)的代理,通过代理对象a可以获得被代理对象person的所有信息。
包括获取Person类的:名称,包名,所有字段,所有方法。
2.Class b = new Person().getClass();
3.Class c = Person.class;
----------------------------------------------------------------------------------
面试题:获取Person类的代理类Class类对象的方式有几种,这几种方式有什么区别?
答:有三种方式,区别为:
前两种会导致Person类被加载,后一种不会导致Person类被加载。
三种获取代理对象的方式建议使用第三种,即类名.class的方式,因为他是一个字面常量,效率高,
并且使用简洁不抛异常,但是特殊情况如果需要被代理类的加载,就必须使用前两种的其中一种,
例如JDBC中加载驱动时需要类的加载,所以使用Class.forName(XXXX.driver);