美文网首页Java学习笔记
[Java基础] 关于默认包访问权限类里的public stat

[Java基础] 关于默认包访问权限类里的public stat

作者: 后端技术学习分享 | 来源:发表于2017-08-31 16:59 被阅读32次

    参考: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成员。

    相关文章

      网友评论

        本文标题:[Java基础] 关于默认包访问权限类里的public stat

        本文链接:https://www.haomeiwen.com/subject/uagqjxtx.html