什么是反射?
通过类,可以得到当前类的fields,method,construtor等,可以通过类实例化一个实例,设置属性,唤醒方法。
类反射的包及核心类?
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor
得到Class的三个过程是?
对象.getClass();
类.class
Class.forName("类名");
Constructor 类:代表某个类的一个构造方法
(A)得到某个类所有的构造方法
Constructor[] con=Class.forName(“Java.lang.String”).getConstructor();
(B)得到某一个构造方法:
Constructor con=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
(C)例:String str=new String(new StringBuffer("abc"));
用反射:Constructor con=String.class.getConstructor(StringBuffer.class);
String str=(String)con.newInstance(new StringBuffer("abc"));
Constructor<T> Class.getConstructor(Class<?>... parameterTypes): 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
T Constructor.newInstance(Object... initargs):
Field类:代表某个类中的成员变量
例子:
Class ReflectPiont
{
public int y;
private int x;
ReflectPoint(int y,int x){
This.y=y;
This.x=x;
}
}
Class FieldDemo
{
public static void main(String[] args){
ReflectPoint rp=new ReflectPoint();
Field y=rp.getClass().getField(“y”);
System.out.println(y.get(rp));
Field x=rp.getClass().getField(“x”)
x.setAccessible(true);
System.out.println(x.get(rp));
}
}
Field Class.getField(String name): 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Object Field.get(Object obj): 返回指定对象上此 Field 表示的字段的值。
void Field.set(Object obj, Object value): 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
Method类:代表某一个类中一个成员方法
(A)得到类中的某一个方法
Method m=Class.forName(“Java.lang.String”).getMethod(“charAt”,int.class);
(B)通常方法:System.out.println(str.charAt(1));
反射方法:Method m=str.getClass().getMethod(“charAt”,int.class);
m.invoke(str,1);
Method Class.getMethod(String name, Class<?>... parameterTypes): 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Object Method.invoke(Object obj, Object... args): 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
|
|