!!!反射就是将Java类中的各个成分映射成为相应的java类。
一.Constructor(构造方法)反射:
利用Constructor来构造对象:
1.获取Constructor的示例对象:
Constructor con=String.class.getConstructor(StringBuffer.class);
2.利用Constructor对象的newInstance方法来创建对象:
con.newInstance(new StringBuffer("abc"));
上述两步等效为:new String(new StringBuffer("abc"));
小知识点:"abc".getClass()==String.class//结果为true;
二.Field(成员变量)字段的反射:
一.Constructor(构造方法)反射:
利用Constructor来构造对象:
1.获取Constructor的示例对象:
Constructor con=String.class.getConstructor(StringBuffer.class);
2.利用Constructor对象的newInstance方法来创建对象:
con.newInstance(new StringBuffer("abc"));
上述两步等效为:new String(new StringBuffer("abc"));
小知识点:"abc".getClass()==String.class//结果为true;
二.Field(成员变量)字段的反射:
示例代码如下:
package com.oterman.reflect;
import java.lang.reflect.Field;
/**
* 该例子演示Field类的使用;
*/
public class FieldDemo {
public static void main(String[] args) throws Exception {
ReflectPoint pt1=new ReflectPoint(3,5);
Class clazz=pt1.getClass();
Field fieldY=clazz.getField("y");
//fieldY代表的是类的成员的变量,不是对象的成员的值
System.out.println(fieldY.get(pt1));//输出值为5
// Field fieldX=clazz.getField("x");//会报错,因为x是用private来修饰的;
Field fieldX=clazz.getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt1));//输出值为3
}
}
//用来做反射演示用;
class ReflectPoint{
private int x;
public int y;
public ReflectPoint(int x,int y){
this.x=x;
this.y=y;
}
}