iT邦幫忙

0

[Java] this 關鍵字

  • 分享至 

  • xImage
  •  

閱讀時間: 10分鐘

this會用在以下6種方式:
1, 它可以調用目前所在的class的instance variable。
目的是讓程式去區分instance variables和parameters。

例子: 當沒有使this關鍵字的情況下

class Student{  
int rollno;  
String name;  
float fee;  
Student(int rollno,String name,float fee){  
rollno=rollno;  
name=name;  
fee=fee;  
}  
void display(){System.out.println(rollno+" "+name+" "+fee);}  
}  
class TestThis1{  
public static void main(String args[]){  
Student s1=new Student(111,"martin",5000f);  
Student s2=new Student(112,"yeung",6000f);  
s1.display();  
s2.display();  
}}  

結果是:

0 null 0.0
0 null 0.0

例子: 有使this關鍵字的情況下

class Student{  
int rollno;  
String name;  
float fee;  
Student(int rollno,String name,float fee){  
this.rollno=rollno;  
this.name=name;  
this.fee=fee;  
}  
void display(){System.out.println(rollno+" "+name+" "+fee);}  
}  
  
class TestThis2{  
public static void main(String args[]){  
Student s1=new Student(111,"martin",5000f);  
Student s2=new Student(112,"yeung",6000f);  
s1.display();  
s2.display();  
}}  

結果是:

111 martin 5000
112 yeung 6000

2, 它可以調用目前所在的class的method。
其實有沒有加this關鍵字都是沒有區別。

例子: 可以看到有加this關鍵字和沒有加this關鍵字都是一樣可以調用目前所在的class的method

class A{  
void m(){System.out.println("hello m");}  
void n(){  
System.out.println("hello n");  
//m();//same as this.m()  
this.m();  
}  
}  
class TestThis4{  
public static void main(String args[]){  
A a=new A();  
a.n();  
}}  

結果是:

hello n
hello m

3, 它可以調用目前所在的class的constructor。
可以透過this() 直接調用目前所在的class的constructor
例子:

class A{  
A(){System.out.println("hello a");}  
A(int x){  
this();  
System.out.println(x);  
}  
}  
class TestThis5{  
public static void main(String args[]){  
A a=new A(10);  
}}  

結果是:

hello a
10

例子:利用this()去重用constructor

class Student{  
int rollno;  
String name,course;  
float fee;  
Student(int rollno,String name,String course){  
this.rollno=rollno;  
this.name=name;  
this.course=course;  
}  
Student(int rollno,String name,String course,float fee){  
this(rollno,name,course);//reusing constructor  
this.fee=fee;  
}  
void display(){System.out.println(rollno+" "+name+" "+course+" "+fee);}  
}  
class TestThis7{  
public static void main(String args[]){  
Student s1=new Student(111,"ankit","java");  
Student s2=new Student(112,"sumit","java",6000f);  
s1.display();  
s2.display();  
}}  

結果是:

111 ankit java null
112 sumit java 6000

4, 它可以傳遞method call中的argument。
目的可以用作event handling。
例子:

class S2{  
  void m(S2 obj){  
  System.out.println("method is invoked");  
  }  
  void p(){  
  m(this);  
  }  
  public static void main(String args[]){  
  S2 s1 = new S2();  
  s1.p();  
  }  
}  

結果是:

method is invoked

5, 它可以傳遞constructor call中的argument。
當一個物件會用在不同的class時,可以利用this。
例子:

class B{  
  A4 obj;  
  B(A4 obj){  
    this.obj=obj;  
  }  
  void display(){  
    System.out.println(obj.data);//using data member of A4 class  
  }  
}  
  
class A4{  
  int data=10;  
  A4(){  
   B b=new B(this);  
   b.display();  
  }  
  public static void main(String args[]){  
   A4 a=new A4();  
  }  
}  

結果是:

10

6, 它可以在method中傳遞class的instance variable。
目的可以簡化代碼,只需this來完成。
例子:

class A{  
A getA(){  
return this;  
}  
void msg(){System.out.println("Hello java");}  
}  
class Test1{  
public static void main(String args[]){  
new A().getA().msg();  
}  
}  

結果是:

Hello java

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言