本文共 601 字,大约阅读时间需要 2 分钟。
参考:studyvcmfc的专栏
《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成员。
转载地址:http://yegol.baihongyu.com/