Java之路:this关键字的用法
(1)this代表當前對象的一個引用。所謂當前對象,指的是調用類中方法或屬性的那個對象。
最經常使用this關鍵字的情況,是在對象的一個屬性被方法或構造器的參數屏蔽時,需要調用這個被屏蔽的屬性,如下:
class Person {private String name;private int age;public Person(String name, int age) {// 局部變量name,age把Person類的屬性屏蔽this.name = name;this.age = age;} }(2)this只能在方法內部使用,表示對“調用方法的那個對象”的引用。但要注意,如果在方法內部調用同一個類的另一個方法,就不必使用this,直接調用即可。當前方法中的this引用會自動應用于同一類中的其他方法。
如下:
public class Apricot {void pick() {}void pit() {pick();} }在pit()內部,你可以寫this.pick(),但無此必要。編譯器能幫你自動添加。只有當需要明確指出對當前對象的引用時,才需要使用this關鍵字。
注:有些人執意將this放在每一個方法調用和字段引用前,認為這樣“更清楚更明確”。但是造成別這樣做。我們使用高級語言的原因之一就是它們能幫我們做一些事情。要是你把this放在一些沒必要的地方,就會使讀你程序的人不知所措,因為別人寫的代碼不會到處用到this。人們期望只在必要處使用this。遵循一種一致而直觀的編程風格能節省時間和金錢。
(3)this不能用于靜態方法。main方法也是靜態的,所以this也不能用于main方法。
Static方法是類方法,先于任何的實例(對象)存在。即Static方法在類加載時就已經存在了,但是對象是在創建時才在內存中生成,而this指代的是當前的對象。
在方法中定義使用的this關鍵字,它的值是當前對象的引用。也就是說你只能用它來調用屬于當前對象的方法或者使用this處理方法中成員變量和局部變量重名的情況.。
而且,更為重要的是this和super都無法出現在static 修飾的方法中,static 修飾的方法是屬于類的,該方法的調用者可能是一個類,而不是對象。如果使用的是類來調用而不是對象,則this就無法指向合適的對象。所以static 修飾的方法中不能使用this。
(4)可以使用this關鍵字調用重載構造方法。避免相同的初始化代碼,只能在構造方法中用,并且必須位于構造方法的第一句。并且,除了構造器之外,編譯器禁止在其他任何方法中調用構造器。
package this_constructor; class Person {String name;int age;public Person() {System.out.println("Person() constructor!");}public Person(String name, int age) {this(); // 調用本類中無參構造方法this.name = name;this.age = age;System.out.println("Person(String name, int age) constructor!");} } public class ThisConstructor {public static void main(String[] args) {{new Person("小光", 25);}} }【結果】
再看下例:
public class Rectangle {private int x, y;private int width, height;public Rectangle() {this(0, 0, 0, 0); // 調用當前對象帶有四個參數的構造器}public Rectangle(int width, int height) {this(0, 0, width, height);}public Rectangle(int x, int y, int width, int height) {this.x = x;this.y = y;this.width = width;this.height = height;}... }有的讀者經常會有這樣的疑問,如果我把this()調用無參構造方法的位置任意調換,那不就可以在任何時候都可以調用構造方法了么?實際上這樣理解是錯誤的。構造方法是在實例化一個對象時被自動調用的,也就是說在類中的所有方法里,只有構造方法是被優先調用的,所以使用this調用構造方法必須也只能放在類中。
總結
以上是生活随笔為你收集整理的Java之路:this关键字的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工业用微型计算机(25)-伪操作(1)
- 下一篇: 程序员食品营养(1)-面包基础