如何在Java中加载嵌套类?

如何在Java中加载嵌套类?,java,static,inner-classes,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

我有以下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
    }
}

为什么
类.forName(“Test”)
在这里不起作用,而下一行工作正常?

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

使用
外部$Nested
(无论嵌套类是否是静态的)

公共类CheckInnerStatic{
私有静态类测试{
静止的{
System.out.println(“静态块初始化”);
}
公开考试(){
System.out.println(“调用的构造函数”);
}
}
publicstaticvoidmain(字符串[]args)抛出ClassNotFoundException、InstantiationException、IllegalAccessException{
System.out.println(“内干管”);
Class cls=Class.forName(“CheckInnerStatic$Test”);
//测试=新测试();
}
}

很抱歉,但这似乎也不起作用,我错了吗?还有,我如何能够在不提供您所说的全名的情况下实例化测试类,但无法加载它?请使用
yourpackage.CheckInnerStatic$Test
。$符号用于限定内部类。请更新您的答案。您需要使用$character而不是dot来加载内部类。为了正确设置术语,没有什么比静态内部类更好的了。您已经嵌套了类-静态和非静态(内部)。
Class innerClass = Class.forName("com.foo.OuterClass$InnerClass");
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();
    }
}