天天看點

this、super、static和final關鍵字總結1 this關鍵字2 super關鍵字3 static關鍵字4 final關鍵字

1 this關鍵字

  • 調用本類中定義的成員變量,如果本類中沒有,則繼續從父類中查找。
  • 調用本類中定義的成員方法
  • 在本類的構造方法中調用本類其他構造方法,調用時要放在構造方法的首行
    public class Student { //定義一個類,類的名字為student。 
        public Student() { //定義一個方法,名字與類相同故為構造方法
            this(“Hello!”);
        }
        public Student(String name) { //定義一個帶形式參數的構造方法
        }
    }
               

this 的本質就是“建立好的對象的位址”!由于在構造方法調用前,對象已經建立。是以,在構造方法中也可以使用 this 代表“目前對象”。

普通方法中,this 總是指向調用該方法的對象。構造方法中,this 總是指向正要初始化的對象。

this 不能用于 static 方法中。

2 super關鍵字

  • 調用父類中定義的成員變量
  • 調用父類中定義的成員方法
  • 在子類的構造方法中調用父類的構造方法,調用時要放在構造方法的首行
    // 子類
    public class Student extends Person{ //定義一個類,類的名字為student。 
        public Student() { //定義一個方法,名字與類相同故為構造方法
            super(“Hello!”);  //調用父類的構造方法
        }
    }
    // 父類
    public class Person{
        public Person(String name) { //定義一個帶形式參數的構造方法
        }   
    }
               

super“可以看做”是直接父類對象的引用。可以通過 super 來通路父類中被子類覆寫的方法或屬性。

this和super總結:

  • 在構造器中,this和super隻能出現一個
  • 當構造器中不顯式調用super和this中的一個,預設調用的是父類無參的構造方法。沒有父類的話調用object類的無參構造方法。是以子類擁有父類中的所有屬性和方法,但是由于權限的限制,在子類中無法通路父類中被某些權限限定符修飾的屬性和方法。

this和super的差別

差別點 this super
1 通路屬性 通路本類中的屬性,如果本類中沒有此屬性,則從父類中繼續查找 通路父類中的屬性
2 調用方法 通路本類中的方法 直接通路父類中的方法
3 調用構造器 調用本類構造器,必須放在構造器的首行 調用父類構造器,必須放在子類構造器的首行
4 特殊 表示目前對象 無此概念

3 static關鍵字

在類中,用 static 聲明的成員變量為靜态成員變量,也稱為類變量。 類變量的生命周期和類相同,在整個應用程式執行期間都有效。它有如下特點:

  • 為該類的公用變量,屬于類,被該類的所有執行個體共享,在類被載入時被顯式初始化。
  • 對于該類的所有對象來說,static 成員變量隻有一份。被該類的所有對象共享!!
  • 一般用“類名.類屬性/方法”來調用。(也可以通過對象引用通路靜态成員)
  • 在 static 方法中不可直接通路非 static 的成員。成員方法可以直接通路成員變量、成員方法、靜态變量和靜态方法。靜态方法不可以直接通路成員變量和成員方法,隻能直接通路靜态變量和靜态方法。

構造方法用于對象的初始化!靜态初始化塊,用于類的初始化操作!在靜态初始化塊中不能直接通路非 static 成員。

靜态初始化塊執行順序:

  • 上溯到 Object 類,先執行 Object 的靜态初始化塊,再向下執行子類的靜态初始化塊,直到類的靜态初始化塊為止。
  • 構造方法執行順序和上面順序一樣!!

4 final關鍵字

final 關鍵字的作用:

  • 修飾變量: 被它修飾的變量不可改變。一旦賦了初值,就不能被重新指派。
  • 修飾方法:該方法不可被子類重寫。但是可以被重載!
  • 修飾類: 修飾的類不能被繼承。比如:Math、String 等。