java反射机制
JAVA反射机制是在运行状态中,
(1)对于任意一个类,都能够知道这个类的所有属性和方法
(2);对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
反射机制获取Class对象:
1、获取Class对象的三种方式
1.1 Object ——> getClass();
Stu stu1 = new Stu();
Class stuClass = stu1.getClass();
1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
Class stuClass2 = Stu.class;
1.3 通过Class类的静态方法:forName(String className)(常用)
try {
Class stuClass3 = Class.forName("fanshe.Stu");//
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class stuClass3 = Class.forName(“fanshe.Student”);
这里的fanshe.Student我们可以选中类然后右键Copy Reference 就能把它的路径复制下来。
反射机制获取构造方法
1、获取所以公有构造方法getConstructors()
2、获取所有的构造方法
(包括、私有、受保护、默认、公有);getDeclaredConstructors();
3、 获取公有、无参的构造方法);getConstructor(null);
4、获取私有构造方法,并调用;getDeclaredConstructor(String.class);
反射机制获取成员方法:
1.获取Class对象
Class stuClass = Class.forName("fanshe.field.Stu");
2.获取成员方法
2.1获取所有公有方法
Method[] methodArray = stuClass.getMethods();
2.2获取所有的方法,包括私有的
methodArray = stuClass.getDeclaredMethods();
2.3获取具体的某一个共有的方法
Method m = stuClass.getMethod("某一个公有的方法名", String.class);
反射机制获取成员变量:
1.获取Class对象
Method m = stuClass.getMethod("show1", String.class);
2.获取字段
2.1获取所有公有的字段
Field[] fieldArray = stuClass.getFields();
2.2获取所有的字段(包括私有、受保护、默认的)
fieldArray = stuClass.getDeclaredFields()
反射机制调用(构造方法、成员方法、成员变量):
调用构造方法:
1.普通调用
Class clazz = Class.forName("fanshe.Stu");
Constructor con = clazz.getConstructor();
Object obj = con.newInstance();
2.私有构造方法调用
Class clazz = Class.forName("fanshe.Stu");
Constructor con = c.getDeclaredConstructor(String.class);
con.setAccessible(true);
Object obj = con.newInstance("风清扬");
调用成员方法:
1.普通调用
Class stuClass = Class.forName("fanshe.method.Stu");
Method m = stuClass.getMethod("某一个具体的共有的具体的方法", String.class);
Object obj = stuClass.getConstructor().newInstance();
m.invoke(obj, "刘德华");
2.私有构造方法调用
Class stuClass = Class.forName("fanshe.method.Stu");
m = stuClass.getDeclaredMethod("show4", int.class);
System.out.println(m);
m.setAccessible(true);//解除私有限定
Object result = m.invoke(obj, 20);