如何在Java中加载嵌套类?

Viv*_*vek 15 java static inner-classes

我有以下java代码:

public class CheckInnerStatic {

private static class Test {
    static {
        System.out.println("Static block initialized");
    }
    public Test () {
        System.out.println("Constructor called");
    }
}

    public static void main (String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        System.out.println("Inside main");
        Class.forName("Test");    // Doesn't work, gives ClassNotFoundException
        //Test test = new Test();   // Works fine
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么不在class.forName("Test")这里工作,而下一行工作正常?

MeB*_*Guy 30

使用Outer$Nested(无论嵌套类是否为静态)

public class CheckInnerStatic {

    private static class Test {
    static {
        System.out.println("Static block initialized");
    }
    public Test () {
        System.out.println("Constructor called");
    }
}

    public static void main (String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        System.out.println("Inside main");
        Class<?> cls = Class.forName("CheckInnerStatic$Test");
        //Test test = new Test();
    }
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 9

您需要使用完全限定的类名,即yourpackage.CheckInnerStatic$Test(假设您定义了一个包,否则跳过该部分).


Hen*_*sek 7

Class innerClass = Class.forName("com.foo.OuterClass$InnerClass");
Run Code Online (Sandbox Code Playgroud)