如何使用反射机制获取class对象
什么是反射?
反射是框架的灵魂,将类的各个组成部分封装为其他对象,这就是反射机制。
什么是框架?
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
如何用反射机制获取class对象
使用反射机制获取class对象一共有三种形式
- Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象,这里的全类名包括了项目中Class类所在的包路径
- 该方法多用于配置文件,将类名定义在配置文件中。读取文件,加载类
- 类名.class:通过类名的属性class获取
- 该方法 多用于参数的传递。
- 对象.getClass():getClass()方法在Object类中定义着。
- 该方法多用于对象的获取字节码的方式
结论:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
以下是代码的实现
package Reflex;
public class ReflexDemo1 {
// 本测试是测试反射的三种写法
public static void main(String[] args) throws ClassNotFoundException {
//因为可能会出现类找不到的异常,所以需要throws或try..catch 处理异常
System.out.println(peopleClass);
//这是反射的第一种写法
//Class.forname(类的路径)
Class peopleclass1 = Class.forName("Reflex.People");
System.out.println("这是反射的第一种写法:Class.forname(类的路径)");
System.out.println(peopleclass1);
//这是反射的第二种写法
//对象.getClass()
People people =new People();
Class peopleClass2 = people.getClass();
System.out.println("这是反射的第二种写法:对象.getClass()");
System.out.println(peopleClass2);
//这是反射的第三种写法
//类名.class
Class peopleClass3 = People.class;
System.out.println("这是反射的第三种写法:类名.class");
System.out.println(peopleClass3);
}
}
package Reflex;
public class People {
private int age;
private String name;
private int sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public People(int age, String name, int sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
public People() {
}
}