天天看点

this关键字

使用this调用本类中的属性

       现在观察以下代码,看会有那些问题:

         public void setName(String name){

                   name = name ;

         }

       这里面的两个name都是setName方法中的name参数。

       此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。

class Person{

         private String name ;

         private int age ;

         public Person(String name,int age){

                   this.setName(name) ;

                   this.setAge(age) ;

                   this.name = name ;

         public void setAge(int age){

                   this.age = age ;

         public String getName(){

                   return this.name ;

         public int getAge(){

                   return this.age ;

         public void print(){

                   System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

};

public class Demo35{

         public static void main(String args[]){

                   Person p1 = new Person("张三",30) ;

                   p1.print() ;

使用this还可以从一个构造方法中调用其他构造方法。

例如:有以下一个要求,一个类中存在了三个构造方法,但是要求, 不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。

         public Person(){

                   <b>System.out.println("</b><b>新的对象产生了。。。</b><b>") ;</b>

         public Person(String name){

       以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。

                   System.out.println("新的对象产生了。。。") ;

                   // 最终都是调用无参构造方法

                   this() ;

                   this(name) ;

public class Demo36{

<b>注意点1</b><b>:</b>

       如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。

         public void fun(){

                   // 发现在调用fun方法的时候,必须先设置name的值

                   this("zhangsan") ;

                   this(name) ;         //--&gt; 必须放在首行

<b>注意点2</b><b>:</b>

       使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。

                   <b>this("a",10) ;</b>

<b>this</b><b>最重要的特性 </b><b>—— </b><b>表示当前对象</b>

       当前对象在程序中用以下形式体现:

       · 当前操作此方法的对象,就称为当前对象。

class Demo{

                   System.out.println(this) ;

public class Demo38{

                   Demo d1 = new Demo() ;

                   System.out.println(d1) ;

                   d1.print() ;

                   System.out.println("---------------------") ;

                   Demo d2 = new Demo() ;

                   System.out.println(d2) ;

                   d2.print() ;

<b>回顾:</b>

       之前讲解的两个对象比较的程序。

         // 在类的内部增加一个比较的方法

         public boolean compare(Person p){

                   Person p1 = <b>this</b> ;

                   Person p2 = p ;

                   if(p1.name.equals(p2.name)&amp;&amp;p1.age==p2.age){

                            return true ;

                   }else{

                            return false ;

                   }

<b>分析程序的运行过程:</b>

class A{

         private B b = null ;

         public A(){

                   this.b = new B(<b>this</b>) ;

                   this.b.fun() ;

         public void hello(){

                   System.out.println("Hello World!!!") ;

class B{

         private A a = null ;

         public B(A a){

                   this.a = a ;

                   this.a.hello() ;

public class OODemo40{

                   A aa = new A() ;

本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91236,如需转载请自行联系原作者

下一篇: 数组

继续阅读