反射原理及操作

反射原理


应用在一些通用性比较高的代码中
后面接触到的框架,大多数都是使用反射来实现的
在框架开发中,都是基于配置文件开发
在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行
java文件保存到本地硬盘.java
编译成java文件,生成.class文件
使用jvm,把class文件通过类加载加载到内存中
一切都是对象,class文件在内存中使用class类来表示


当时用反射时候,首先需要获取到class类,得到了这个类之后,就可以得到class文件里面的所有内容
-包含属性、构造方法、普通方法
属性通过一个类 Filed表示
构造方法通过一个类 Constructor表示
普通方法通过一个类 Method表示
使用反射操作类里面的属性
首先获取到Class类
Class class1=Person.class;
Class class2=new Person(null, 0).getClass();
Class class3=Class.forName("edu.Person");//常用


//操作无参的构造方法
public void test() throws Exception{
Class class3=Class.forName("edu.Person");
//通过newInstance()方法获取实例
Person p=(Person) class3.newInstance();
p.setAge(12);
System.out.print(p.getAge());
}
//操作有参构造函数
public void test2() throws Exception{
Class class3=Class.forName("edu.Person");
//通过getConstructor()方法获得有参构造方法
Constructor c=class3.getConstructor(String.class,int.class);
//通过有参构造方法设置值
Person p=(Person) c.newInstance("zy",20);
System.out.print(p.toString());
}
//操作属性
public void test3() throws Exception{
Class class3=Class.forName("edu.Person");
//通过getDeclaredField(属性名)方法获取属性
Field f=class3.getDeclaredField("age");
//因为该属性是私有的,所以要设置可以设置私有的权限
f.setAccessible(true);
Person p=(Person) class3.newInstance();
//设置name值,要通过该属性所属的类
f.setInt(p,20);
System.out.print(p.getAge());
}
//操作方法
public void test4() throws Exception{
Class class3=Class.forName("edu.Person");
//通过getDeclaredMethod(方法名,该方法操作的数据类型)方法获取普通方法
Method m=class3.getDeclaredMethod("setName", String.class);
Person p=(Person) class3.newInstance();
//执行该方法,要通过该方法所属的类,后面为该方法传递的值
m.invoke(p,"zy");
System.out.print(p.getName());
}
当操作的方法是静态方法时,因为静态方法调用方式是类名.方法,不需要类的实例,
所以使用反射操作静态方法时,也不需要实例
m.invoke(null,"zy");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值