1. 程式人生 > 其它 >微服務架構:最終一致性 + 事務補償

微服務架構:最終一致性 + 事務補償

構造器:構造器通常也叫構造方法、建構函式,構造器在每個專案中幾乎無處不在。當你new一個物件時,就會呼叫構造器。構造器格式如下:[修飾符,比如public] 類名 (引數列表,可以沒有引數){//這裡不能有return}

  • l預設構造器如果沒有定義構造器,則會預設一個無參構造器,這就是為什麼你定義了一個物件,比如 People,沒有定義任何構造器卻可以new這個物件,比如 new People() 。如果自定義了構造器,則會覆蓋預設構造器。
  • l如何禁止物件被外部建立一些特殊需求,不希望定義的物件被外部建立(典型的就是單例了),那直接將構造器的修飾符改為 private 即可。這樣就不能在外部通過new來建立這個物件了。
  • l構造器過載與普通方法一樣,構造器也支援過載。一個物件中是可以支援同時定義多個構造器,通過不同的引數列表來實現過載。經常看到程式碼中new一個物件時,有時傳入引數,有時又可以不用傳。比如:new People()跟new People("張三"),這裡就是過載了。
  • l構造器的繼承子類構造器會預設呼叫父類無參構造器,如果父類沒有無參構造器,則必須在子類構造器的第一行通過 super關鍵字指定呼叫父類的哪個構造器,具體看下文例子。final類是不允許被繼承的,編譯器會報錯。很好理解,由於final修飾符指的是不允許被修改,而繼承中,子類是可以修改父類的,這裡就產生衝突了,所以final類是不允許被繼承的。
  • l構造器、靜態程式碼塊、構造程式碼塊的執行順序,詳見下文例項

    1)無繼承的情況下的執行順序靜態程式碼塊:只在程式啟動後執行一次,優先順序最高構造程式碼塊:任何一個構造器被呼叫的時候,都會先執行構造程式碼塊,優先順序低於靜態程式碼塊構造器:優先順序低於構造程式碼塊總結一下優先順序:靜態程式碼塊 > 構造程式碼塊 > 構造器

    2)有繼承的情況下的執行順序:父類靜態程式碼塊:只在程式啟動後執行一次,優先順序最高子類靜態程式碼塊:只在程式啟動後執行一次,優先順序低於父類靜態程式碼塊父類構造程式碼塊:父類任何一個構造器被呼叫的時候,都會執行一次,優先順序低於子類靜態程式碼塊父類構造器:優先順序低於父類構造程式碼子類構造程式碼塊:子類任何一個構造器被呼叫的時候,都會執行一次,優先順序低於父類構造器子類構造器:優先順序低於子類構造程式碼塊總結一下優先順序:父類靜態程式碼塊

> 子類靜態程式碼塊 > 父類構造程式碼塊 > 父類構造器 > 子類構造程式碼塊 > 子類構造器例項

構造器的用法:

1.預設構造器

新建一個類,不提供任何構造器,編譯器會預設提供一個無參構造器,這就是為什麼沒定義任何構造器,卻可以new 某個物件()

public class People {}

以上這個People類,可以直接通過 new People()來例項化。

2. 禁止物件被外部建立

如果不希望People在外部通過new People()來例項化,只需要將構造器定義為private

public class People {private People(){ }}

3.構造器過載

過載可以簡單理解為:同個方法名,不同的引數列表。如果希望People能在外部通過new People() 或 new People("字串") 來例項化;

4.構造器的繼承

定義父類構造器,由於該構造器自定義了一個帶參構造器,覆蓋了預設的無參構造器,所以不能直接 new SuperClass() 呼叫了,除非再定義一個無參構造器

定義子類構造器,繼承SuperClass,由於SuperClass沒有無參構造器,所以必須在子類構造器中通過 super("字串")來呼叫,否則編譯器會報錯。