黑马程序员技术交流社区

标题: 内部类咨询!! [打印本页]

作者: 涐扪①起奮乧    时间: 2013-10-28 11:29
标题: 内部类咨询!!
  1. class Outer
  2. {
  3.         //private int x = 3;内部类也可以直接访问
  4.         int x = 3;//如果注释掉int x = 3;
  5.        
  6.         class Inner
  7.         {
  8.                 int x = 4;//如果注释掉int x = 4;
  9.                 void function()
  10.                 {
  11.                         int x = 6;
  12.                         System.out.println("inner:"+x);        //前面注释掉的情况,x前面省略Outer.this.
  13.                         System.out.println("inner:"+x);        //局部有打印局部
  14.                         System.out.println("inner:"+this.x);//加上this打印内部类里面成员变量x
  15.                         System.out.println("inner:"+Outer.this.x);//加上Outer.this打印外部类成员变量x
  16.                 }
  17.         }
  18.        
  19.         void method()
  20.         {
  21.                 Inner in = new Inner();
  22.                 in.function();
  23.         }
  24. }
  25. class InnerClassDemo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 Outer out = new Outer();
  30.                 out.method();
  31.                 //Inner in = new Inner();
  32.                 //in.fuction();
  33.                 //直接访问内部类中成员但是只使用于不私有化的情况,一般几乎用不着
  34.                 //Outer.Inner in = new Outer().new Inner();
  35.                 //in.function();
  36.         }
  37. }
复制代码
请问System.out.println("inner:"+this.x);//加上this打印内部类里面成员变量x,这句话我这样理解是对的吗?还是这里的x指的是本类中的x,这一块,还是希望理解的人给深度剖析一下,谢谢
作者: linjl_ll    时间: 2013-10-28 12:05
this.x 指的是该类所生成当前对象中的x,this关键字引用的就是当前对象。你可以把内部内单独拿出来当做一个没有外部类来理解,你看下面的代码this.x指的是什么呢。this这个关键词可以再看看。
class Inner
        {
                int x = 4;//如果注释掉int x = 4;
                void function()
                {
                        int x = 6;
                        System.out.println("inner:"+this.x);
                       
                }
        }
作者: 遗忘    时间: 2013-10-28 12:45
this :代表本类的对象 ,代表它所在函数,所属对象的引用。
简单的说:哪个对象在调用this所在的函数,this就代表哪个对象。
那么你的程序中的语句System.out.println("inner:"+this.x);中 this代表Inner类的对象。
this.x 代表Inner 类对象 in 的成员标量 x,也就是 int x = 4; 这个x;
作者: 涐扪①起奮乧    时间: 2013-10-28 17:25
linjl_ll 发表于 2013-10-28 12:05
this.x 指的是该类所生成当前对象中的x,this关键字引用的就是当前对象。你可以把内部内单独拿出来当做一个 ...

看完你的解释,我重新复习一下。this:用于区分局部变量和成员变量的同名情况。本类中同名变量x有两个,一个是局部的,一个是Inner类的成员变量x,加上this代表本类对象,Inner类在调用this,所以代表int x=4中的x,这样理解应该是对的吧
作者: 涐扪①起奮乧    时间: 2013-10-28 17:25
遗忘 发表于 2013-10-28 12:45
this :代表本类的对象 ,代表它所在函数,所属对象的引用。
简单的说:哪个对象在调用this所在的函数,this ...

this:用于区分局部变量和成员变量的同名情况。本类中同名变量x有两个,一个是局部的,一个是Inner类的成员变量x,加上this代表本类对象,Inner类在调用this,所以代表int x=4中的x,这样理解应该是对的吧
作者: linjl_ll    时间: 2013-10-28 18:51
涐扪①起奮乧 发表于 2013-10-28 17:25
看完你的解释,我重新复习一下。this:用于区分局部变量和成员变量的同名情况。本类中同名变量x有两个, ...

恩,是的,this的作用不仅仅在区分变量上,还可以在一个构造函数中调用另一个构造函数。
class MyTest{
        public MyTest(){
                System.out.println("aaaaa");
        }
        public MyTest(String mm){
                this();
        }
}
作者: 黄炳期    时间: 2013-10-28 22:41
问题解决后及时修改主题至“提问结束”。
作者: 那得好好想想    时间: 2013-10-29 10:20
内部类中的this只代表当前这个内部类,如果想在内部类中使用父类的元素,需要把父类名加到前面,例如:父类名.this  。
this其实不难理解,简单来说,就是你这个方法属于谁,在这个方法体内,谁就是this。




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