码迷,mamicode.com
首页 > 其他好文 > 详细

非静态内部类的构造器

时间:2016-04-04 14:42:49      阅读:130      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!