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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java在外部类的方法中创建内部类对象
有时候需要在Java的外部类的一个方法中创建一个内部类的对象,下面用一个简单的小例子来说明一种实现方法。 public class Out { public Out(){ System.out.println("外部类创建"); } class In{ public In(){ System.out.println("内部类创建"); } } public
Java中main方法中为什么不能直接创建实例化内部类对象
1:非静态内部类,必须有一个外部类的引用才能创建。2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。4:静态内部类,不需要外部类引用就可以直接创建。5:同时静态的内部类,也不能直接访问外部类的非静态方法。6:由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因
Java中非静态内部类对象持有外部类对象的引用。
Java中非静态内部类对象持有外部类对象的引用。
北大青鸟.软件工程师计算机基础new1
北大青鸟.软件工程师计算机基础new1 北大青鸟.软件工程师计算机基础new1
内部类,外部类成员的相互访问 及内部类对象的创建
class Human {  private String word = "We ";  protected void en()  {   System.out.print("yes, ");  }       class chineseBrain    //一内部类,可以访问外部类的如何成员   {   String word = " are ";   chineseBr
Java:如何直接创建内部类对象
package thinking.learnInternalClass.hengbao;public class DotNew { public class Inner{ } public static void main(String[] args) { DotNew dn=new DotNew(); DotNew.Inner dni=dn.n
new1
Blog
内部类的描述/什么时候使用/以及所带来的好处
public class DotNew {//定义一个非静态的内部类public class Inner {}public static void main(String[] args) {DotNew dn = new DotNew();//在没有创建外部类的对象时,是不能创建内部类的//因为内部类对象会暗暗的连接到创建它的外部类对象上//如果Inner是static 则下面这种初妱化方法是错的
Java创建内部类对象
要想使用new生成一个内部类的实例,需要先指向一个外部类的实例,也就是先生成外部类的实例, 因为内部类可以调用外部类的成员,当没有外部类实例的时候也就没有这些成员的内存空间, 内部类在实例化的时候,调用外部类的成员就会出错, 所以需要使用外部类的实例 + 点 + new 的方式实例化一个新的内部类 class TestInner{ public static void main
内部类是如何访问外部类私有对象的
我们都是知道内部类就是写在一个类里面的类,类里面的类,不知道你们有没有看过javac之后的结果,就是将一个外部类编译后,生成的字节码文件结果public class OutClass{ private String name; private int id; private String address; public class innerClass{ priv