首页 > 其他 > 详细

非静态内部类的构造器

时间:2016-04-04 14:42:34      阅读:241      评论:0      收藏:0      [点我收藏+]

有如下程序

public class Outer{
    public static void main(String args[])throws Exception{
        new Outer().test();
    }
    public void test()throws Exception{
        //创建非静态内部类对象
        System.out.println(new Inner());
        //使用反射方式创建内部类对象
        System.out.println(Inner.class.newInstance());
    }
    public class Inner{
        public String toString(){
            return "Inner对象";
        }
    }
}

技术分享

 

我们 发现直接创建的内部类对象完全正常,但是通过反射创建的内部类对象抛出了异常。

 

我们对内部类进行反编译

技术分享

我们发现,非静态内部类并没有无参数的构造器,表面上调用Inner的无参数的构造器创建实例,实际上JVM会将this(代表当前默认的Outer对象)作为实参

传入Inner构造器。

这符合非静态内部类的规则:非静态内部类必须寄生在外部类的实例中,没有外部类的对象,就不能产生非静态内部类的对象。因此,非静态内部类不可能有无参数构造器。

当程序通过反射指定调用Inner类无参数的构造器创建对象,导致异常。

非静态内部类的构造器

原文:http://www.cnblogs.com/xurui1995/p/5351798.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!