反射: 框架设置的灵魂
框架: 半成品软件,可以在框架基础上进行软件开发,简化编码。
反射: 将类的各个部分分封为其他对象,这就是反射机制。
好处:
1、可以在程序运行中操作这些对象。
2、可以解耦,提高程序的可扩展性。
获取Class对象的方式
1、Class.forName(“全类名”)
将字节码文件加载进内存,返回Class对象。
多用于配置文件,将类名定义为配置文件中。读取文件,加载类。
2、类名.Class:通过类名的属性class获取。
多用于参数的传递。
3、对象.getClass():getClass()方法在Object类中定义着。多用于对象的获取字节码的方式。
代码示例
创建一个包,定义一个类Person
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在另外了个包中进行测试
public static void main(String[] args) throws ClassNotFoundException {
//Class.forName("全类名"),将字节码文件加载进内存,返回Class对象.
Class<?> cls1 = Class.forName("domain.Person");
System.out.println(cls1);
//类名.class,通过类名的属性class获取。
Class cls2 = Person.class;
System.out.println(cls2);
//对象.getClass():getClass()方法在Object类中定义着。
Person p = new Person();
Class cls3 = p.getClass();
System.out.println(cls3);
//用==去比较三个对象,如果返回值都是true则证明是相等的
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
System.out.println(cls2==cls3);
}
实验结果表明,这三个类都是相等的。