Java中this关键字的用法

来源:互联网 发布:期货投资分析软件 编辑:程序博客网 时间:2024/05/18 07:25

Java中this关键字的用法
转自:http://blog.csdn.net/maozhennba3/article/details/49906915

在类的方法定义中使用的this关键字代表使用该方法的对象的引用,this指向的是自身对象的引用,我们可以通过一个小例子分析一下内存分配情况:

代码展示:

 public  class  Leaf{         int i = 0;         Leaf ( int i ){ this.i=i; }         Leaf increament(){            i++;            return this;         }         void print() {             System.out.println(“i = ” + I );         }         Public static void main(String [] args){            Leaf leaf = new (100);            leaf.increament().increament().print();          }      }  

内存分析:

首先,栈空间中有个leaf,它指向我们新new出来的Leaf,其Leaf分配在堆空间中;

其次,调用Leaf的构造方法,在栈空间里分配构造方法的形参i,其值为100;在Leaf中有成员变量i,然后把栈里形参i的值赋给堆空间Leaf成员变量i(为100),构造方法完成,栈中的形参i消失;
这里写图片描述

再次,执行leaf.increament().increament()第一个ncreament(),其i++,则i变为101;return在我们栈空间分配一个临时的内存,这块内容是this的内容,this指向其对象自身,则在栈空间分配的这个临时空间也指向该对象;
这里写图片描述

然后,执行leaf.increament().increament()第二个ncreament(),其是对占内存分配的临时空间调用,即相当于对自身对象继续调用,此时i为102;接着return this,则又重复上面的过程我就不在重复解说,图示说明;
这里写图片描述

最后,调用print()方法,打印输出结果:
这里写图片描述
下面我们就介绍一下,this的几种用法:

(1) 当成员变量和构造方法中的参数重名时,在方法中使用this表明类中的成员变量。

代码如下:

   public  class  Leaf{         int i = 0;         Leaf ( int i){            this.i = i;          }      }  

(1) 把自己当参数传递

代码如下:

  class  Fruit{         Fruit(){            New Apple(this).print; //调用B的方法         }         void print(){             System.out.println(“欢迎来到水果世界”);         }      }      class Apple{      Fruit fruit;      Apple ( Fruit fruit){         this.fruit = fruit;      }      void print(){         a.print();//调用Fruit的方法         b.System.out.println(“欢迎来到苹果世界”);      }       }   

在这里,对象Fruit的构造函数中,用new Apple(this)把对象Fruit自己当做参数传递给了对象Apple的构造函数。

3、在构造函数中,通常this可以调用同一类中别的构造函数。

代码如下:

  Public class Person{         String name;         int age;         String sex;         Person (string n, int g , string s){            name = n;            age = g;            sex = s;         }         Person ( string n ,I nt g){            This(n,g,”男”)         }  

4、this同时传递多个参数。

Public class Person{         String name;         int age;        static  void  show( Person person){          System.out.println( person.name + “,” + person.age);         }         void  see(){           show(this);        }         }  

这里相当于吧当前实例化的person传给了show()方法。

5、当用到一些内部类或匿名类,如事件处理。在匿名类中用this时,这个this指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。

    Public class Person{         Person ( ) {            Thread  thread  = new Thread ( ){               Void run ( ){                   Person.this.run();//调用外部类的方法                }            }          void  run ( ){             System.out.println(“跑”);           }         }  

在这里,thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。

总之,this不管有几种用法,它都是代表使用该方法的对象的引用。

原创粉丝点击