黑马程序员技术交流社区

标题: 基础班的一道练习题,静态的主函数里面不能new对象么? [打印本页]

作者: pancl    时间: 2014-5-16 13:19
标题: 基础班的一道练习题,静态的主函数里面不能new对象么?
这是基础班的一个练习题:老师说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选项为什么就不行呢?谢谢了


作者: lwy0319    时间: 2014-5-23 23:45
Inner是内部类,在这里属于内部的非静态成员,与你定义一个int a=10;是一样的,而一个类的内部非静态成员是无法在静态类中调用的
作者: 塔罗    时间: 2014-5-31 09:05
能理解D选项不对,不能理解B?Inner 是非静态的内部类。所以不可以直接被类名调用。那么静态的方法中肯定也不能调用非静态的成员位置的内部类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2