Java基础 获取 class 对象的三种方式

发布时间 2023-10-30 09:26:26作者: 嘎嘎鸭2

① Class.forName ( "全类名" )   →   最为常用

全类名:包名 + 类名

Class 的首字母是大写的,所以是一个类名,是用来描述字节码文件的。

这个类里面有一个静态方法叫 forName,参数可以传递一个类的全类名,可以获取到参数的字节码文件对象

 

② 类名.class   →   这种方式更多的是 当作参数进行传递

 

③ 对象.getClass ()   →   当我们已经有了这个类的对象时,才可以使用

getClass 是定义在 顶级父类 Object 当中的,所以所有的对象都可以调用这个方法

 

 

了解:

如果我想创建一个类的对象,是分以下几个阶段的:

阶段1:编写 Java 文件(A.java),然后把它编译成 class 字节码文件(A.class)。这个阶段是没有把代码加载到内存当中的,只是在硬盘里面进行的操作,所以这个阶段也叫 源代码阶段。这个阶段我们会用 Class.forName( "全类名" ) 获取到 class 字节码文件的对象

阶段2:运行代码的时候,首先得把类的字节码文件 A.class 加载到内存当中,此时这个阶段叫 加载阶段,我们会用 类名.class 的方式获取到 class 字节码文件的对象

阶段3:继续往下,我们可以在内存当中创建这个类的对象 A a = new A() 。此时叫 运行阶段,这个阶段可以用 对象.getClass() 获取到 class 字节码文件的对象

 

代码示例:

//最为常用的
Class clazz1 = Class.forName("pojo.Student");//clazz1就表示Student这个类的字节码文件的对象
System.out.println(clazz1);

//这种方式 更多的是当作参数进行传递
Class clazz2 = Student.class;
System.out.println(clazz2 == clazz1);//打印结果为true

//当我们已经有了这个类的对象时,才可以使用
Student stu = new Student();
Class clazz3 = stu.getClass();
System.out.println(clazz1 == clazz2);//打印结果为true
System.out.println(clazz3 == clazz2);//打印结果为true