java高新技术--反射知识简叙----黑马程序员

1.java的类用于描述一类事物的共性,类的属性的具体内容由其实例对象确定
java的各个java类,它们是否是属于同一类事物,这个类的名字就是Class
Person p1 = new Person(); 
Class cls1 = Date.class;//字节码1;
Class cls2 = Person.class;//字节码2;
p1.getClass();//得到类的字节码
Class.forName("java.lang.String");得到类的字节码 返回字节码,1)呆在jvm调用,2)加载至jvm调用,
九个预定义Class实例对象:
int.class == Integer.TYPE
数组类型的class实例对象
Class.isArray()
只要在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void
反射:
反射就是把Java类中的各种成分映射成相应的java类。

Constructor类代表某个类的一个构造方法
得到某个类的所有构造方法 getConstructors()
得到某一个构造方法
getConstructor//获得方法时候参数要用到类型
创建实例对象
反射方式
//调用获得的方法时候要用到上面相同的类型的实例对象
Class.newInstance()方法,
该方法采用默认的方法创建实例对象
类名 对象 = 类名.class.getConstructor(参数.class).newInstance(参数)

得到成员变量方法
Field field = 对象.getClass().getFiled("fieldName");
该变量是类对象的变量,不对应具体的类的对象所对应的变量的值
要想获得该类对象的值
则field.get(对象);

对于私有变量,需要用暴力反射
field = 对象.getClass().getDeclaredField(私有变量名);
field.setAccessible(true);//设置可获取的
field.get(对象名);//获得对应的对象的变量值

Method类
method类得到一个类的方法,方法是属于类的
用反射
对象.getClass().getMethod("名字",“方法参数列表的字节码”);
Str1.charAt(1);
Method method = String.class.getMethod("charAt",int.class);
执行
method.invoke(str1,1);//作用某个对象的方法
invoke方法第一参数为null,说明该方法是静态方法

数组的反射
维数相同并且类型相同的字节码都相同

2.反射的作用-->是实现框架的功能
框架与框架要解决的核心问题:
框架与工具类的区别:
工具类被用户的类调用,而框架则是调用用户提供的类
框架要解决的核心问题:
因为在写程序时候无法知道被调用的类名,所以在程序中无法直接

new某个类的实例对象,而要反射方式来做


3.内省(IntroSpector)->JavaBean->特殊的Java类
一定要记住完整的路径,单完整的路径不是硬编码,而是运算出来的
类加载器:
可以加载.class文件
也可以加载普通文件
ReflextTest2.class.getClassLoader().getResourceAsStream(name)


内省取出javaBean的数据
ReflectPoint pt1 = new ReflectPoint(3,5);
String propertyName = "x";

getField:
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method  mehtodGetX = pd.getReadMethod();
Object retVal =mehtodGetX.invoke(pt1);
System.out.println(retVal);

SetField:
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
Method  mehtodSetX = pd2.getWriteMethod();
mehtodSetX.invoke(pt1,7);


可以使用javaBean工具包













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值