问题
I have the following java code:
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
}
}
Why doesn't the class.forName("Test")
work here while the next line works fine?
回答1:
Use Outer$Nested
(regardless if nested class is static or not)
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();
}
}
回答2:
You need to use the fully qualified class name, i.e. yourpackage.CheckInnerStatic$Test
(assuming you defined a package, otherwise skip that part).
回答3:
Class innerClass = Class.forName("com.foo.OuterClass$InnerClass");
来源:https://stackoverflow.com/questions/5828884/how-to-load-nested-classes-in-java