黑马程序员——java反射

------- android培训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);}  ------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值