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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值