反射:类的对象 与 类对象,如何获取类对象

要明确类对象,先弄清楚

什么是类对象?

基于某个类 new 出来的对象,也称为实例对象

 

什么是类对象?

类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)

每一个类,比如Person、Student、Teacher等等都是Class类的一个对象

每个类加载到内存后都对应一个Class对象

每个类有且只有一个Class对象

反射:类的对象 与 类对象,如何获取类对象

这里的难点在于:把类当成一个对象来看待,每一个类实际上就是Class对象的一个对象

 

-verbose:class 显示类加载的过程

 

如何获取类对象??

1、通过类的对象获取类对象.

通过类的对象调用 getClass()获取类对象

Student s = new Student();

Class  c = s.getClass();

 

2、通过类名.class 获取类对象

Class c = 类名.class;

 

3、通过静态方法获取类对象(推荐使用)

Class  c = Class.forName("包名.类名");

 

例子:

反射:类的对象 与 类对象,如何获取类对象

反射:类的对象 与 类对象,如何获取类对象

——————————————————————————————————————————————————

——————————————————————————————————————————————————

——————————————————————————————————————————————————

反射:类的对象 与 类对象,如何获取类对象

反射:类的对象 与 类对象,如何获取类对象

获取无参构造,通过newInstance创建对象

 

反射:类的对象 与 类对象,如何获取类对象

注意上面还有一种简便的方法,类对象本身就有newInstance的方法,就不需要使用getConstructor()方法来转换了

使用类对象直接newInstance,就不用先获取无参构造方法来调用无参构造了

反射:类的对象 与 类对象,如何获取类对象

 

获取带参构造方法

 

先查看类的带参构造方法

反射:类的对象 与 类对象,如何获取类对象

代码如下:

反射:类的对象 与 类对象,如何获取类对象

反射:类的对象 与 类对象,如何获取类对象