随笔-0  评论-2  文章-61  trackbacks-0

包级私有的类是不是一定可以被同一个包中的其他类访问呢?答案:不一定

为什么会这样呢?原因与classloader有关。

java规范规定:一个包级私有的类要想被同一包中其他的类访问,则这两个类必须是由同一个classloader加载的。

classloader是分层次的从高到低如下图:

 启动类classloader

 extension classloader

 application classloader

 network classloader

java的类加载机制采用"委托给父类"的模式,就是说一个classloader要加载某个类,它首先让父类加载,如此递归。如果最后没有找到才由它自己加载。如果我们自己写一个类java.lang.Test类,去访问String(int offset, int length, char[] array)这个构造函数(该构造函数是包级私有的),java检查到这两个类不是由同一个classloader加载的所有访问时会报异常。
posted on 2006-12-22 09:06 comchyi 阅读(147) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: