JAVA反射

一:百度百科介绍

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为 动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

二:反射对于JAVA的重要性

JAVA反射是使在运行状态中,对于任何的一个类都能知道这个类里面所以的方法,属性。对于任何一个对象都可以调用它的方法和属性。在JAVA架构中是不可缺少的一环。


三:反射在JAVA中的运用

代码如下:

建立实体类

package com.zking.reflection;

public class Peoples  {
    
	private String name;
	private String sex;
	private String id;
	
	//无参无返回
	private void a() {
		System.out.println("a");
	}
	//有参无返回
	private void b(String b) {
		System.out.println(b);
	}
	//无参有返回
	private String c() {
		return "c";
	}
	//有参有返回
	private String d(String d) {
		return d;
	}
}

建立reflect进行反射

代码如下:

package com.zking.reflection;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Reflection {

	private static final Class String = null;

	public static void main(String[] args) throws Exception {
		// 获取地址
		Class c = Peoples.class.forName("com.zking.reflection.Peoples");
		// 设置访问类型
		c.getDeclaredFields();
		//获取父類
		System.out.println(c.getSuperclass());
		
		
		//獲取接口信息
		System.out.println(c.getInterfaces());
		
		
		// 获取ID属性
		Field id = c.getDeclaredField("id");
		System.out.println(id.getName());
		
		// 获取name属性
		Field name = c.getDeclaredField("name");
		System.out.println(name.getName());
		
		// 获取SEX属性
		Field sex = c.getDeclaredField("sex");
		System.out.println(sex.getName());
		
		// 实例化对象
		Object obj = c.newInstance();
		
		// 获取名为a的方法
		Method a = c.getDeclaredMethod("a", null);
		//設置可訪問
		a.setAccessible(true);
		//調用a方法
		System.out.println(a.invoke(obj, null));
		
		
		// 获取名为b的方法
		Method b = c.getDeclaredMethod("b", String.class);//设置数据类型需与实体类方法参数类型一致
		//設置可訪問
		b.setAccessible(true);
		//調用b方法
		System.out.println(b.invoke(obj, "b"));
		
		
		// 获取名为c的方法
		Method c1 = c.getDeclaredMethod("c", null);
		//設置可訪問
		c1.setAccessible(true);
		//調用c方法
		System.out.println(c1.invoke(obj, null));
		
		
		// 获取名为d的方法
		
		Method d = c.getDeclaredMethod("d", String.class);//设置数据类型需与实体类方法参数类型一致
		//設置可訪問
		d.setAccessible(true);
		//調用d方法
		System.out.println(d.invoke(obj, "d"));

	}

}

最后附上一张反射常用的方法图

JAVA反射_第1张图片




 如有不足还请指教!!

你可能感兴趣的:(JAVA反射)