- this 調(diào)用屬性;
- this調(diào)用方法
- 利用this表示當(dāng)前對象
1. 調(diào)用屬性
范例:觀察代碼
class Book {
private String title;
private double price;
public Book(String t , double p) {
title = t;
price = p;
}
//getter , setter 省略
public String getInfo() {
return "書名:" + title + "; 價格:" + price ;
}
}
public class TestDemo {
public static void main(String[] args) {
Book book = new Book("Java" , 89.0);
System.out.println(book.getInfo());
}
}
注意構(gòu)造方法
public Book(String t , double p) {
title = t;
price = p;
}
這個構(gòu)造方法主要功能是為title和price兩個屬性初始化,為了更直觀,方法中的形參名稱可以做修改,直接將參數(shù)名稱改為屬性名稱一致。如:
public Book(String title , double price ) {
title = title ;
price = price ;
}
修改完成后,運行代碼發(fā)行,構(gòu)造方法傳遞的參數(shù)內(nèi)容沒有傳遞到屬性中。
因為再Java程序里面都是以“{}”為界限,如果現(xiàn)在屬性名稱與參數(shù)名稱出現(xiàn)了重名的情況下,如果沒有加入任何的限制,指的都是最近的"{}"內(nèi)的變量名稱。所以再這種情況下為了可以明確的找到要訪問的變量屬于類中的屬性的時候,需要再變量前面加上this,這樣就可以準確的進行性的標記。
public Book(String title , double price ) {
this.title = title ;
this.price = price ;
}
在以后的開發(fā)中,只要是訪問類中的屬性前面必須加上''this''
2. 調(diào)用方法
- 調(diào)用普通方法:
class Book {
private String title;
private double price;
public Book(String t , double p) {
title = t;
price = p;
}
//getter , setter 省略
public void print() {
System.out.println("**************");
}
public String getInfo() {
this.print();
return "書名:" + title + "; 價格:" + price ;
}
}
其中,this.print() 調(diào)用普通方法,關(guān)于調(diào)用普通方法時候需要this,并沒有明確的要求,即使不加this也表示本類調(diào)用的方法,但是為了代碼的嚴謹性,一定要加上this。
- 調(diào)用構(gòu)造方法
范例:觀察問題
現(xiàn)在定義Book類里面有三個構(gòu)造方法,沒個方法都要輸出一行提示纖細"新的Book類對象產(chǎn)生"。
class Book {
private String title ;
private double price ;
public Book() {
System.out.println("新的Book類對象產(chǎn)生");
}
public Book(String t) {
System.out.println("新的Book類對象產(chǎn)生");
this.title=t ;
}
public Book(String t , double p) {
System.out.println("新的Book類對象產(chǎn)生");
this.title = t ;
this.price = p ;
}
//setter , getter 方法省略
public String Info() {
return "書名:" + this.title + " ,價格: " + this.price ;
}
}
public class thisTest {
public static void main(String[] args) {
Book book = new Book();
System.out.println(book.Info());
}
}
觀察可以發(fā)現(xiàn),有重復(fù)代碼,消除重復(fù)代碼后:
class Book {
private String title ;
private double price ;
public Book() {
System.out.println("新的Book類對象產(chǎn)生");
}
public Book(String t) {
this() ; //調(diào)用本類的無參構(gòu)造
this.title=t ;
}
public Book(String t , double p) {
this(t) ; //調(diào)用本類的單參構(gòu)造
this.title = t ;
this.price = p ;
}
//setter , getter 方法省略
public String Info() {
return "書名:" + this.title + " ,價格: " + this.price ;
}
}
public class thisTest {
public static void main(String[] args) {
Book book = new Book();
System.out.println(book.Info());
}
}
以上實現(xiàn)了構(gòu)造方法的互相調(diào)用,但是還要注意兩點:
- 使用 "this()"調(diào)用構(gòu)造方法形式的代碼只能夠放在構(gòu)造方法的首行;
- 進行構(gòu)造方法互相調(diào)用的時候,一定要保留調(diào)用的出口。
3. 表示當(dāng)前對象
所謂的當(dāng)前對象指的就是當(dāng)前正在調(diào)用類中方法的對象。
示例
class Book {
public void print() {
System.out.println("this = " + this);
}
}
public class thisTest {
public static void main(String[] args) {
Book book_1 = new Book();
System.out.println("book_1 = " + book_1);
book_1.print();
System.out.println("------------------");
Book book_2 = new Book();
System.out.println("book_2 = " + book_2);
book_2.print();
}
}
示例結(jié)果
book_1 = thisDemo.Book@4554617c
this = thisDemo.Book@4554617c
------------------
book_2 = thisDemo.Book@74a14482
this = thisDemo.Book@74a14482
可以發(fā)現(xiàn)book_1 和 book_2 的內(nèi)存地址不一樣。但是哪個對象調(diào)用了print的方法,this就自動與此對象指向同一內(nèi)存地址,實際上this就是當(dāng)前調(diào)用方法的對象