① 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
标签:Java,字节,对象,class,三种,阶段,Student,Class From: https://www.cnblogs.com/gagaya2/p/17797060.html