目录
1.什么是反射机制?
反射机制是java语言中通过动态获取类,然后对类进行操作的一种机制。通常来说,一般创建对象的方式是new直接实例化对象(正射),而还有一种方式就是通过java提供的反射机制来实现。通过反射机制可以操作字节码文件。
2.反射机制常用的类有哪些?
①java.lang.Class
②java.lang.reflect.Method
③java.lang.reflect.Constructor
④java.lang.reflect.Field
※反射机制是用来操作字节码的。这些类就是字节码相关的类。①是某类的字节码类,比如说Student类的字节码Student.class,就可以用①来抽象。②代表类中方法的字节码。③④同理。
3.获取Class的三种方法是什么?
①Class.forName(“完整类名”);
※执行此行代码会导致类加载,静态代码块执行
②A类.class
※java中的任何一种类型都有这个属性
③A类的对象.getClass()
※java中任何一个对象都有这个方法
4.通过反射机制创建对象有什么好处?
通过反射机制创建对象比较灵活。
5.怎么通过反射机制获取类的属性,方法?
①获取类的属性
Class clazz = Class.forName("com.bhh.reflect.Student");
//获取类中的public属性
Field field[] = clazz.getFields();
for(int i = 0;i<field.length;i++){
Field fieldFor = field[i];
System.out.println(fieldFor.getName());
}
//获取类中的全部属性
Field field1[] = clazz.getDeclaredFields();
for(int i = 0;i<field1.length;i++){
Field fieldFor = field1[i];
System.out.println(fieldFor.getName());
}
②获取类的方法
Class clazz = Class.forName("com.bhh.reflect.Student");
Method method = clazz.getDeclaredMethod("study",String.class);
System.out.println(method.getName());
6.怎么通过反射机制获取对象的属性,方法?
①设置对象的属性
Class clazz = Class.forName("com.bhh.reflect.Student");
//创建对象
Object obj = clazz.newInstance();
//给对象赋值
Field field = clazz.getDeclaredField("no");
field.setAccessible(true);
field.set(obj,"100");
②调用对象的方法
Class clazz = Class.forName("com.bhh.reflect.Student");
Object obj = clazz.newInstance();
Method method = clazz.getDeclaredMethod("study",String.class);
method.setAccessible(true);
method.invoke(obj,"Tony");