如何在Java中加载嵌套类?
我有以下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
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();
}
}