一,关于获取成员
在我们正常获取成员的时候的形式是这样的:
Person p = new Person();
p.age;
则反射机制为:
1.先定义类名
2.然后获取本类的方法,利用getDeclaredField(“age”)
3.再实现类名
4.将实现的类名进行对成员的获取函数get(obj)。如果是需要初始化成员,则需要使用函数set(obj,14);//初始化值
5。如果需要访问私有成员,则需要f.setAccessible(true);//是否通过访问权限
public static void getFileDemo() throws Exception {
Class clazz = Class.forName("day26.Person");
Field f = null;
f = clazz.getDeclaredField("age");//获取本类,包含私有 //clazz.getField("age")//只获取共有
//对私有字段的访问取消权限
f.setAccessible(true);
Object obj = clazz.newInstance();
Object o = f.get(obj);//get()为获取值
System.out.println(o);
//定义值
f.set(obj, 14);//定义值
Object obj1 = f.get(obj);
System.out.println(obj1 );
}
二,获取方法:
a,正常形式获取方法:
Person p = new Person();
p.show();
反射机制为:
获取函数名时:
1.获取类名
2.调用getMethods();//获取此类的全部public方法,包括父类
3.再调用getDeclaredMethods();//获取这个类中的全部方法,只是这个类,包括私有
private static void getMethodDemo() throws Exception {
//获取所有公共函数
Class clazz = Class.forName("day26.Person");
Method[] method = clazz.getMethods();//获取的都是共有的方法 包括父类的方法
method = clazz.getDeclaredMethods();//只能获取本类中所有的方法,包括私有
for(Method me : method) {
System.out.println(me);
}
}
b,调用方法。
获取空参函数
1.寻找类名
2.取空参函数getMethod(” “,null);
3.实现这个类obj
4.实现这个方法需要用invoke(obj,null);
如果需要调用无参数,但是要实现参数的,则先需要调用构造函数。
代码:
Class clazz = Class.forName("day26.Person");
Method method = clazz.getMethod("method", null);//获取空参的一般函数
Object obj = clazz.newInstance();//创建对象
method.invoke(obj, null);//调用方法
System.out.println("==============================");
Method method1 = clazz.getMethod("show", null);
Constructor constructor = clazz.getConstructor(String.class,int.class);//先调用构造函数
Object o = constructor.newInstance("xiaoming",16);
method1.invoke(o, null);
c,调用有参数的函数:
1,获取类名
2,利用getMethod(“函数名”,参数,参数);
3,实现此类
4,实现函数invoke(obj,参数,参数);
代码:
Class clazz = Class.forName("day26.Person");
Method method = clazz.getMethod("method_1", String.class,int.class);
Object obj = clazz.newInstance();
method.invoke(obj, "小强",26);