2 jell0731 jell0731 于 2016.09.13 12:19 提问

JAVA中主函数NEW1个内部类对象和NEW1个外部类对象?

编译器报错:无法从静态上下问中引用非静态变量。
但是为什么主函数NEW1个外部类对象可以成立呢?

 class Inner1
{
}

class InnerClassDemo3 
{
    class Inner2
    {
    }

    public static void main(String[] args) 
    {
        //System.out.println("Hello World!");
        new Inner1();
        new Inner2();
    }
}

3个回答

chuanben
chuanben   2016.09.13 12:36

因为Inner2是类InnerClassDemo3 的一个成员变量,静态函数只能访问静态变量,要想访问Inner2有两种方法:
方法一:

static  class Inner2 {
}

将变量声明为静态的
方法二:

 class Inner2 {
        String a = "hello";
    }
    public static void main(String[] args) {
        Inner2 inner = new MyTest().new Inner2();
        System.out.println(inner.a);
    }
zhuzige521888
zhuzige521888   2016.09.13 13:21

1.内部类中有静态方法内部类必须为静态
2.静态方法只能访问静态变量和静态方法
3.静态方法中不能有this.super
4.main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则

基于第1条,因为类InnerClassDemo3有static方法main所以 InnerClassDemo3 需要加static关键字
基于第2条,因为static方法main调用类变量Inner2,所以Inner2加static关键字

qq_25666275
qq_25666275   2016.09.14 12:58

肯定的啊,inner2是内部类,你直接调用它是看不见的,只能用外部类.内部类!内部类相当于是内部成员!
编译器将其翻译后内部类虽然自成一个类,但是此时类的名字不是inner2了!

Csdn user default icon
上传中...
上传图片
插入图片