现在的位置: 首页 > 综合 > 正文

黑马程序员—高新技术_反射(1)

2018年05月23日 ⁄ 综合 ⁄ 共 1316字 ⁄ 字号 评论关闭

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

如何得到各个字节码对应的实例对象
类名。class,例如,System.class
对象。getClass(),例如,new Data().getClass()
Class.forName("类名"),例如,Class.forName("java.util.Data")

Class有9个预定义的class对象       (8个基本的数据类型和void)
Class c1s1=void.class();

int.class==Integer.TYPE
int[].class.isArray()

反射就是把java类中的各种成分映射成相应的java类

method   代表类中的方法
Constructor类     代表某个类中的一个构造方法   
获得方法时要用到类型:
Constructor constructor =
Class.forName("java.lang.String").getConstructor(new StringBuffer("abc"));
调用获得的方法时要用到上面相同类型的实例对象
通常方式:String str=new String(new StringBuffer("abc"));
反射方式:String str=(String)construcotr.newInstance(new StringBuffer("abc"));

类Class也有一个newInstance的方法
当用到的是,不带参数的构造方法可以直接用类Class的newInstance()方法
String str=(String)Class.forName("java.lang.String").newInstance();

类Field 成员类
类ReflectPoint中的成员x,y
private int x;
public int y;

类ReflectTest中的调用
ReflectPoint pt1=new ReflectPoint(3,5);
Field fieldY=pt1.getClass().getField("y");
System.out.println(fieldY.get(pt1));

getDeclaredField方法为得到私有成员的方法,可见
fieldX.setAccessible(true);暴力设置可得到该private属性的值

ReflectPoint pt2=new ReflectPoint(3,5);
Field fieldX=pt2.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt2));

将字符串中所有的字符b,变成字符a
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b','a');
field.set(obj,newValue);

 

抱歉!评论已关闭.