一、 Class类 及 .class字节码文件
在我们编写好java程序之后,在命令行执行javac 命令,将会发现在同一个目录下生成了.class文件。这个文件成为类的字节码文件。
javac Hello.java
生成.class文件
①当程序运行时,这个字节码文件将会加载进入内存,此时称这个过程为 类的加载。
②这个 被加载的.class字节码文件(Hello.class) 可以称其为 Class类的一个实例(对象),也就是我们用 Class类 来描述这个字节码文件。
③这个 原本的类(生成.class文件的类—hello.java文件中的Hello类) 可以称为 运行时类。
(可以说在java中万物皆对象)
文档描述:
二、如何获得Class类的实例(对象)
①使用运行时类的属性
//方法一:使用运行时类的属性: .class属性
Class<Person> pclass1 = Person.class;
System.out.println(pclass1); //class cn.one.Person
②使用运行时类的对象的方法
//方法二:使用运行时类的对象的方法: getClass()方法
Person person = new Person();
Class pclass2 = person.getClass();
System.out.println(pclass2); //class cn.one.Person
③调用Class的静态方法
//方法三:调用Class的静态方法: forName(String classPath---全类名)
Class pclass3 = Class.forName("cn.one.Person");
System.out.println(pclass3); //class cn.one.Person
④使用类的加载器
//方法四:使用类的加载器:classLoader
ClassLoader classLoader = Demo02Class.class.getClassLoader();
Class<?> pclass4 = classLoader.loadClass("cn.one.Person");
System.out.println(pclass4); //class cn.one.Person
注: 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
System.out.println(pclass1 == pclass2); //true
System.out.println(pclass2 == pclass3); //true
System.out.println(pclass3 == pclass4); //true