反射:顾名思义,就是能从影子看到他的本尊(类和方法的取名通常都有特定的含义) 反编译就是运用反射实现的 自定义或者自描述的
反射的内部实现
Person ->Class
public class Class
{
Field:描述属性
Method:描述方法
Constructor:描述构造器
}
与反射有关4个类:Class(获取实例,字段,方法) Field(与字段相关的操作)
Method(与方法相关的操作) Constructor(与构造函数相关的操作)
反射的3个作用:
1.修改内存中的对象属性(private)
2.直接调用对象的方法(非常规的)
3.创建对象的实例
利用反射获取实例的3个方法:
1.Class.forName("类的完整名称") 必须进行显式的异常处理
返回与此类相关联的Class对象
利用此反射方法获取对象实例可实现通过XML文档对实例的进行配置
<person class="test.Person"></person>
Person p1=Class.forName("test.Person").newInstance();
2.Person p=new Person();
p1.getClass();//获得一个与Person类相关联的Class对象,利用此方法可以创建与先前对象一样类型的对象
Person p2=p1.getClass().newInstance();
3.Person.class 这就是一个与Person有关的Class对象 Class<Person>
Person.class.newInstance();