java常用修飾符(隨堂筆記)

即事隨緣發表於2020-10-03

static

  1. static : 靜態的;
  2. static 可以用來修飾:屬性、方法、程式碼塊、內部類;
  3. 使用static修飾屬性,靜態變數(或類變數);
  • 屬性:按是否使用static修飾,又分為:靜態屬性 VS 非靜態屬性(例項變數);
  • 例項變數:我們建立了類的多個物件,每個物件都是獨立的擁有一套類中的非靜態變數,當修改其中一個物件中的非靜態變數時,不會導致其他物件中同樣的屬性值的修改;
  • 靜態變數:我們建立了類的多個物件,多個物件共享一個靜態變數,當通過某一個物件修改靜態變數時,會導致其他物件呼叫此靜態變數時,是修改過了的;
  1. static修飾屬性的其他說明:
  • 靜態變數隨著類的載入而載入,可以通過“類 . 靜態變數”的方式進行呼叫;
  • 靜態變數的載入要早於物件的建立;
  • 由於類只會載入一次,則靜態變數在記憶體中也只會存在一份,存在方法區的靜態域中;
  1. 使用static修飾方法;
  • 隨著類的載入而載入,可以通過“類 . 靜態方法”進行呼叫;
  • 靜態方法中,只能呼叫靜態方法或屬性;
  • 非靜態方法中,既可以呼叫非靜態方法或屬性,也可以呼叫靜態的方法或屬性;
  1. static注意點
  • 在靜態的方法內,不能使用this關鍵字、super關鍵字;
  • 關於靜態屬性和靜態方法的使用,大家都可以從生命週期的角度去理解;
開發中,如何確定一個屬性是否要宣告為static的?
  • 屬性是可以被多個物件所共享的,不會隨著物件的不同而不用的;
開發中,如何確定一個方法是否要宣告為static的?
  • 操作靜態屬性的方法,通常設定為static的;
  • 工具類中的方法,習慣上宣告為static的,比如:Math、Array、Collections;

單例(Singleton)設計模式

  • 設計模式是在大量的實踐中總結和理論化之後優選的程式碼結構、程式設計風格、以及解決問題的思考方式。設計模式就是像是經典的棋譜,不同的棋局,我們用不同的棋譜,免去我們自己再思考和摸索;
  • 所謂類的單例模式,就是採取一定的方法保證再整個的軟體系統中,對某個類只能存在一個物件例項,並且該類只提供一個取得其物件例項的方法。
擴充
  • 建立模式,共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式

  • 結構型模式,共7種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式

  • 行為型模式,共11種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式

餓漢式 vs 懶漢式
//餓漢式
class Bank{
		//1.私有化類的構造器
		private Bank{
		
		}
		//2.內部類建立的物件
		//4.要求此物件也必須宣告為靜態的
		private static Bank instance = new Bank()//3.提供公共的靜態的方法,返回類的物件
		public static Bank getInstance(){
		return instance;
		}
}
//懶漢式
class Bank{
		//1.私有化類的構造器
		private Bank{
		
		}
		//2.宣告當前類物件,沒有初始化
		//4.此物件也必須宣告為static的
		private static Bank instance = null;
		
		//3。宣告public、static的返回當前類物件的方法
		public static Bank getInstance(){
		  if(instance == null){
		     instance = new Bank()}
		 return instance;
		}
}

區分餓漢式和懶漢式

  • 餓漢式:(1)好處:執行緒是安全的;

    ​ (2)壞處:物件載入時間過長;

  • 懶漢式: (1)好處:延遲物件的建立;

​ (2)壞處:執行緒是不安全的;

單例模式的優點:

  • 由於單例模式只生成一個例項,減少了系統效能開銷,當一個物件的產生需要比較多的資源時,如讀取配置、產生其他依賴物件時,則可以通過在應用啟動時直接產生一個單例物件,然後永久駐留記憶體的方式來解決;
程式碼塊
  1. 程式碼塊的作用,用來初始化類、物件;

  2. 程式碼塊如果有修飾的話,只能使用static

  3. 靜態程式碼塊:>內部可以有輸出語句;

    ​ >隨著類的載入而執行,而且只執行一次;

    ​ >作用:初始化類的資訊;

    ​ >如果一個類中定義了多個靜態程式碼塊,則按照宣告的先後順序執行;

    ​ >靜態程式碼塊的執行要優先於非靜態程式碼塊;

  4. 非靜態程式碼塊:內部類可以有輸出語句;

​ >隨著物件的建立而執行;

​ >每建立一個物件,就執行一次非靜態程式碼塊;

​ >作用:可以在建立物件時,對物件的屬性等進行初始化;

​ >如果一個類中定義了多個非靜態程式碼塊,則按照宣告的先後順序執行;

對屬性可以賦值的位置
  • 預設初始化;
  • 顯式初始化/在程式碼塊中賦值;
  • 構造器中初始化;
  • 有了物件以後,可以通過“物件.屬性”或“物件.方法”的方式,進行賦值;
final
  • final:最終的;

  • final 用來修飾一個類:此類不能被其他類所繼承;

    ​ 比如:String類、System類、StringBuffer類等

  • final 用來修飾方法,表明此方法不可以被重寫;

    ​ 比如:Object類中getClass();

  • final 用來修飾變數,此時的“變數”就稱為時一個常量;

    ​ final 修飾屬性,可以考慮賦值的位置有:顯式初始化、程式碼塊初始化、構造器初始化;

​ final 修飾區域性變數,尤其是使用final修飾形參時,表明此形參是一個常量,當我們呼叫 此方法時,給常量形參一 旦賦值以後,就只能在方法體內使用此形參,但不能進行重新賦值;

  • static final 用來修飾屬性:全域性變數;

相關文章