为什么java.lang.Thread实现中的静态嵌套类不可见?

时间:2012-03-29 17:54:10

标签: java multithreading jvm nested visibility

以下代码完美无缺。

public class StaticClass {

public static void main(String[] args) {
    L.P h = new L.P();
    h.show();

}

}

class L {

static class P {
    public void show() {
        System.out.println("This is static nested class.");
    }
}

}

那么为什么“。Thread.WeakClassKey t”无法访问java.lang.Thread类中的静态嵌套类“static class WeakClassKey extends WeakReference>”在我班上?

java.lang.Thread的源代码可以在这里找到:http://www.docjar.com/html/api/java/lang/Thread.java.html [第#1984行]。

3 个答案:

答案 0 :(得分:6)

因为它不是public类。

static class WeakClassKey

这具有包权限,因此只允许同一包中的类引用它。

答案 1 :(得分:5)

因为它不是publicprotected类,因此对于位于不同包中的代码不可见。

答案 2 :(得分:4)

StaticClassL位于同一个包中,P类具有默认(即包私有)访问修饰符。这就是它可以访问的原因。 WeakClassKey具有相同的修饰符 - 但是在不同的包中。只有来自java.lang的班级才能访问它。