Java 是面向?qū)ο蟮母呒壘幊陶Z言,類和對象是 Java 程序的構(gòu)成核心。圍繞著 Java 類和 Java 對象,有三大基本特性:封裝是 Java 類的編寫規(guī)范、繼承是類與類之間聯(lián)系的一種形式、而多態(tài)為系統(tǒng)組件或模塊之間解耦提供了解決方案。
本文主要圍繞這三大特性介紹一下 Java 面向?qū)ο?、組件解耦的核心思想。
1、面向?qū)ο笏枷?/strong>
面向?qū)ο缶幊淌钱斀裰髁鞯某绦蛟O計思想,已經(jīng)取代了過程化程序開發(fā)技術(shù),Java 是完全面向?qū)ο缶幊陶Z言,所以必須熟悉面向?qū)ο蟛拍軌蚓帉?Java 程序。
面向?qū)ο蟮某绦蚝诵氖怯蓪ο蠼M成的,每個對象包含著對用戶公開的特定功能和隱藏的實現(xiàn)部分。程序中的很多對象來自 JDK 標準庫,而更多的類需要我們程序員自定義。
從理論上講,只要對象能夠?qū)崿F(xiàn)業(yè)務功能,其具體的實現(xiàn)細節(jié)不必特別關(guān)心。
面向?qū)ο笥幸韵绿攸c:
(1)面向?qū)ο笫且环N常見的思想,比較符合人們的思考習慣;
(2)面向?qū)ο罂梢詫碗s的業(yè)務邏輯簡單化,增強代碼復用性;
(3)面向?qū)ο缶哂谐橄蟆⒎庋b、繼承、多態(tài)等特性。
面向?qū)ο蟮木幊陶Z言主要有:C++、Java、C#等。
2、類和對象的關(guān)系
類:
對某類事物的普遍一致性特征、功能的抽象、描述和封裝,是構(gòu)造對象的模版或藍圖,用 Java 編寫的代碼都會在某些類的內(nèi)部。類之間主要有:依賴、聚合、繼承等關(guān)系。
對象:
使用 new 關(guān)鍵字或反射技術(shù)創(chuàng)建的某個類的實例。同一個類的所有對象,都具有相似的數(shù)據(jù)(比如人的年齡、性別)和行為(比如人的吃飯、睡覺),但是每個對象都保存著自己獨特的狀態(tài),對象狀態(tài)會隨著程序的運行而發(fā)生改變,需要注意狀態(tài)的變化必須通過調(diào)用方法來改變,這就是封裝的基本原則。
3、封裝思想
核心思想就是“隱藏細節(jié)”、“數(shù)據(jù)安全”:將對象不需要讓外界訪問的成員變量和方法私有化,只提供符合開發(fā)者意愿的公有方法來訪問這些數(shù)據(jù)和邏輯,保證了數(shù)據(jù)的安全和程序的穩(wěn)定。
具體的實現(xiàn)方式就是:
使用 private 修飾符把成員變量設置為私有,防止外部程序直接隨意調(diào)用或修改成員變量,然后對外提供 public 的 set 和 get 方法按照開發(fā)者的意愿(可以編寫一些業(yè)務邏輯代碼,雖然很少這樣做)設置和獲取成員變量的值。
也可以把只在本類內(nèi)部使用的方法使用 private,這就是封裝的思想,是面向?qū)ο笞罨镜拈_發(fā)規(guī)范之一。
在此,我們有必要說一下 Java 的訪問權(quán)限修飾關(guān)鍵字。Java 中主要有 private、protected、public 和 默認訪問權(quán)限 四種:
public 修飾符,具有最大的訪問權(quán)限,可以訪問任何一個在 CLASSPATH 下的類、接口、異常等。
protected 修飾符,主要作用就是用來保護子類,子類可以訪問這些成員變量和方法,其余類不可以。
default 修飾符,主要是本包的類可以訪問。
private 修飾符,訪問權(quán)限僅限于本類內(nèi)部,在實際開發(fā)過程中,大多數(shù)的成員變量和方法都是使用 private 修飾的。
Java 的訪問控制是停留在編譯層的,只在編譯時進行訪問權(quán)限檢查,不會在類文件中留下痕跡。
通過反射機制,還是可以訪問類的私有成員的。
4、繼承和類實例化過程
(1)在多個不同的類中抽取出共性的數(shù)據(jù)和邏輯,對這些共性的內(nèi)容進行封裝一個新的類即父類(也叫做超類或基類),讓之前的類來繼承這個類,那些共性的內(nèi)容在子類中就不必重復定義,比如 baseDAO、baseAction 等。
* (2)Java 的繼承機制是單繼承,即一個類只能有一個直接父類。
* (3)如果子類和父類有同名成員變量和方法,子類可以使用 super 關(guān)鍵字調(diào)用父類的成員變量和方法,上述使用方式前提是成員在子類可見。
* 4)在調(diào)用子類構(gòu)造方法時,會隱式的調(diào)用父類的構(gòu)造方法 super()。如果父類沒有無參構(gòu)造方法,為了避免編譯錯誤,需要在子類構(gòu)造方法中顯式的調(diào)用父類的含參構(gòu)造方法。
(5)子類創(chuàng)建時調(diào)用父類構(gòu)造方法:子類需要使用父類的成員變量和方法,所以就要調(diào)用父類構(gòu)造方法來初始化,之后再進行子類成員變量和方法的初始化。因此,構(gòu)造方法是無法覆蓋的。
* (6)當子類需要擴展父類的某個方法時,可以覆蓋父類方法,但是子類方法訪問權(quán)限必須大于或等于父類權(quán)限。
(7)繼承提高了程序的復用性、擴展性,也是 Java 語言多態(tài)特征的前提。
(8)在實際開發(fā)、程序設計過程中,并非先有的父類,而是先有了子類中通用的數(shù)據(jù)和邏輯,然后再抽取封裝出來的父類。
我們簡單了解下類的實例化過程
(1)JVM 讀取指定 classpath 路徑下的 class 文件,加載到內(nèi)存,如果有直接父類,也會加載父類;
(2)堆內(nèi)存分配空間;
(3)執(zhí)行父類、子類靜態(tài)代碼塊;
(4)對象屬性進行默認初始化;
(5)調(diào)用構(gòu)造方法;
(6)在構(gòu)造方法中,先調(diào)用父類構(gòu)造方法初始化父類數(shù)據(jù);
(7)初始化父類數(shù)據(jù)后,顯示初始化,執(zhí)行子類的構(gòu)造代碼塊;
(8)再進行子類構(gòu)造方法的特定初始化;
(9)初始化完畢后,將地址賦值給引用
5、多態(tài)、反射和組件解耦
多態(tài)指允許不同類的對象對同一“消息”做出響應。即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式??梢杂糜谙愋椭g的耦合關(guān)系,Spring 的核心就是多態(tài)和面向接口編程。
(1)Java 中可以使用父類、接口變量引用子類、實現(xiàn)類對象;
(2)在這個過程中,會對子類、實現(xiàn)類對象做自動類型提升,其特有功能就無法訪問了,如果需要使用,可以做強制類型轉(zhuǎn)換。
Java 的反射技術(shù)和多態(tài)特性是框架開發(fā)組件解耦的核心,在這方面,Spring 的 IOC 和 DI 為我們提供了一個極好的學習范例,Spring 的 IOC 使用反射技術(shù)創(chuàng)建、管理對象,DI 使用多態(tài)技術(shù)為組件注入依賴對象。
在沒有學習 Spring 之前,簡單的解決方案是使用一個 .properties 文件保存程序中使用的接口、實現(xiàn)類類型鍵值信息,然后在程序中使用一個全局 Properties 對象保存這些信息,并且使用反射技術(shù)把這些實現(xiàn)類初始化、提供一個靜態(tài)的方法獲取指定接口的實現(xiàn)類對象,在組件中就可以使用依賴對象的鍵獲取需要的對象。
這樣的方案帶來的好處就是:當我們需要修改某個組件的實現(xiàn)方式時,比如把之前 JDBC 的 DA 實現(xiàn)改為 Hibernate 實現(xiàn),只要把這些新的實現(xiàn)類放到 classpath 下,把 .properties 文件對應接口的實現(xiàn)類類型改成新的 Hibernate 實現(xiàn)類,而不需要修改依賴組件的代碼。
以上就是長沙達內(nèi)教育Java培訓機構(gòu)小編介紹的“Java培訓教程:面向?qū)ο驤ava技術(shù)教程”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
相關(guān)文章
零基礎(chǔ)怎么自學Java,完整版Java學習路線圖
你還在糾結(jié)學Java,是自學還是去培訓班嗎
一個標準的Java程序員如何進階?
Java學習路線清單,快速進階Java
Java編程初學者要如何進階
Java培訓 Java培訓教程 Java教程