1. 程式人生 > 實用技巧 >三、this、static、final關鍵字

三、this、static、final關鍵字

this:

1.this是一個關鍵字,是一個引用,儲存記憶體地址指向自身。

2.this可以使用在例項方法中,也可以使用在構造方法中。

3.this出現在例項方法中其實代表的是當前物件。

4.this不能使用在靜態方法中。

5.this. 大部分情況下可以省略,但是用來區分區域性變數和例項變數的時候不能省略。

6.this() 這種語法只能出現在構造方法第一行,表示當前構造方法呼叫本類其他的構造方法,目的是程式碼複用。

class Date {
    private int year;
    private int month;
    private int day;

    public
Date(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } public Date() { this(2020, 1, 2);//只能出現在建構函式第一行 } }

static:(靜態)

1.靜態變數,在類載入的時候初始化,不需要建立物件,記憶體就開闢了。其儲存在方法區記憶體當中。【使用"類名. "的方式訪問】

class Chinese{
    private String id;
    
private String name; static String country = "中國";
   //當一個屬性是類級別的屬性,所有的物件的這個屬性的值是一樣的,建議定義為靜態變數。
public Chinese(String id, String name) { this.id = id; this.name = name; } public String toString() { return id + " " + name + " " + Chinese.country; } }
public class Test { public static void main(String[] args) { Chinese c = new Chinese("1","張三"); System.out.println(c.toString());//1 張三 中國 } }

2.static 關鍵字來定義"靜態程式碼塊"

2.1語法格式

static {

  //java語句

}

2.2靜態程式碼塊在類載入時執行,並且只執行一次。
2.3.靜態程式碼塊在一個類中可以編寫多個,並且遵循自上而下的順序依次執行。
2.4.靜態程式碼塊的作用是什麼?怎麼用?用在哪?什麼時候用?

  -例如在類載入的時刻/時機執行程式碼完成日誌記錄

  -靜態程式碼塊是java為程式設計師準備的一個特殊時刻,這個特殊時刻被稱為類載入時刻。若希望在此刻執行一段特殊的程式,這段程式可以直接放到靜態程式碼塊中。

2.5.通常在靜態程式碼塊完成預備工作,先完成資料的準備工作.
public class Test{
    static {
        System.out.println("static-1");
    }
    
    static {
        System.out.println("static-2");
    }
    
    static {
        System.out.println("static-3");
    }

    public static void main(String[] args) {
        System.out.println("mian()");
    }

}
2.6例項語句塊/程式碼塊【瞭解】

  -例項程式碼塊可以編寫很多個,遵循自上而下的順序執行。

  -例項程式碼塊在構造方法之前執行,例項程式碼塊對應執行一次。

  -例項程式碼塊是Java為程式設計師準備的一個特殊時期,這個特殊時期被稱為:物件初始化時機。

class Fu{
    
    public Fu(){
        System.out.println("Fu()預設構造器執行");
    }
    
    {
        System.out.println(11);
    }
    
    {
        System.out.println(21);
    }
    
    {
        System.out.println(31);
    }
}


public class Test{

    public static void main(String[] args) {
        System.out.println("main()");
        new Fu();
    }

}

//main()
//11
//21
//31
//Fu()預設構造器執行

final:

1.final 表示最終的,不可變的。

2.final 修飾的類無法被繼承。

3.final 修飾的方法無法被覆蓋。

4.final 修飾的變數一旦被賦值之後,不可重新賦值。

5.final 修飾的例項變數,必須手動賦值,不能採用系統預設值。

6.final 修飾的引用,一旦指向某個物件之後,不能指向其他物件,那麼被指向的物件無法被垃圾回收器回收。

7.final修飾的變數是不可變的,這種變數一般和static聯合使用,被稱為“常量”。
  常量的語法定義格式:

    public static final 型別 常量名 = 值;

java規範中要求所有的名字大寫,每個單詞之間使用下劃線連線。

class A{
    //final int a;//在類中不能定義,定義方式見下行
    final int a = 10;
    
    final int b;
    A(int b){
        this.b = b; 
    }
}

class B {
    int a;
    public B(int a) {
        this.a = a;
    }
}

public class Test {

    public static void main(String[] args) {
        final int m;
        m = 10;
//        m = 12;    錯誤
        final B b = new B(10);
//        b = new B();    錯誤
        b.a = 30;
        System.out.println(Chinese.COUNTRY);
    }

}
class Chinese{
    //常量   
    static final String COUNTRY = "中國";
}

上一篇:二,面向物件內容的補充

下一篇:持續更新中