包级私有的类是不是一定可以被同一个包中的其他类访问呢?答案:不一定
为什么会这样呢?原因与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) 编辑 收藏