67,513
社区成员
发帖
与我相关
我的任务
分享
import java.lang.reflect.Constructor;
class Outer {
class Inter{
}
}
public class Test{
public static void main(String[] args) {
try {
Class l = Class.forName("Outer");
Constructor lon = l.getDeclaredConstructor();
System.out.println(lon.newInstance());
Class c = Class.forName("Outer$Inter");
Constructor con = c.getDeclaredConstructor();
System.out.println(c.getDeclaredConstructors().length);
con.setAccessible(true);
l.newInstance();
con.newInstance();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
public class Test {
public static void main(String[] args) throws Exception{
Class<?> cl=Class.forName("Outer");
Constructor<?> con=cl.getDeclaredConstructor();
con.setAccessible(true);
//在实例化内部类对象之前先实例化外部类对象
Object outer=con.newInstance();
//内部类对象的构造方法看似无参其实是有含有外部类对象的有参构造函数
cl=Class.forName("Outer$Inter");
//这才是他真正的构造函数
con=cl.getDeclaredConstructor(Outer.class);
con.setAccessible(true);
//既然含有外部类对象的构造函数自然在构造的时候要把外部类的对象传入
Object inter=con.newInstance(outer);
System.out.println(inter);
}
}
class Outer {
private class Inter{
}
}
Constructor con = c.getDeclaredConstructor(new Class[]{Outer.class});
System.out.println(c.getDeclaredConstructors().length);
con.setAccessible(true);
l.newInstance();
con.newInstance(new Outer());