黑马程序员_反射1

 ---------------------- android培训java培训、期待与您交流! ----------------------

反射就是把Java类中的各种成分映射成相应的java类,在Java中,反射机制起到了放大镜的效果,可以通过类名加载这个类,显示这个类的方法等信息

Constructor类

1.得到某一个类的构造方法

Constructor  constructors = Class.forName(''java.lang.String').getconstructor(StringBuffer.class);//获得方法时要用到类型

2.创建实例对象

通常方式:String str = new String(new StringBuffer("abc"));

反射方式:String str = (String)constructor.newInstance(new StringBuffer("abc"));//调用获得的方法时要用到;上面相同类型的实例对象

3.Class.newInstance()方法

例:String obj = (String)Class.forName("java.lang.String").newInstance();

该方法内部先得到默认的构造方法,然后用该方法创建实例对象。

//new String (new StringBuffer("abc"));

利用反射方式来实现

Constructor  constructor1 = String.class.getconstructor(StringBuffer.class);

String str2 = (String)constructor1.newInstance(new StringBuffer("abc");

System.out.println(str2.CharAt(2));

Tips:程序开发分为编译时和运行时,要搞清楚再哪个时期出现了问题。

Field类

Field类代表某个类中的一个成员变量

ReflectPoint pt1 = new ReflectPoint(3,5);
  Field fieldY = pt1.getClass().getField("y");
  System.out.println(fieldY.get(pt1));
  Field fieldX = pt1.getClass().getDeclaredField("x");
  fieldX.setAccessible(true);//此处用到了暴力反射
  System.out.println(fieldX.get(pt1)); 

Tips:field.getType ==String.class

 此处用== 而不是equals,因为字节码只有一份,所以用==比较

Method类

Method类代表某个类中的一个成员方法

得到类中的某个方法

例:Method CharAt = Class.forName("java.lang.String").getMethod("CharAt",int.class);

调用方法

通常方式 System.out.println(str1.charAt(1));

反射方式 System.out.println(charAt.invoke(str1, 1));

如果传递给Method对象的invoke()方法的一个参数为null,说明该Method对象对应的是一个静态方法。

---------------------- android培训java培训、期待与您交流! ----------------------

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值