A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

这是基础班的一个练习题:老师说B选项错误的原因是主函数是静态的,不能在里面new对象。不能理解。
class Demo
{       
        public void func()
        {
                //位置1;
                new  Inner();
               
        }
        class Inner{}
        public static void main(String[] args)
        {
                Demo d=new Demo();
                // 位置2
                new Inner();//不可以,因为主函数是静态的。如果访问inner需要被static修饰。
        }
}

A.在位置1写 new Inner();//ok
B.在位置2写 new Inner();               
C.在位置2写 new d.Inner();//错误,格式错误。        new new Demo().Inner();       
D.在位置2写 new Demo.Inner();//错误,因为inner不是静态的。


通常写程序不是经常在主函数里new对象吗?这里的B选项为什么就不行呢?谢谢了

3 个回复

倒序浏览
Inner是内部类,在这里属于内部的非静态成员,与你定义一个int a=10;是一样的,而一个类的内部非静态成员是无法在静态类中调用的
回复 使用道具 举报
能理解D选项不对,不能理解B?Inner 是非静态的内部类。所以不可以直接被类名调用。那么静态的方法中肯定也不能调用非静态的成员位置的内部类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马