论坛首页 Java企业应用论坛

异常“can not access a member of class” 追踪

浏览 5362 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-29   最后修改:2012-02-29
使用java反射读取对象的成员变量或者静态变量。
--File Company.java
package objs;
class Company{
	public static String type="huawei";
}
--File Test.java
package test;
class Test{
	public static void main(String[] args) throws Exception {
		ClassLoader classLoader = ClassLoader.getSystemClassLoader();
		Class cl=classLoader.loadClass("objs.Company");
		System.out.println(cl);
		Field field=cl.getField("type");
		Object tmp=field.get(null);
		System.out.println(tmp);
	}
}


根据异常栈at java.lang.reflect.Field.doSecurityCheck(Field.java:960)
找到源码:
	Reflection.ensureMemberAccess(caller, clazz, obj, modifiers);


一开始感到无从入手,后来想到java的包机制,访问级别(public,protected,..,private).平时不用反射,基本
上如果访问不了某对象或其方法,变量,eclipse 直接就提醒了,并且根本不能编译。而反射是要等到运行时才检查某
访问合不合法。现在好多框架都用到反射,如果出现非法访问的异常,这应该是一条解决思路。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics