java反射机制
反射机制是指在运行中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法和属性。即动态获取信息和动态调用对象方法的功能称为反射机制。
反射机制的作用:
在运行时判断任意一个对象所属的类
在运行时构造一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法,生成动态代理
与反射相关的类:
Class:表示类,用于获取类的相关信息
Field:表示成员变量,用于获取实例变量和静态变量等
Method:表示方法,用于获取类中的方法参数和方法类型等
Constructor:表示构造器,用于获取构造器的相关参数和类型等
import java.lang.reflect.Constructor;
import static java.lang.Class.forName;
public class ReflectTest {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, NoSuchFieldException {
BtfGr bg=new BtfGr("ly",21,1);
String className="fenshe.BtfGr";
// 获取Class类有三种基本方式
Class c1=BtfGr.class;
Class c2=bg.getClass();
Class c3=Class.forName(className);
// Class类创建实例
BtfGr bg1=(BtfGr) c1.newInstance();
System.out.println("Class类创建实例: "+bg1);
// Field字段
System.out.println("获取level字段: "+c2.getDeclaredField("level"));
// 获取构造方法
System.out.println("获取构造方法: ");
Constructor[] c2c= c2.getConstructors();
for( Constructor c: c2c )
System.out.println(c);
// 获取方法
System.out.println("\n获取getName 方法: "+c2.getDeclaredMethod("getName"));
}
}
class BtfGr
{
private String name;
private int age;
private int level;
public BtfGr()
{
}
public BtfGr(String name, int age, int level)
{
this.name = name;
this.age = age;
this.level = level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Override
public String toString() {
return "BtfGr{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", level=" + level +
'}';
}
}
Class类创建实例: BtfGr{name='null', age='0', level=0}
获取level字段: private int fenshe.BtfGr.level
获取构造方法:
public fenshe.BtfGr()
public fenshe.BtfGr(java.lang.String,int,int)
获取getName 方法: public java.lang.String fenshe.BtfGr.getName()