java面向對象技術的學習筆記

面向對象與面向過程

面向對象:當今軟件開發的主流方法之一。它是將數據與操作放在一起,作爲一個整體,即對象。對同類對象抽象出其共性,即類。
面向過程:一個以事件爲中心的開發方法。自頂向下執行,逐步求精,各功能模塊之間功能獨立,內部有順序、選擇和循環3種基本結構組成。

不同點

  1. 出發點:面向對象方法是用符合常規思維方法來處理客觀世界的問題,強調把問題域的要領直接映射到對象及其對象之間的接口上。面向過程方法強調過程的抽象化與模塊化,以過程爲中心來構造和處理客觀世界的問題。
  2. 層次邏輯關係:面向對象方法是用計算機邏輯來模擬客觀世界存在的事物,以使問題的處理更加清晰和直接;面向過程方法是把客觀世界的問題抽象成計算機可以處理的過程。
  3. 數據處理方式與控制程序的方式:面向對象方法將數據和對應的處理方法作爲一個整體,原則上對象的修改只能由自身的成員函數完成,控制程序的方式是通過類似“事件驅動”的方式。面向過程的方法時直接通過程序來處理數據並獲取結果,控制程序的方式則是通過設計來調用。

面向對象的特徵

  • 抽象 :忽略主體中與當前問題無關的部分,抽象出重要的部分
  • 繼承:一個類可以從舊的類中派生,並獲取它的基類的方法和實例變量
  • 封裝:只將模塊中需要暴露的部分暴露給外界
  • 多態:允許不同類的對象對同一消息響應。

面向對象的開發優點

  • 較高的開發效率
  • 保證軟件的魯棒性
  • 保證軟件的高可維護性

重載(overload)和覆蓋(override)

是java多態性的不同表現方式

重載注意項

  • 重載是通過不同的方法參數來區分,如不同的參數個數、參數類型和參數順序
  • 不能通過方法的訪問權限、範圍值類型和拋出的異常類型來重載

覆蓋注意項

  • 發生在繼承中
  • 與基類的原方法有相同的函數名、參數和返回值
  • 與基類的原方法所拋出的異常一致
  • 基類中想要覆蓋的方法不能爲private,否則派生類中相同的方法就是新的一個方法

重載與覆蓋的區別

  • 覆蓋是子類與父類之間,重載是同一個類之間
  • 覆蓋影響的是一個方法,重載影響的是多個方法
  • 覆蓋中,調用方法體是根據對象類型來決定;重載中,調用的方法體是根據參數列表來決定

抽象類與接口

相同點

  • 都不能被實例化
  • 實現類或繼承類都需要實現聲明的方法才能被實例化

不同點

  • 一個類可以實現多個接口,但只能繼承一個抽象類
  • 抽象類可以自己實現方法,接口自java 8之後纔能有默認方法(default)

內部類

主要有四種:

class outClass{
	// 靜態內部類
 	static class innerClass{ }
 	
 	// 成員內部類
 	class innerClass2{ }
 	
 	public void test(){
		// 局部內部類
		class innerClass3{ }
		
		// 匿名內部類
		new Runable(){
			public void run(){ }	
		}
	}
}

非靜態內部類不能有靜態成員
匿名類的注意事項:

  1. 匿名內部類不能有構造函數
  2. 匿名內部類不能定義靜態成員、方法和類
  3. 匿名內部類不能被public、protected、private、static修飾
  4. 只能創建匿名內部類的一個實例
  5. 一個匿名內部類一定是再new的後面,這個匿名類必須繼承一個父類或實現一個接口
  6. 匿名內部類也是局部內部類

獲取父類的類名

通過java的反射機制,使用 getClass().getSuperClass().getName()來獲取父類的名字
而獲取當前類的類名則是:getClass().getName()

final、finally和finalize的區別

final

  • 用於聲明屬性,表示屬性不可變(基本類型不可變值、引用類型不可變引用地址)
  • 用於聲明方法,表示方法不能覆蓋
  • 用於聲明類,表示類不可繼承

finally

  • 作爲異常處理的一部分
  • 當在finally之前調用System.exit(0), finally 不被執行
  • 當finally前面出現死循環,finally不被執行
  • 當線程被殺死,finally不會執行

finalize

在垃圾回收器準備釋放對象佔用空間時,首先調用對象的finalize() 方法,然後纔會真正回收佔用的空間

volatile關鍵字

爲了提高程序的運行效率,java編譯器會自動對其優化,把經常被訪問的變量緩存起來,程序在讀取這個變量時有可能會直接從緩存中讀取這個值,而不去內存中讀取。
設計的優點:提高程序運行效率
設計的缺點:多線程編程時,數據可能會不一致。
而被volatile修飾的變量,將不會做這樣的優化,每次都從內存讀取值。

stricfp關鍵字

用來確保浮點數運算的準確性
可用來修飾一個類、接口和方法,在聲明的範圍內,java編譯器及運行環境會完全依照IEEE二進制浮點數算術標準來執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章