java反射

反射:反射的机制是将java类中的各个部分反射成相对应的java类。这是传智一个同学对java反射的理解,张老师大加赞成,被张老师收录到自己的课本里。我们的教科书是怎么样定义的呢?审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Reflection命名空间包含的几个类,允许你反射(解析)这些元数据的代码.
那么我们为啥需要用到反射呢?应用程序需要在运行时从某个特定的程序中载入一个特定的类型,以便实现某个任务时可以用到反射,反射主要用于类库,这些类库需要一个类型的定义,以便提供更多的功能。一个事物总有它不好的一面,我们在使用反射动态绑定需要牺牲一定的性能,有些元素数据信息是不能通过反射获取的,默写反射类型是专门为那些CLR开发编辑器开发使用的,所以说不是所有的反射类型都是可以使用的。
我们可以通过setAccessible(true)对类中的私有成员进行操作,当我们把一个对象中的数据copy到另一个对象中,规则是属性名相同就copy,就可以用反射来做,不需要指定每个属性的名字,要需要我们动态从类中获取信息,在判定属性名是否相同即可。这样可以写出很灵活的程序。
既然是某个类的属性,那么反射是如何去访问一个类的属性呢?
Class ownerClass=Class.forName(className);
Field field=ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
a.创建一个Class对象
b.通过getField 创建一个Field对象
c.调用Field.get(Object).
java反射中主要的方法有哪些呢?
Constructor getConstructor() 获取公共构造函数
Field getField(String name) 获得命名的公共字段
Field getDeclaredField(String name) 获得类声明的命名的字段
Method[] getMethods() 获得类的所有公共方法
下面举个例子说明一下java的反射作用。
public class AccpTeacher {
private String name;
private int age;
public AccpTeacher() {
name = "无名氏";
age = 22;
}
public AccpTeacher(String name) {
this.name = name;
this.age = 22;
}
public String toString() {
return "名字是:" + name;
}
public String toString(int age, String name) {
this.name = name;
this.age = age;
return "名字是:" + name + ";年龄是:" + age;
}
}
public static void main(String[] args){

Class[] argtype = new Class[] { String.class };//代表构造方法的参数类型数组
Object[] argparam = new Object[] { "张三" };//代表构造方法的参数值数组
Class classType = Class.forName(AccpTeacher.class.getName());
Constructor constructor = classType.getDeclaredConstructor(argtype); //获得构造方法,argtype是参数类型数组,我们这里代表的是参数只有一个String类型
constructor.setAccessible(true);// 访问私有构造函数,Spring可以配置私有的属性和方法,其实就是用到的这里
Object accpTeacher2 = constructor.newInstance(argparam);
System.out.println(accpTeacher2);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值