java經常使用關鍵字總結

super

  1. 調用父類的非靜態屬性和方法
  2. 調用父類的構造方法(必須寫在子類構造方法的第一行)
  3. 子類構造方法中必定要調用父類構造方法,能夠經過super指定調用父類的哪一個構造方法,若是沒有指定,在實例化子類時會自動調用父類的無參構造方法。java

    class Test02 {
    Test02(){
        System.out.println("父類的無參構造方法");
    }
    }
    public class Test01 extends Test02 {
    Test01(int v){//自動調用父類的無參構造方法
        System.out.println("子類的有參構造方法");
    }
    Test01(){
        System.out.println("子類的無參構造方法");
    }
    public static void main(String[] args) {
        new Test01(5);
        new Test01();
    }
    }

    運行結果:
    在這裏插入圖片描述ide

  4. 若是父類沒有無參構造方法,子類的構造方法必須手動經過super調用父類有參構造方法,不然會報編譯錯誤
class Test02 {
    Test02(int v){
        System.out.println("父類的有參構造方法");
    }
}
public class Test01 extends Test02 {
    Test01(int v){
        super(v);
        System.out.println("子類的有參構造方法");
    }
    Test01(){
        super(7);//注掉該行Test01()處會飄紅
        System.out.println("子類的無參構造方法");
    }
    public static void main(String[] args) {
        new Test01(5);
        new Test01();
    }
}

在這裏插入圖片描述

this

  1. 訪問本類的成員變量,解決成員變量與局部變量名稱衝突問題
  2. 調用成員方法
  3. 調用構造方法(只能在構造方法中調用,必須在第一行,不能互相調用)
    ps:根據形參列表判斷調用的是哪一個構造方法
public class Test01 {

    private int id;

    Test01(){
        System.out.println("無參構造方法");
        this.method();
    }

    Test01(int a,int b){
        this(a);
        System.out.println("有參構造方法2:"+a+","+b);
    }

    Test01(int id){
        this();
        this.id = id;
        System.out.println("有參構造方法1:"+id);
    }

    public void method(){
        System.out.println("方法1");
    }

    public static void main(String[] args) {
        new Test01(10,20);
    }
}

運行結果:
在這裏插入圖片描述this

final

  1. 代碼級別:頂級,成員級別,方法級別
  2. final 修飾的類==不能被繼承==
  3. 修飾的方法==不能被子類重寫==
  4. 修飾的變量是常量,只能賦值一次
  5. 修飾的變量是成員變量時,虛擬機不會對其初始化
class Test02{
    public final void  method(){//final修飾,代表該方法爲最終方法,不能夠被覆蓋重寫
        System.out.println("final修飾的方法");
    }
}

public class Test01 extends Test02 {

    final int ID = 10;
    int num = 9;

//    public void method(){//會報錯:'method()'不能覆蓋'review.Test02' 中的 'method()';重寫方法是 final
//
//    }

    public static void main(String[] args) {
//         new Test01().id = 100;//報錯:沒法爲 final 變量 'id' 賦值
        System.out.println(new Test01().num);//9
    }
}

abstract

  1. 代碼級別:頂級,成員級別
  2. 包含抽象方法的類必須聲明爲抽象類
  3. 抽象類不能夠被直接實例化,只能經過子類的實例化
  4. 抽象方法必須被子類覆寫,所以==限定符不能夠是private==
  5. ==抽象方法不能夠被static修飾==,若是用static修飾了,那麼咱們能夠直接經過類名調用,而抽象方法壓根就沒有主體,沒有任何業務邏輯,這樣就毫無心義了
  6. ==抽象類不能用final修飾==
abstract class Test02{

    public abstract void method();

    public void method2(){
        this.method();//此處的this表明的是繼承該類的類,而不是該類自己
        System.out.println("抽象類內部能夠有普通方法");
    }
}

public class Test01 extends Test02 {

    @Override
    public void method() {
        System.out.println("實現抽象類的抽象方法");
    }
    public static void main(String[] args) {
       Test02 test02 = new Test01();
       test02.method();
       System.out.println("===========");
       test02.method2();
    }

}

運行結果:
在這裏插入圖片描述.net

static

  1. 修飾成員變量,成員方法,內部類,代碼塊
  2. 代碼級別:成員級別
  3. 與對象解綁:非靜態的屬性和方法屬於所在類的對象,靜態的屬性和方法與對象解綁,屬於所在類!!
  4. 訪問方式:
    類名.靜態屬性/方法 (推薦)
    對象名.靜態屬性/方法
  5. 靜態方法只能訪問用static修飾的屬性和方法(沒有被static修飾的屬性和方法須要建立對象再訪問)。非靜態方法能夠訪問靜態方法和屬性
  6. 靜態方法中不能出現 this 關鍵字!!!
  7. static 修飾的代碼塊和成員變量在類加載時執行!執行順序爲書寫順序
  8. static 只能修飾內部類!!!
    緣由:static實現與對象解綁,外部類都沒有所屬對象,何來解綁一說!
class Test02 {
    Test02(int v){
        System.out.println("父類的有參構造方法");
    }
}
public class Test01 extends Test02 {

    static class Inner{
        Inner(int v){
            System.out.println("靜態內部類的構造方法");
        }
    }

    class Inner2{
        Inner2(int c){
            System.out.println("普通內部類的構造方法");
        }
    }

    static int id;

    Test01(){
        super(7);
        System.out.println("子類的無參構造方法");
    }

    static void mathod(){
        System.out.println("子類的靜態方法");

    }

    public static void main(String[] args) {
        int a = Test01.id;
        Test01.mathod();
        System.out.println("===========華麗的分割線===========");
        Test01 test = new Test01();
        int b = test.id;//合法但不推薦
        test.mathod();//合法但不推薦
        System.out.println("===========華麗的分割線===========");
        Test01.Inner2 inner2 = new Test01().new Inner2(1);//普通內部類的調用
        Test01.Inner inner = new Test01.Inner(4);//靜態內部類的調用

    }
}

運行結果:
在這裏插入圖片描述
補充:3d

class Test1004{
    public static Test1004 a = new Test1004();
    public static Test1004 b = new Test1004();
    {
        System.out.println("構造代碼塊");
    }
    static{
        System.out.println("靜態代碼塊");
    }
}

public class StaticDemo {
    public static void main(String[] args) {
       Test1004 t = new Test1004();
    }
}

運行結果:
java經常使用關鍵字總結code

訪問限定符

  • private (類訪問級別):修飾類的成員,則該成員只能被該類的其餘成員修飾,其餘類沒法直接訪問
  • default(包訪問級別): 若是一個類或者成員沒有聲明訪問限定符,則默認爲該訪問限定符。被該訪問限定符修飾的成員或類只能被本包下的其餘類訪問
  • protested (子類訪問級別):被該修飾符修飾的成員能夠被同一包下的其餘類訪問,也能被不一樣包下該類的子類訪問
  • public(公共訪問級別):被public修飾的類或者成員,能夠被全部的類訪問
訪問限定符 類內部 同一包的其餘類 其餘包的子類 其餘包的其餘類
private Y N N N
default Y Y N N
protested Y Y Y N
public Y Y Y Y
相關文章
相關標籤/搜索