JAVA的反射机制
程序员文章站
2022-04-24 10:30:24
...
1、Java的反射机制是什么?
JAVA的反射机制是:动态获取信息以及动态调用对象方法的功能。即运行状态中,对任意一个类,都知道该类的属性和方法;
对任意一个对象,都能够任意调用它的属性和方法。
2、Java反射机制主要用于实现以下功能:
(1)在运行时判断任意一个对象所属的类型。
(2)在运行时构造任意一个类的对象。
(3)在运行时判断任意一个类所具有的成员变量和方法。
(4)在运行时调用任意一个对象的方法,甚至可以调用private方法。
3、示例:
(1)、首先创建一个实体类,实现两个接口InterFaceNo、InterFaceHave:
public class Person implements InterFaceNo, InterFaceHave {
/**
* 编号属性
*/
private int pid;
/**
* 姓名属性
*/
private String pname;
/**
* 性别属性
*/
private String psex;
/**
* 实现有参接口类的方法 有参无返回
*/
@Override
public void m3(String str, Integer integer) {
System.out.println(str + integer);
}
/**
* 有参有返回
*/
@Override
public String m4(String str, Integer integer) {
return str + integer;
}
/**
* 实现无参接口类的方法 无参无返回
*/
@Override
public void m1() {
System.out.println("无参无返回");
}
/**
* 无参有返回
*/
@Override
public String m2() {
return "无参有返回";
}
}
(2)创建接口:
InterFaceNo接口:
/**
* 无参的方法的接口
*
*/
public interface InterFaceNo {
/**
* 无参无返回
*/
public void m1();
/**
* 无参有返回
*
* @return
*/
public String m2();
}
InterFaceHave接口:
/**
* 有参的方法的接口
*
*/
public interface InterFaceHave {
/**
* 有参无返回
*/
public void m3(String str, Integer integer);
/**
* 有参有返回
*
* @return
*/
public String m4(String str, Integer integer);
}
(3)通过反射可以得到Person类所有的属性和方法,父类和实现接口:
在测试类main方法中输出:
// 得到该类的对象
Class c = Text.class.forName("com.zking.text.Person");
// (1)该类的所有属性
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
System.out.println("该类中的属性:"+field.getName());
}
// (2)该类的所有方法
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
System.out.println("该类中的方法:"+methods[i]);
}
// (3)该类的父类
Class father = c.getSuperclass();
System.out.println("该类的父类:"+father);
// (4)该类的实现接口
Class[] interfaces = c.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
System.out.println("该类实现的接口:"+interfaces[i]);
}
在控制台输出的结果:
(4)调用接口里面的方法:
// 得到该类的对象
Class c = Text.class.forName("com.zking.text.Person");
// 创建一个新的实例化(实例化)
Object object = c.newInstance();
// (1)调用无参无返回
System.out.println("调用无参无返回的方法:");
Method me1 = c.getMethod("m1", null);
me1.invoke(object, null);
System.out.println("--------------------------");
// (2)调用无参有返回
Method me2 = c.getMethod("m2", null);
Object m2 = me2.invoke(object, null);
System.out.println("调用无参有返回的方法:" + m2);
System.out.println("--------------------------");
// (3)调用有参无返回
System.out.println("调用有参无返回的方法:");
Method me3 = c.getMethod("m3", String.class, Integer.class);
me3.invoke(object, "我的年龄为", 18);
System.out.println("--------------------------");
// (4)调用有参有返回
Method me4 = c.getMethod("m4", String.class, Integer.class);
Object m4 = me4.invoke(object, "我的年龄为", 18);
System.out.println("调用有参有返回的方法:" + m4);
在控制台输出的结果: