黑马程序员技术交流社区

标题: 静态内部类中的一个小疑问 [打印本页]

作者: JXHIUUI    时间: 2015-8-15 09:32
标题: 静态内部类中的一个小疑问
本帖最后由 JXHIUUI 于 2015-8-15 09:43 编辑
  1. class Outer
  2. {
  3.         static int x = 3;
  4.         
  5.         static class Inner
  6.         {
  7.                 void function()
  8.                 {
  9.                         System.out.println("inner:"+x);
  10.                 }
  11.         }
  12.         
  13.         void method()
  14.         {
  15.                 Inner in = new Inner();
  16.                 in.function();
  17.                
  18.         }
  19. }
  20. class InnerClassDemo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 new Outer.Inner().function();
  25.         }
  26. }
复制代码
如果内部类function功能中调用x时加this,即this.x,编译就会出错。如果Outer.this.x同样也会编译出错。初学者,求大神来解答!!

作者: Five_伍    时间: 2015-8-21 23:54
this。简单的理解为当前这个类,this.x指的是Inner中的变量x,但是Inner类中并没有x变量,所以报错。如果采用Outher.this.x,计算机并不会理解这指的是类Outher中的x,换成Outher.x就行了。
作者: sunsteam    时间: 2015-8-22 00:31
static 修饰的变量是存在方法区里的静态内容   this.x是调用这个函数的对象的x   此x非彼x outer.this也一样
静态优先于对象存在   所以静态方法无法调用在它之后才出现的对象中的内容 只能调用和他同时出现的静态内容




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