问答详情
源自:7-7 Java 中的静态内部类

急急急!为什么用HelloWorld.this.score是错误的?

我记得前面讲的静态方法中对静态变量的使用有两种方法:

第一种直接用(变量名);

第二种用(实例化一个对象;对象.变量名);

应该是类似的吧,我这里不就相当于第二种方法么?

提问者:wswzh0329 2015-10-04 14:14

个回答

  • 天启之魂
    2015-10-06 21:06:25
    已采纳

    只要类不是静态的 就有对象,有对象就有this

  • wswzh0329
    2015-10-06 18:36:35

    。。我现在知道this使用的前提是要有当前对象,然后也看了static的相关知识,静态在对象之前就存在,加载了一次,放在内存中;然后又产生了新的问题:

    要调用内部类的普通方法,必须先创建内部类的对象没错吧?!--所以内部类中的成员是可以用this表示的?!

    现在要用this调用外部类的成员,就要看外部类的对象是不是存在;针对这个问题,可以用创建内部类对象需不需要外部类对象来判断:

    1.要是需要,说明有内类对象就肯定存在外类对象,就可以用this引用;

    2.要是不需要,说明即使有内类对象也没有外部对象,也就不能用this引用;--到目前的逻辑应该没错吧?

    接着就具体的判断:

    1.成员内部类:明确的说了需要用外部类的对象来创建内部类的对象,所以能用this;

    2.静态内部类:也是明确的说了不需要外部类的对象来创建内部类的对象,所以不能用this;

    3.方法内部类:可以分为普通方法内部类跟静态方法内部类,普通方法内部类没什么问题,它属于外类的对象,所以肯定是需要对象来调用的,所以可以用this;

    问题来了,静态方法内部类需不需要用外部类的对象来创建内部类的对象呢?根据它能用this来引用,说明是需要外类对象来创建的,可是这个方法不是属于外类的吗,应该不需要外类的对象就能直接用啊?

    大神帮帮忙,非常感谢!


  • 天启之魂
    2015-10-06 13:51:58

     或者你没懂什么是静态!你想自己想清楚为什么静态不能使用this在来考虑别的问题

  • 天启之魂
    2015-10-06 13:50:24

    只想说一句 ,你根本没懂什么是this!就这!

  • wswzh0329
    2015-10-06 12:20:07

    这是静态方法中的内部类中的使用:在内部类的普通方法下面可以使用this;在静态方法下面直接使用this就会报错--对应问题的第二点!(可以的话顺便帮我解决一下注释中带问号的问题,谢谢!)


    //静态方法中的内部类    注:内部类中的方法只能是普通方法

    public int a=1;                                                                    //只能(new Shiyan().a)来调用

    public static int A=3;                           //(Shiyan.A)和(new Shiyan().A)和(Shiyan.this.A) 要是没有相同的还能用(A)

    public static void print(){

    int b=2;                                                                             //唯一的变量形式,要么设为final常量

                                                   //要是有相同的b,如何取这个b的值??????????????????

    class Inner{

    public  int c=8;                                                                            //只能是普通方法

                                                                                      //(this.c)和(new Inner().c)来调用;要是没有相同的,还能(c);

    public  void print(){                                                              //只能是普通方法,静态方法就会报错!

    int d=4;                                                                                    //唯一的变量形式,理由跟上面的b相同

    int c=4;

    System.out.println(Shiyan.this.A);                                     //为什么可以用?

    System.out.println(b);

    System.out.println(this.c);

    System.out.println(d);

    }

    }

    System.out.println(this.A);                                                    //报错了?!

    Inner in=new Inner();

    in.print();

    }


  • wswzh0329
    2015-10-06 12:14:28

      这是静态内部类中普通方法show()下面的调用出错的情况

        // 创建静态内部类

    public  static        class SInner {

            // 内部类中的变量score

            int score = 91;

            

    public void show() {

    System.out.println("访问外部类中的score:" + HelloWorld.this.score           );

                //这里为什么不能用HelloWorld.this.score

    System.out.println("访问内部类中的score:" + score);

    }

    }


  • 天启之魂
    2015-10-04 17:47:17

    ................调用静态变量两种  

    一种是  类名.变量名 

    一种是  对象名.变量名

    你自己创造了第三种!不谢!