乾貨!詳解Java面向對象開發方法,看清華大牛帶你深入淺出剖析

2020-12-06 程式設計師碼農範兒666

前言

目前在軟體開發領域有兩種主流的開發方法:結構化開發和面向對象開發。結構化開發是一種比較傳統的開發方法,早期的高級程式語言,如Basic、C. Fortran和Pascal等,都是支持結構化開發的程式語言。隨著軟體開發技術的逐步發展,為了進一步提高軟體的可重用性、可擴展性和可維護性,面向對象的程式語言及面向對象設計理論應運而生,Java語言就是一種純面向對象的程式語言。

一般說來,軟體開發都會經歷以下生命周期:

軟體分析:分析問題領域,了解用戶的需求。軟體設計: 確定軟體的總體架構,把整個軟體系統劃分成大大小小的多個子系統,設計每個子系統的具體結構。軟體編碼:用選定的程式語言來編寫程序代碼,實現在設計階段勾畫出的軟體藍圖。軟體測試:測試軟體是否能實現特定的功能,以及測試軟體的運行性能。軟體部署:為用戶安裝軟體系統,幫助用戶正確地使用軟體。軟體維護:修復軟體中存在的Bug,當用戶需求發生變化時( 增加新的功能,或者修改已有功能的實現方式),修改相應的軟體。為了提高軟體開發效率,降低軟體開發成本,一個優良的軟體系統應該具備以下特點:

可重用性:減少軟體中的重複代碼,避免重複編程。可擴展性:當軟體必須增加新的功能時,能夠在現有系統結構的基礎上,方便地創建新的子系統,不需要改變軟體系統現有的結構,也不會影響已經存在的子系統。可維護性:當用戶需求發生變化時,只需要修改局部的子系統的少量程序代碼,不會牽一髮而動全身, 修改軟體系統中多個子系統的程序代碼。架構化的軟體開發方法簡介

結構化開發方法主要是按照功能來劃分軟體結構的,它把軟體系統的功能看作是根據給定的輸入數據,進行相應的運算,然後輸出結果,如下圖所示。

進行結構化設計時,首先考慮整個軟體系統的功能,然後按照模塊劃分的一些基本原則(比如內聚性和鬆耦合)等,對功能進行分解,把整個軟體系統劃分成多個模塊,每個模塊實現特定的子功能。為了提高軟體的內聚性,在模塊中還會把功能分解到更小的子模塊中。在完成所有的模塊設計後,把這些模塊拼裝起來,就構成了整個軟體系統。軟體系統可看作是多個子系統的集合,每個子系統都是具有輸入/輸出功能的模塊,如下圖所示。

結構化設計屬於自頂向下的設計,在設計階段就不得不考慮如何實現系統的功能,因為分解功能的過程其實就是實現功能的過程。結構化設計的局限性在於不能靈活地適應用戶不斷變化的需求。當用戶需求發生變化,比如要求修改現有軟體功能的實現方式或者要求追加新的功能時,就需要自頂向下地修改模塊的結構,有時候甚至整個軟體系統的設計被完全推翻。

在進行結構化編程時,程序的主體是方法,方法是最小的功能模塊,每個方法都是具有輸入/輸出功能的子系統,方法的輸入數據來自於方法參數、全局變量和常量,方法的輸出數據包括方法返回值,以及指針類型的方法參數。一組相關的方法組合成大的功能模塊。

面向對象的軟體開發方法簡介

面向對象的開發方法把軟體系統看成是各種對象的集合,對象就是最小的子系統,一組相關的對象能夠組合成更複雜的子系統。面向對象的開發方法具有以下優點:

把軟體系統看成是各種對象的集合,這更接近人類認識世界的自然思維方式。軟體需求的變動往往是功能的變動,而功能的執行者一對象一般不會有大的變化。這使得按照對象設計出來的系統結構比較穩定。對象包括屬性 (數據)和行為(方法),對象把數據及方法的具體實現方式一起封裝起來,這使得方法和與之相關的數據不再分離,提高了每個子系統的相對獨立性,從而提高了軟體的可維護性。支持封裝、抽象、繼承和多態等各種特徵,提高了軟體的可重用性、可維護性和可擴展性。這些特徵將在後面的章節中詳述。廣義地講,面向對象編程是結構化編程的一種改進實現方式。傳統的面向過程的結構化編程的最小子系統是功能模塊,而面向對象編程的最小子系統是對象。

對象模型

在面向對象的分析和設計階段,致力於建立模擬問題領域的對象模型。建立對象模型既包括自底向上的抽象過程,也包括自頂向下的分解過程。

(1)自底向上的抽象。

建立對象模型的第一步是從問題領域的陳述入手。分析需求的過程與對象模型的形成過程一致,開發人員與用戶的交談是從用戶熟悉的問題領域中的事物(具體實例)開始的,這就使用戶與開發人員之間有了共同語言,使得開發人員能徹底搞清用戶需求,然後再建立正確的對象模型。開發人員需要進行以下自底向上的抽象思維:

把問題領域中的事物抽象為具有特定屬性和行為的對象。比如一個模擬動物園的程序中,存在各種小動物對象,比如各種小貓、小狗等。把具有相同屬性和行為的對象抽象為類。比如儘管各種小貓、小狗等對象各自不同,但是它們具有相同的屬性和行為,所以可以將各種小貓對象抽象為小貓類,而各種小狗對象抽象為小狗類。當多個類之間存在一些共性(具有相同屬性和行為)時,把這些共性抽象到父類中。比如在前面的例子中,小貓類和小狗類又可以進一步歸於哺乳動物類。(2)自頂向下的分解。

在建立對象模型的過程中,也包括自頂向下的分解。例如對於計算機系統,首先識別出主機對象、顯示器對象、鍵盤對象和印表機對象等。接著對這些對象再進一步分解,例如主機對象由處理器對象、內存對象、硬碟對象和主板對象等組成。系統的進一步分解因有具體的對象為依據,所以分解過程比較明確,而且也相對容易。所以面向對象建模也具有自頂向下開發方法的優點,既能有效地控制系統的複雜性,又同時避免了結構化開發方法中功能分解的困難和不確定性。

UML:可視化建模語言

面向對象的分析與設計方法,在20世紀80年代末至90年代中發展到一個高潮。但是,諸多流派在思想和術語上有很多不同的提法,對術語和概念的運用也各不相同,統一是繼續發展的必然趨勢。需要用一種統一的符號來描述在軟體分析和設計階段勾畫出來的對象模型,統一.建模語言(Unified Modeling Language, UML)應運而生。

UML是一種定義良好、易於表達、功能強大且普遍適用的可視化建模語言。它吸取了諸多流派的優點,而且有進一步的發展,最終成為大眾所共同接受的標準建模語言。

面向對象開發中的核心思想和概念

在面向對象的軟體開發過程中,開發者的主要任務就是先建立模擬問題領域的對象模型,然後通過程序代碼來實現對象模型。到底如何建立對象模型,如何用程序代碼實現對象模型,並且能保證軟體系統的可重用、可擴展和可維護性呢?

問題領域、對象、屬性、狀態、行為、方法、實現

問題領域是指軟體系統所模擬的真實世界中的系統。隨著計算機技術的發展和普及,軟體系統滲透到社會的各個方面,幾乎可用來模擬任意一種問題領域,如學校、醫院、商場、銀行、電影攝製組和太陽系等。

對象是對問題領域中事物的抽象。對象具有以下特性:

(1)萬物皆為對象。問題領域中的實體和概念都可以抽象為對象。例如在學校領域,對象包括學生、成績單、教師、課程和教室等:在銀行領域,對象包括銀行帳戶、出納員、支票、匯率、現金和驗鈔機等;在商場領域,對象包括客戶、商品、訂單、發票、倉庫和營業員等:在電影攝製組領域,對象包括演員、導演、電影、道具和化妝師等;在太陽系領域,對象包括太陽、月亮、地球、火星和木星等;在用Java語言創建的圖形用戶界面中,窗口、滾動面板、按鈕、列表、菜單和文本框等也都是對象。

(2)每個對象都是唯一-的。對象的唯一性來自於真實世界中事物的唯一性。世界上不存在兩片一模一樣的葉子,因此在軟體系統中用來模擬每片葉子的對象也具有唯一性。例如學校領域的學生小張、學生小王、小張的成績單和小王的成績單,這些都是唯一的對象。在Java虛擬機提供的運行時環境中,保證每個對象的唯一性的手段是為它在內存中分配唯一的地址。

(3)對象具有屬性和行為。例如小張,性別女,年齡15,身高1.6米,體重40kg, 能夠學習、唱歌和打羽毛球。小張的屬性包括:姓名、性別、年齡、身高和體重。小張的行為包括:學習、唱歌和打羽毛球。例如一部手機:品牌名稱是諾基亞,價格是2000元,銀白色,能夠拍照、打電話和收發簡訊等。這隻手機的屬性包括:品牌類型type、 價格price 和顏色color,行為包括拍照takePhoto()、 打電話call)、 收簡訊sendMessage(和發簡訊receiveMessage()。

同一個類的所有實例具有相同屬性,表明它們的屬性的含義相同,但是它們的狀態不一定相同,也就是屬性取值不一定相同。例如演員小紅、小白和小黃,都有姓名、性別、年齡、身高和體重這些屬性,但是他們的屬性取值不同。

同一個類的所有實例包括類本身的所有實例,以及其子類的所有實例。類的所有實例具有相同行為,意味著它們具有一些相同的功能。類本身的所有實例按同樣的方式實現相同的功能,而子類與父類之間,以及子類之間的實例則可能採用不同的方式來實現相同的功能。

類、類型

類是一組具有相同屬性和行為的對象的抽象。類及類的關係構成了對象模型的主要內容。如下圖所示,對象模型用來模擬問題領域,Java 程序實現對象模型,Java程序運行在Java虛擬機提供的運行時環境中,Java虛擬機運行在計算機機器上。

計算機受其存儲單元的限制,只能表示和操作一些基本的數據類型,比如整數、字符和浮點數。對象模型中的類可以看作是開發人員自定義的數據類型,Java 虛擬機的運行時環境封裝了把自定義的數據類型映射到計算機的內置數據類型的過程,使得開發人員不必受到計算機的內置數據類型的限制,對任意一種問題領域,都可以方便地根據識別對象、再進行分類(創建任意的數據類型)的思路來建立對象模型。

消息、服務

軟體系統的複雜功能是由各種對象向電視機對象發送一個「開機」消息。電視機對象接受到這個「開機」消息,執行相應的開機操作。此外,遙控器還能向電視機發送其他消息,例如選擇頻道、調節音量、播放VCD和關機等。

每個對象都具有特定的功能,相對於其他對象而言,它的功能就是為其他對象提供的服務。例如電視機具有的功能包括:開機、關機、選擇頻道、調節音量和播放VCD等。遙控器為了獲得電視機的服務,需要向電視機提出獲得特定服務的請求,提出請求的過程稱為發送消息。對象提供的服務是由對象的方法來實現的,因此發送消息實際上也就是調用一個對象的方法。

接口

既然每個對象是服務提供者,那麼如何對外提供服務呢?對象通過接口對外提供服務。例如電視機的紅外線接收器就是為遙控器提供的接口。再比如在日常生活中經常接觸的電源插口,如果把整個供電系統看作-一個對象,那麼它提供的主要服務就是供電。如何提供這一服務呢? 很簡單,只要在住宅裡布置好線路,提供一些電源插口,各種電器就能從電源插口中獲得電源了。電源插口就是供電系統為各種電器提供的接口。此外,滑鼠上的按鈕、鍵盤上的按鈕、洗衣機上的按鈕、電燈的開關都是為用戶提供的接口。

在現實世界中,接口也是實體,比如電源插口、洗衣機上的按鈕和電燈的開關。而在面向對象的範疇中,接口是一個抽象的概念,是指系統對外提供的所有服務。系統的接口描述系統能夠提供哪些服務,但是不包含服務的實現細節。這裡的系統既可以指整個軟體系統,也可以指一個子系統。對象是最小的子系統,每個對象都是服務提供者,因此每個對象都有接口。

在Java語言中,接口有兩種意思:

一是指以上介紹的概念性的接口,即指系統對外提供的所有服務,在對象中表現為public類型的方法的聲明。二是指用interface 關鍵字定義的實實在在的接口,也稱為接口類型,它用於明確地描述系統對外提供的所有服務,它能夠更加清晰地把系統的實現細節與接口分離。封裝

封裝是指隱藏對象的屬性和實現細節,僅僅對外公開接口。封裝能為軟體系統帶來以下優點:

(1)便於使用者正確、方便地理解和使用系統,防止使用者錯誤修改系統的屬性。還是以供電系統為例,過去房屋牆壁的.上方都是電線,現在的房屋裡電線都「不見」了,在牆壁上只露出了一些電源插口。為什麼要把電線藏起來呢?理由很簡單,暴露在外面的電線不安全、也不美觀。

再比如電視機系統,儘管它本身的實現很複雜,但用戶使用起來卻非常簡單,只要通過遙控器上的幾個按鈕就能享受電視機提供的服務。電視機的實現細節被藏在它的大殼子裡,沒有必要向用戶公開。

(2)有助於建立各個系統之間的鬆耦合關係,提高系統的獨立性。當某一個系統的實現發生變化,只要它的接口不變,就不會影響到其他的系統。

(3)提高軟體的可重用性,每個系統都是-一個相對獨立的整體,可以在多種環境中得到重用。例如乾電池就是- -個可重用的獨立系統,在相機、手電筒、電動剃鬚刀和玩具賽車中都能發揮作用。

(4)降低了構建大型系統的風險,即使整個系統不成功,個別的獨立子系統有可能依然是有價值的。例如相機損壞了,它的乾電池依然有用,可以安裝到手電筒中。

一個設計良好的系統會封裝所有的實現細節,把它的接口與實現清晰地隔離開來,系統之間只通過接口進行通信。面向對象的程式語言主要是通過訪問控制機制來進行封裝的,這種機制能控制對象的屬性和方法的可訪問性。在Java語言中提供了4種訪問控制級別:

public:對外公開,訪問級別最高。protected:只對同一個包中的類或者子類公開。默認:只對同一個包中的類公開。private:不對外公開,只能在對象內部訪問,訪問級別最低。繼承

在父類和子類之間同時存在著繼承和擴展關係。子類繼承了父類的屬性和方法,同時,子類中還可以擴展出新的屬性和方法,並且還可以覆蓋父類中方法的實現方式。覆蓋也是專用術語,是指在子類中重新實現父類中的方法。

從每個對象都是服務提供者的角度來理解,子類會提供和父類相同的服務,此外子類還可以提供父類所沒有的服務,或者覆蓋父類中服務的實現方式。例如手機,早期生產的手機具有打電話的功能,但不具有拍照功能,現在的一些新款手機繼承了打電話的功能,而且增加了拍照功能。

繼承與擴展同時提高了系統的可重用性和可擴展性。例如,手機和計算機之所以能迅猛地更新換代,具備越來越多的功能,就是因為當廠商在生產新型號的手機和計算機時,他們不必從頭生產,而是在原有手機和計算機的基礎上進行升級。

繼承與擴展導致面向對象的軟體開發領域中架構類軟體系統的發展。從頭構建一個複雜軟體系統的工作量巨大,為了提高開發效率,有一些組織開發了一些通用的軟體架構。有了這些軟體架構,新的軟體系統就不必從頭開發,只需要在這些通用軟體架構的基礎上進行擴展。

目前在Java領域比較流行的架構軟體包括:

JavaEE:Oracle公司制定的分布式分層的企業應用的軟體架構,它把企業應用分為客戶層、JavaWeb層、應用服務層和資料庫層。在JavaWeb層的擴展點主要是Servlet類和JSP,應用服務層的擴展點主要是EJB組件。Struts: Apache開放原始碼組織為JavaWeb應用創建的通用框架,採用模型一視圖一控制器(Model-View-Controller, MVC)設計模式,它的最主要的擴展點是控制器層的Action類。JSF:Oracle公司為JavaWeb應用的界面創建的通用框架。Spring: Spring 開放原始碼組織為企業應用的服務層創建的通用框架。UML語言簡介

1997年,對象管理組織(Object Management Group, OMG)發布了統一建模語言(Unified Modeling Language, UML)。UML的目標之一就是為開發團隊提供標準、通用的面向對象設計語言。UML提供了一套IT專業人員期待多年的統一的標準 建模符號。通過使用UML,這些人員能夠閱讀和交流系統架構圖和設計規劃圖,就像建築人多年來使用建築設計圖一樣。

UML採用一些標準圖形元素來直觀地表示對象模型,所以它是一種可視化的面向對象的建模語言。UML主要包含以下一些框圖:

用例圖(Use Case Diagram):從用戶角度描述系統功能。類框圖(Class Diagram):描述對象模型中類及類之間的關係。狀態轉換圖( State Transition Diagram):描述對象所有可能的狀態,以及導致狀態轉換的轉移條件。只需要為個別具有複雜的狀態轉換過程的類提供狀態轉換圖。時序圖(Sequence Diagram)和協作圖(Cooperation Diagram): 描述對象之間的交互關係。其中時序圖顯示對象之間的動態協作關係,它強調對象之間消息發送的時間順序,同時顯示對象之間的交互;協作圖能直觀地顯示對象之間的協作關係。這兩種圖合稱為交互圖。組件圖(Component Diagram): 描述系統中各個軟體組件之間的依賴關係,還可以描述軟體組件的原始碼的組織結構。部署圖(Deployment Diagram):定義系統中軟硬體的物理體系結構。它可以顯示實際的計算機和設備(用節點表示),以及它們之間的連接關係,在節點中,還可以顯示軟體組件在硬體環境中的布局。在以上框圖中,其中用例圖、類框圖、組件圖和部署圖等4個圖形,構成了系統的靜態模型;而狀態轉換圖、時序圖和協作圖則構成了系統的動態模型。因此,UML的主要框圖也可以歸納為靜態模型和動態模型兩大類。

總結

本篇結合實際例子,探討了如何運用面向對象思維來構建可維護、可重用和可擴展的軟體系統。面向對象的核心思想和概念包括:抽象、封裝、接口、多態和繼承,靈活運用這些理論武器,就會使得軟體系統像用積木搭起來的系統一 樣,可以方便地進行組裝、拆卸和重用。

喜歡文章請多多點讚評論分享,關注筆者,後續會再帶來更豐富的學習內容更新,你們的支持就是筆者最大的動力!!!

相關焦點

  • Java面向對象之final、abstract抽象、和變量生命周期
    Java面向對象之final、abstract抽象、final修飾符final其特點是:抽象類不能創建實例,也就是不能使用new創建一個抽象類對象,即使創建出抽象類對象,調用了抽象方法,也無法實現功能,因為抽象方法沒有方法體。
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。我們來舉個例子,父類是動物類,有一個叫的方法。然後定義兩個子類繼承自這個父類,一個貓類、一個狗類。他們分別對叫的方法做了重寫,貓類重寫叫的方法是發出「喵喵」聲,而狗類重寫叫的方法是發出「汪汪」聲。於是我們同樣創建的動物的對象,同樣調用這個動物對象叫的方法,如果這個動物對象是貓,則會發出「喵喵」聲,而如果這個動物對象是狗,發出的聲音則成了「汪汪」。
  • 大牛級別程式設計師帶小白入門Python,花7天整理最全面向對象教程!
    Python作為人工智慧首選程式語言,也是最近大家知道比較火的程式語言,Python從設計之初就已經是一門面向對象的語言,正因為如此,在Python中創建一個類和對象是很容易的。下面有大牛級別程式設計師帶小白入門Python,花7天整理最全面向對象教程!供參考學習!
  • Java面向對象之接口——interface
    Java面向對象之接口——interface什麼是接口一般計算機中的接口分為對於同一種型號的主板上的多個USB插槽,他們有相同的數據交換方式,相同的實現細節;在面向對象的思想中,可認為他們都是同一個類的不同實例,也就是說插槽是USB規範的實例。
  • Unity遊戲開發:C Sharp進階之面向對象編程
    C進階之面向對象編程深入淺出的C#進階課程在了解C#基礎語法之上,進一步學習面向對象(OOP)編程技術和.NET框架,並深入講解在實踐中總結出的OOP設計理念。學完本課程,即可設計出優質的面向對象程序,並可在Unity中用C#來開發所有腳本。
  • Java你只會HelloWord?入門到精通很容易,成為技術大牛不是夢
    Java憑藉著自身安全性、面向對象、分布式、多線程、動態性等多重特點,一直佔據著市場很大的需求,地位可謂是不可撼動。程式設計師今天小編就給大家推薦幾本適合Java新手看的書籍,從一個只會寫HelloWord的小菜鳥,逐漸成為一個技術大牛吧!
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    軟體開發可以使用的語法是非常多,但是為什麼Java被廣泛的使用呢?其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 嘿,你對象在這兒——Java 面向對象編程:類和對象
    等到我們學面向對象的時候不得不去了解一下什麼是類,什麼是對象,他倆是啥關係。關於面向對象,網上那個寫得很好的例子已經被我抄到C語言與Java的區別那篇了,感興趣的小夥伴可以點左上角的菜單去查看。那麼類和對象到底是什麼呢?類就是有某些共同特徵的實體的集合;對象就是類的實例,一個對象當然就是一個類的實例。
  • Java面向對象之:封裝、繼承、多態
    Java面向對象之:封裝、繼承、多態高內聚和低耦合>面向對象的最終目的是要構建強健、安全、高效的項目,也就是要實現項目的高內聚和低耦合:高內聚:把該模塊的內部數據,功能細節隱藏在模塊內部,不允許外界直接幹預;只能通過公開的接口訪問;低耦合:該模塊只需要給外界暴露少量功能方法;模塊之間相互依賴的程度不高;
  • 做java的你,這些英文單詞都掌握了嗎?
    當年學習Java時想過,英語不好或者一竅不通,能不能學好Java開發;就這個問題請教了開發前輩,答案是不懂英文也可以學好Java,但必須要學會一些常用英文詞彙,必竟Java是英文開發創造的,以下整理了開發中常用的詞彙及中文含義;當然知道這些遠遠不夠,我們可以在學習工作過程中慢慢積累,漸漸會發現原來學會了這麼多英文,好了,開始學習吧!
  • Java反射機制深入詳解
    基本的 Java類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。
  • 圖說Java中的OOPs(面向對象編程系統)基本概念
    面向對象編程是一種編程概念,其核心思想是允許用戶創建所需要的對象,然後提供處理這些對象的方法,使用者通過操作對象而獲得運算數據。本文將以簡潔的方式對面向對象編程中的概念進行梳理。1.Class(類)你可以將類理解為對一組相似實體的統稱。類只是一個邏輯組件,並不是具體的物理實體。例如,你可以創建一個名為「Bird」的鳥類,則它可能包含烏鴉,喜鵲,麻雀,鸚鵡等對象。其屬性(數據)可以是這些鳥的顏色,體重或者身高。除此之外,你還可以為鳥類提供飛行,捕食,鳴叫等方法。2.
  • 萬字梳理,帶你拿下 Java 面試題!
    並發性的:你可以在其中執行許多語句,而不必一次執行它;面向對象的:基於類和面向對象的程式語言;獨立性的:支持一次編寫,到處運行的獨立程式語言,即編譯後的代碼可以在支持 Java 的所有平臺上運行。因為都是字符串啊,字符串比較的不都是堆空間嗎,猛然一看發現好像永遠也不會走,但是你忘記了 String.intern() 方法,它表示的概念在不同的 JDK 版本有不同的區分。在 JDK1.7 及以後調用 intern 方法是判斷運行時常量池中是否有指定的字符串,如果沒有的話,就把字符串添加到常量池中,並返回常量池中的對象。
  • EffectiveJava-1-創建和銷毀對象
    可以返回原返回值類型的任何子類型的對象,有更好的靈活性,而且可以隱藏實現類(子類),使API更簡潔,適用於基於接口的框架;(如可以用工廠方法的不同命名標識不同的子類對象,也可以同一個工廠方法,通過參數(如Type)進行判斷,返回不同類型的子類對象)d. 創建參數化類型實例(即泛型)時,使代碼更簡潔,如:3. 靜態工廠方法的缺點a.
  • 學Java反射,看這篇就夠了 | 原力計劃
    解釋四:如果你是方法,快遞員是虛擬機。快遞員通過地址查地圖找你的叫反射調用。直接去找你的叫直接調用。場景一:在日常的第三方應用開發過程中,經常會遇到某個類的某個成員變量、方法或是屬性是私有的或是只對系統應用開放,這時候就可以利用Java的反射機制通過反射來獲取所需的私有成員或是方法。場景二:當我們在使用IDE(如Eclipse,IDEA)時,當我們輸入一個對象或類並想調用它的屬性或方法時,一按點號,編譯器就會自動列出它的屬性或方法,這裡就會用到反射。
  • 面向對象編程的災難:是時候考慮更新換代了!
    我不知道你會怎麼樣做,但我可能會玩兩個球。給我三個或三個以上的球,我一定都接不住。為什麼我們要在工作中每天都做這種精神上的雜耍?不幸的是,可變狀態的精神雜耍是面向對象編程的核心。對象上存在方法的唯一目的是改變同一對象。
  • 跟我學java編程—面向對象編程多態概念的理解
    前面介紹了面向對象的繼承思想,繼承思想其核心是代碼的復用和程序功能高度的擴展性。繼承可以直接實現代碼的復用,功能的擴展性是指繼承後的類在父類的基礎上增加新的行為,或者對父類的行為進行擴展,實現同一個行為具有不同的實現代碼。
  • java軟體工程師的這些要求你有嗎?
    如今java是IT界數一數二的語言,許多程式設計師都想要成為java軟體工程師,那大家知道企業對於java軟體工程師的技術要求有哪些嗎?java軟體工程師的技術要求一.java技術要求:1.具有良好的Java語言基礎,面向對象編程基礎2.熟悉Struts、Hibernate、Spring等主流技術框架3.熟悉XML解析、Excel導出、文件上傳、發送E-mail等常見業務的實現二.資料庫技術要求1.掌握、運用SQLServer
  • JAVA專業術語面試100問
    前言:面試技巧另外開篇再說,先上面試乾貨吧。Redis、消息隊列、SQL不要走開,關注後更精彩!1、面向對象的特點有哪些?4、java有哪些基本數據類型?5、數組有沒有length()方法?String有沒有length()方法?數組沒有length()方法,它有length屬性。String有length()方法。
  • 用最傻瓜式的方法理解Java中的封裝、繼承和多態
    說到java中面向對象的封裝、繼承和多態,很多人會說這麼簡單這麼入門的東西一直講幹嘛,雖然是基礎,但是我們要明白,所有東西都是要在基礎上發展的,沒有基礎就去學其他的,那麼你肯定是很容易失敗的,那麼應該怎樣能夠用傻瓜式方法去理解Java面向對象的封裝、繼承和多態呢?