文章目錄
面向對象與面向過程
面向對象:當今軟件開發的主流方法之一。它是將數據與操作放在一起,作爲一個整體,即對象。對同類對象抽象出其共性,即類。
面向過程:一個以事件爲中心的開發方法。自頂向下執行,逐步求精,各功能模塊之間功能獨立,內部有順序、選擇和循環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(){ }
}
}
}
非靜態內部類不能有靜態成員
匿名類的注意事項:
- 匿名內部類不能有構造函數
- 匿名內部類不能定義靜態成員、方法和類
- 匿名內部類不能被public、protected、private、static修飾
- 只能創建匿名內部類的一個實例
- 一個匿名內部類一定是再new的後面,這個匿名類必須繼承一個父類或實現一個接口
- 匿名內部類也是局部內部類
獲取父類的類名
通過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二進制浮點數算術標準來執行。