定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
获取class对象
//1.配置文件
Class cls1=Class.forName("constructor.Book");
System.out.println(cls1);
//2.参数传递
Class cls2=Book.class;
System.out.println(cls2);
//3.对象获得字节码文件
Book book=new Book();
Class cls3=book.getClass();
System.out.println(cls3);
获取变量
//getFields()获取公有变量
Field[] f=cls1.getFields();
for (Field field:f) {
System.out.println(field);
}
//getField()获取指定公有变量
Field a=cls1.getField("a");
System.out.println(a);
Object value=a.get(book);
System.out.println("获取a值"+value);
a.set(book, 3);
value=a.get(book);
System.out.println("设置a值"+value);
//getDeclaredFields()获取所有变量
Field[] declaredField=cls1.getDeclaredFields();
for (Field field:declaredField) {
System.out.println(field);
}
Field name=cls1.getDeclaredField("name");
System.out.println(name);
name.setAccessible(true);//暴力反射(私有变量需设置忽略访问权限)
Object nvalue=name.get(book);
System.out.println("获取name值"+nvalue);
name.set(book, "history");
nvalue=name.get(book);
System.out.println("设置name值"+nvalue);
获取构造方法
//构造方法主要是创造对象
Constructor[] con=cls1.getConstructors();
for(Constructor c:con) {
System.out.println(c);
}
Constructor c1=cls1.getConstructor(String.class);
Object b=c1.newInstance("chemistry");
System.out.println(b);
//如果传的是空参
Object b1=cls1.newInstance();
System.out.println(b1);