参考:studyvcmfc的专栏
http://blog.csdn.net/studyvcmfc/article/details/5637180
《Java编程思想》(中文第四版)6.5节里有一段话:
正如前面所提到的,如果没能为类访问权限指定一个访问修饰符,它就会缺省得到包访问权限。这意味着该类的对象可以由包内任何其他类来创建,但包外则是不行的。(一定要记住,相同目录下的所有不具有明确package声明的文件,都被视作是该目录下缺省包的一部分。)然而,如果该类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员,尽管他们并不能生成该类的对象。
其中,“然而,如果该类的某个static成员是public的话,则客户端程序员仍旧可以调用该static成员,尽管他们并不能生成该类的对象。”这句话让我觉得费解。非public类的字段怎么可以被不同包的类访问呢?经过实验,确实无法通过常规的 “类名.成员” 来访问他。
但是,通过Java反射是可以实现的。
Class dog = Class.forName("com.spz.javastudy.demo.Dog");
Field field = dog.getField("a");
field.setAccessible(true);
System.out.println(field.getInt(null));
就算Dog类是非public类,依靠反射机制依旧可以获得Dog对象,并获取其中的public static成员。
网友评论