目录
- 获取class对象:
- 三种方式:
- 代码过程:
- 结论:
获取class对象:
三种方式:
- 【只有字节码文件没有进入内存中】Class.forName(“全类名”)【将字节码文件加载进内存,返回class对象】
- 配置文件,将类名定义在配置文件中,读取文件加载类。
- 【已加载,通过类名获取】类名.class【通过类名的属性class获取】
- 传参数
- 【拥有对象,通过对象获取】对象.getClass()【getClass()方法在Object类中定义着】
- 对象的获取字节码的方式
代码过程:
创建两个类,一个测试调用
[Person]
package com.yuhang.domain;
public class Person {
private String name;
private String age;
public Person() {
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
[Student]
package com.yuhang.domain;
public class Student {
}
[ReflectDemo1]
package com.yuhang.reflect;
import com.yuhang.domain.Person;
import com.yuhang.domain.Student;
public class ReflectDemo1 {
public static void main(String[] args) throws Exception {
//1.Class.forName("全类名")
Class cls1 = Class.forName("com.yuhang.domain.Person");
System.out.println(cls1);
//2.类名.class
Class cls2 = Person.class;
System.out.println(cls2);
//3.对象.getClass()
Person person = new Person();
Class cls3 = person.getClass();
System.out.println(cls3);
// == 比较三个对象
System.out.println(cls1 == cls2);//true
System.out.println(cls1 == cls3);//true
Class studentClass = Student.class;
System.out.println(cls1 == studentClass);//false
}
}
结论:
同一个字节码文件Class,在程序运行中只会加载一次,无论那种class对象获取方式,都是获取的同一个。
2021年9月26日15:39:39