1. 程式人生 > >java關鍵字 this,super,static,final的總結

java關鍵字 this,super,static,final的總結

一、Java提供一個this關鍵字,this關鍵字總是指向呼叫該方法的物件。
  This關鍵字最大的作用時讓類中一個方法訪問該類裡的另一個方法或者field。
  This可以代表任何物件,當this出現在某個方法體中時,它代表的物件是不確定的,但它的型別是確定的,它代表的物件只能是當前類;只有當這個方法被呼叫時,他所代表的物件才能被確定下來:誰在呼叫這個方法,this就代表誰。
  在程式中主要的用途有以下這些方面:
  使用this關鍵字引用成員變數;
  使用this關鍵字在自身構造器方法中呼叫過載的構造方法;
  使用this關鍵字引用成員方法。
1.使用this關鍵字引用成員變數
  在構造方法中經常使用this來引用成員變數對變數進行初始化,如果建構函式中的引數名和成員變數不同則this可以省略,如果相同則不能省略。

 class Animal extends Creature
{
    private String name;
    public Animal(String name)
    {
        this.name = name;
        System.out.println("animal 帶一個引數的構造器," + "動物的名字是"+name);
    }
}

2. 使用this關鍵字在自身構造器方法中呼叫過載的構造方法
  當類的構造方法有多個時,我們需要在一個構造方法中呼叫另一個構造方法則此時需要使用this來呼叫。

 class Animal extends
Creature {
private String name; public Animal(String name) { this.name = name; System.out.println("animal 帶一個引數的構造器," + "動物的名字是"+name); } public Animal(String name, int age) { this(name);//呼叫同一個過載的構造器 System.out.println("Animal 帶兩個引數的構造器"+ "動物的年齡為:"
+age); } }

3.使用this關鍵字引用成員方法。
  當我們在類中的一個方法需要呼叫該類的另一個方法時,我們可以使用this來呼叫,通常this可以省略。

public class Dog
{
    public void run(){ 
        System.out.println("正在執行的run方法");
    }
    public void jump()
    {
        this.run();//this可以省略
        System.out.println("正在執行jump方法");
    }
}

4.需要注意的地方:
  static修飾的方法不能使用this引用,因為在static修飾的方法中使用this關鍵字,則這個關鍵字無法指向合適的物件。
  
二、super 關鍵字
  super可以理解指向自己父類的物件的一個指標,這個父類是指離自己最近的一個父類,在程式設計中主要有以下三種用法:

  1.普通的直接引用,與this類似,super相當於是指向當前物件的父類,可以使用super.xxx來引用父類的成員

  2.子類中的成員變數或方法與父類中的成員變數或方法同名時需要使用super來顯式呼叫父類的成員。

public class Bird
{
    String name ;
    public Bird(String name )
    {
        this.name =name;
    }
    public void fly()
    {

        System.out.println("我會飛,我驕傲");
    }
}
public class Ostrich extends Bird
{
    public Ostrich(String name)
    {
        super(name);
        // TODO Auto-generated constructor stub
    }

    public void fly()
    { 
        System.out.println(super.name);
    }
    public static void main(String[] args)
    {
        Ostrich o = new Ostrich("鴕鳥");
        o.fly();
    }
}

執行結果:

鴕鳥

  3.引用建構函式

  super(引數):呼叫父類中的某一個建構函式(應該為建構函式中的第一條語句)。
  this(引數):呼叫本類中另一種形式的建構函式(應該為建構函式中的第一條語句)。

public class Ostrich extends Bird
{
    public Ostrich(String name)
    {
        super(name);
        // TODO Auto-generated constructor stub
    }
}

三、static 關鍵字
  static 修飾的變數通過叫做靜態變數,static修飾的方法稱為靜態方法,static修飾的方法稱為靜態方法,static修飾的程式碼塊叫做靜態程式碼塊。
  1.static變數
  static變數也稱為靜態變數,靜態變數屬於類變數可以用類名來呼叫,非靜態是例項變數不能用類名來呼叫,靜態變數從這個類的準備階段起開始存在,直到系統完全銷燬這個類,類變數的作用域與這個類的生存範圍相同;而例項變數從該類的例項建立起開始存在,直到系統完全銷燬這個例項,例項變數與對應的例項生存範圍相同。

private static int age =6;

  2.static方法
  static方法也成為靜態方法,由於靜態方法不依賴於任何物件就可以進行訪問,因此對於靜態方法來說,是不能使用this的,因為它不依附於任何物件,既然都沒有物件,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴具體的物件才能夠被呼叫。

public static void jump()
{
    System.out.println("正在執行jump方法");
}

  3.static 程式碼塊
  static修飾的程式碼塊稱為靜態程式碼塊,靜態程式碼塊是類相關的,系統在類初始化階段執行靜態程式碼塊而不是在建立物件時才執行。因此靜態程式碼塊總是比普通程式碼塊先執行。而且只會執行一次。

static
{
    String name = "dog";
}

四、Final
  Final關鍵字可以用於修飾類、變數、和方法,final修飾變數時,表示該變數一旦獲得了初始值就不可被改變,java語法規定:final修飾的成員變數必須由程式設計師顯示指定初始值。
  Final修飾成員變數指定初始值的地方如下:
  類變數:必須在靜態初始化塊中或宣告該變數時指定初始值
  例項變數:必須在非靜態初始塊、宣告該field或構造器中指定初始值。
  Final修飾區域性變數時可以在定義是指定預設值也可以不指定預設值。
  Final修飾引用型別變數不能重新賦值但可以改變引用型別變數所引用物件的內容(引用型別變數指向的地址值不變)。
  Final修飾的方法不可被重寫比如Object類中的getClass()方法。
  Final修飾的類不可以被繼承,不能有子類,例如Math類就是一個fina類。