JAVA反射机制


JAVA反射机制是在 运行状态中,对于任意一个 ,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“ 程序运行时,允许改变程序结构或 变量类型,这种语言称为 动态语言”。从这个观点看,Perl,Python,Ruby是 动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的 成员变量 和方法;在运行时调用任意一个对象的方法;生成动态代理。
反射示例:
String methodName = null;
		try {
			methodName = xmlUtil.getMethodName(xml);
		} catch (Exception e) {
			return xmlUtil.toFaildXml("解析xml出错", "unknown");
		}
		Method method = null;
		try {
			method = MainService.class.getDeclaredMethod(methodName, new Class[] { String.class });
		} catch (SecurityException e) {         //在调用方无权需要访问资源时,引发 SecurityException 异常
		
			return xmlUtil.toFaildXml("程序异常", methodName);
		} catch (NoSuchMethodException e) {
			return xmlUtil.toFaildXml("找不到指定方法", methodName);
		}
		try {
			Object returnXml = method.invoke(this, new Object[] { xml });
			return returnXml.toString();
		} catch (IllegalArgumentException e) {
			return xmlUtil.toFaildXml("向方法传递了一个不合法或不正确的参数", methodName);
		} catch (IllegalAccessException e) {    //安全权限异常,一般来说,是由于java在反射时调用了private方法所导致的。
                                                        //如果是这种情况的话,要把反射pirvate的方向设置成public,再调用
			return xmlUtil.toFaildXml("无法访问此方法", methodName);
		} catch (InvocationTargetException e) {   //捕捉到这个异常后要调用 .getCause() 方法才能获取真实的异常信息
			if (e.getCause() instanceof ParseXmlException) {
				return xmlUtil.toFaildXml("解析xml出错", methodName);
			}
			e.getCause().printStackTrace();
			return xmlUtil.toFaildXml("程序执行出现异常:" + e.getCause().getMessage(), methodName);
		}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值