欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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]);
		}

在控制台输出的结果:

JAVA的反射机制

(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);

在控制台输出的结果:

JAVA的反射机制