java面向對象思想
⑴ java面向對象這方面的知識不清楚
在java的學習中,面向對象應該是java技術的重中之重,雖然在生活中沒有對象可以面對,但在技術中還是要一直接觸面對對象,而且不可避免。今天對面向對象來了一個小總結。
一、面向對象的特點:
1、將復雜的事情簡單化。
2、面向對象將以前的過程中的執行者,變成了指揮者。
3、面向對象這種思想是符合現在人們思考習慣的一種思想。
過程和對象在我們的程序中是如何體現的呢?過程其實就是函數;對象是將函數等一些內容進行了封裝。
二、匿名對象使用場景:
1、當對方法只進行一次調用的時候,可以使用匿名對象。
2、當對象對成員進行多次調用時,不能使用匿名對象。必須給對象起名字。
三、在類中定義其實都稱之為成員。成員有兩種:
1、成員變數:其實對應的就是事物的屬性。
2、成員函數:其實對應的就是事物的行為。
所以,其實定義類,就是在定義成員變數和成員函數。但是在定義前,必須先要對事物進行屬性和行為的分析,才可以用代碼來體現。
四、類中怎麼沒有定義主函數呢?
注意:主函數的存在,僅為該類是否需要獨立運行,如果不需要,主函數是不用定義的。主函數的解釋:保證所在類的獨立運行,是程序的入口,被jvm調用。
五、成員變數和局部變數的區別:
1、成員變數直接定義在類中;局部變數定義在方法中,參數上,語句中。
2、成員變數在這個類中有效;局部變數只在自己所屬的大括弧內有效,大括弧結束,局部變數失去作用域。
3、成員變數存在於堆內存中,隨著對象的產生而存在,消失而消失;局部變數存在於棧內存中,隨著所屬區域的運行而存在,結束而釋放。
六、構造函數和一般函數有什麼區別呢?
1、兩個函數定義格式不同。
2、構造函數是在對象創建時,就被調用,用於初始化,而且初始化動作只執行一次。
一般函數,是對象創建後,需要調用才執行,可以被調用多次。
七、創建一個對象都在內存中做了什麼事情?
1、先將硬碟上指定位置的Person.class文件載入進內存。
2、執行main方法時,在棧內存中開辟了main方法的空間(壓棧-進棧),然後在main方法的棧區分配了一個變數p。
3、在堆內存中開辟一個實體空間,分配了一個內存首地址值。new
4、在該實體空間中進行屬性的空間分配,並進行了默認初始化。
5、對空間中的屬性進行顯示初始化。
6、進行實體的構造代碼塊初始化。
7、調用該實體對應的構造函數,進行構造函數初始化。
8、將首地址賦值給p ,p變數就引用了該實體。(指向了該對象)
⑵ 如何理解Java面向對象
Java是一種面向對象的程序開發語言,准確的理解java的面向對象才能更好更快地掌握JAVA的編程思想和方法,本文昆明北大青鳥java培訓專家為大家介紹java面向對象,幫助大家更好的理解java。
1、什麼是對象?
首先要說明一點,對象不是java的,事實上他只是一種概念,一種用於解決問題的程序設計的思想方法。要理解對象就必須得要和面向對象結合起來。在面向對象中把某一類事物所共有的屬性和行為抽象出來之後就形成了一個類。而類的一個實際的例子就叫做對象。所以從上可以看出類和對象之間存在著這樣一種關系:類是具有共同的屬性名稱和行為的一組對象的抽象,而對象則是一個類的真實的例子。
類是現實世界或思維世界中的實體在計算機中的反映,它將數據以及這些數據上的操作封裝在一起。
類描述了具有相同特性(數據元素、狀態變數)和行為(對數據元素、狀態變數的操作)的對象集合,如果我需要某個具有一定功能的工具,那麼我可自定義這個類,裡面有我需要的數據,還有讓這個類提供的功能。
對象是具有類類型的變數。類和對象是面向對象編程技術中的最基本的概念。類是對象的抽象,而對象是類的具體實例。類是抽象的,不佔用內存,而對象是具體的,佔用存儲空間。類是用於創建對象的藍圖,它是一個定義包括在特定類型的對象中的方法和變數的軟體模板。
JAVA是一種面向對象的程序設計語言,對象是由類抽象出來的,所有的問題都是通過對象來處理,對象可以操作類的屬性和方法來解決問題,所以了解對象的產生、操作和消亡是十分必要的。對象可以認為是在一類事物中抽象出某一個特例,通過這個特例來處理這類事物出現的問題,在Java語言中通過new操作符來創建對象。
2、對象和對象引用
如下表達式:A a1 = new A;它代表A是類,a1是引用,a1不是對象,new A才是對象,a1引用指向new A這個對象。
在JAVA里,「=」不能被看成是一個賦值語句,它不是在把一個對象賦給另外一個 對象,它的執行過程實質上是將右邊對象的地址傳給了左邊的引用,使得左邊的引用指向了右邊的對象。JAVA表面上看起來沒有指針,但它的引用其實質就是一 個指針,引用裡面存放的並不是對象,而是該對象的地址,使得該引用指向了對象。在JAVA里,「=」語句不應該被翻譯成賦值語句,因為它所執行的確實不是 一個賦值的過程,而是一個傳地址的過程,被譯成賦值語句會造成很多誤解,譯得不準確。
再如:A a2;它代表A是類,a2是引用,a2不是對象,a2所指向的對象為空null;
再如:a2 = a1;它代表,a2是引用,a1也是引用,a1所指向的對象的地址傳給了a2(傳址),使得a2和a1指向了同一對象。
綜上所述,可以簡單的記為,在初始化時,「=」語句左邊的是引用,右邊new出來的是對象。
在後面的左右都是引用的「=」語句時,左右的引用同時指向了右邊引用所指向的對象。再所謂實例,其實就是對象的同義詞。
3、Java繼承性分析
繼承是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力。Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得復用以前的代碼非常容易,能夠大大縮短開發周期,降低開發費用。
繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。繼承可以理解為一個對象從另一個對象獲取屬性的過程。如果類A是類B的父類,而類B是類C的父類,我們也稱C是A的子類,類C是從類A繼承而來的。在Java中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類。繼承中最常使用的兩個關鍵字是extends(IS-A,是一個什麼東西)和implements(Has-A,有一個什麼功能)。這兩個關鍵字的使用決定了一個對象和另一個對象是否是IS-A(是一個)關系。
昆明北大青鳥java培訓專家提醒大家,通過使用這兩個關鍵字,我們能實現一個對象獲取另一個對象的屬性。所有Java的類均是由java.lang.Object類繼承而來的,所以Object是所有類的祖先類,而除了Object外,所有類必須有一個父類。通過extends關鍵字可以申明一個類是繼承另外一個類而來的,通過使用關鍵字extends,子類可以繼承父類所有的方法和屬性,但是無法使用private(私有)的方法和屬性。我們通過使用instanceof操作符,能夠確定子類IS-A父類。
⑶ Java中面向對象到底是什麼意思求解,謝謝。
Java面向對象思想和三大特性
面向對象:
1、面向對象
面向對象是一種程序設計思想,計算機程序的設計實質上就是將現實中的一些事物的特徵抽離出來描述成一些計算機事件的過程,這種抽象的過程中,我們把具體的事物封裝成一個一個的整體進行描述,使被描述的對象具備一些系統性、整體性的的行為和特徵,我們把這種設計思想稱為面向對象。
2、面向對象與面向過程
2.1、面向過程是早期的程序語言設計思想,該思想強調事物的行為細節,即程序的設計不需要封裝成一個個的整體,而是將整個程序描述成一個行為,所有行為細節都按照固定方式一步一步的執行,執行程序就是執行某一行為的過程。
2.2、面向對象和面向過程都是一種思想,面向對象是相對於面向過程而言的,
面向過程強調的是具體的功能行為,而面向對象將功能封裝進對象,強調具備了功能的對象,面向對象是基於面向過程的,但面向對象思想更接近於現實場景。
三大特性:
1、封裝
1.1、封裝是指:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
1.2、封裝的好處:
(1)將外界的變化隔離,使程序具備獨立、安全和穩定性。
(2)便於設計者使用,提高代碼的復用性
1.3、封裝的原則
(1)將不需要對外提供的內容都隱藏起來
(2)把實現細節隱藏,提供可以對其進行訪問公共的方式
1.4、封裝的方式
將某一功能、屬性抽離出來,獨立寫成單獨的方法或類
設置訪問許可權
(1)設置訪問許可權可以限定該功能或屬性可以被特定的訪問者訪問,保證了程序的安全性和功能的穩定性。
(2)java對類和類中成員都定義了特定的訪問修飾符
類:public(公共的)、default(默認的,不寫就默認是它)
類中成員:public、protected、default(默認的)、private
註:類的訪問修飾符可以不寫(默認的),也可以寫public(公共的),一個java文件中只能有一個被public修飾的類,且被public修飾的類類名必須要跟文件名一致(包括大小寫一致),否則編譯會出錯,為了方便閱讀,類名的命名規范是單詞的首字母大寫,多個單片語成的類名每個單詞的首字母都大寫
2、繼承
2.1、繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的功能,或者說將事物的共性的功能和屬性抽取出來定義成一個父類,讓後來具有更多樣化實現的子類繼承父類。
2.2、繼承的作用:
(1)父類具備的方法子類可以直接繼承過來,不用重新書寫,提高了代碼的復用性
(2)讓類與類之間產生關系,有了關系才有多態的實現
(3)Java中只支持單繼承,不支持多繼承,因為多繼承存在安全隱患(當多個父類存在同個功能時,子類不確定要運行哪一個),Java支持多層繼承,即父類還可以繼承其他類,java用另一種機制解決單繼承的局限性,即多實現
2.3、對繼承體系的使用
(1)想要使用體系,應該先查閱父類,因為父類定義了該體系的共性功能,了解了父類的功能,就基本可以使用該體系的功能了
(2)在具體調用時,要創建子類的對象,因為有可能當父類是抽象類時父類不能創建對象,而且子類具備更豐富、更具體的功能實現
2.4繼承的特點
2.4.1覆蓋(重寫)
2.4.1.1如果子父類中的成員一致時,子類成員會覆蓋父類成員
2.4.1.2當子類繼承父類時,沿襲父類的功能到子類中,但子類對該功能的實現細節不一致,子類可以保留父類對該功能的定義,重寫功能的內容
2.4.1.3覆蓋與重載:重載只看參數列表,其他一致參數列表不一致為重載,而重寫子父類的參數必須要一致
2.4.2this與super
this表示當前對象的引用,super表示當前對象父類的引用
2.5子父類中的構造函數
2.5.1構造函數不能重寫
2.5.1.1構造函數第一行有一條隱式的語句super()/this()
2.5.1.2在對子類對象進行初始化時,父類構造函數也會運行,因為子類中的構造函數默認第一行有一條隱式的super()語句,這樣方便子類構造時先獲取到父類的共性屬性
2.5.1.3super()一定要定義在子類構造函數的第一行,當沒有默認的空參數構造函數,要手動指定
2.6、注意事項:
2.6.1千萬別為了獲取其他類中的功能而繼承,必須是類與類間有所屬關系才可以繼承。
2.6.2子類覆蓋父類時必須保證子類許可權大於等於父類,才可以覆蓋,否則編譯失敗
2.6.3子類靜態成員只能覆蓋父類靜態成員
2.7final關鍵字
2.7.1final關鍵字可以修飾類、函數和變數
2.7.2被final修飾的類不可以被繼承(繼承打破了封裝性)
2.7.3被final修飾的方法不可以被復寫
2.7.4被final修飾的變數只能被賦值一次,既可以修飾成員變數,也可以修飾
2.8Object類
2.8.1java中有一個特殊的類,Object類,它是所有對象的超類(根類),Object類中定義了所有對象的共性成員
2.8.2Object類中的方法
equals()比較兩個對象是否相同
toString()返回該對象的字元串表示形式
getClass()獲取該對象對應的位元組碼文件對象
hasCode()獲取該對象的哈希碼值
2.9類間的體系關系
繼承、聚集(聚合)、組合
2.9.1繼承:
指的是一個類繼承另外的一個類的功能,並增加它自己的新功能或改寫舊有功能的具體實現,繼承是類與類之間最常見的關系。
2.9.2聚合:
指的是整體與部分的關系。通常在定義一個整體類後,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如足球隊中的足球隊員就是聚合關系。
2.9.3組合:
也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。例如人的各個身體器官之間的關系。
3、多態
3.1、多態的定義;某一類事物具備的多種表現形態(貓、狗和動物)
3.2、java中多態的表現形式
父類的引用指向自己的子類對象
父類的引用接收自己的子類對象
3.3、多態的前提
必須是類與類之間有關系,要麼繼承,要麼實現
子父類間的成員存在覆蓋
3.4、多態的好處與缺陷
好處是提高了程序的擴展性,缺陷是只能使用父類的引用訪問父類的方法,無法訪問子類的特有方法。
3.5、多態的應用
類型轉換
向上轉型,自然轉型
向下轉型,強制父類引用向下轉型
3.6、特點
(1)多態中成員函數的特點
編譯時看引用變數所屬的類中是否有方法
運行時看對象所屬類的方法
(2)多態中成員變數的特點
無論編譯或運行時都參看右邊
多態中靜態成員函數的特點
編譯或運行時都參看左邊
3.7、多態的擴展示例
資料庫操作(各種資料庫):定義資料庫的父類型,由哪類型的資料庫調用就由該子類實現其具體操作內容。
我有一個微信公眾號,每天都會分享一些Java相關的干貨文章,還有海量學習資源。
如果你喜歡我的分享,可以用微信搜索「Java團長」或者「javatuanzhang」關注。
⑷ java面向對象的思想
什麼是面向對象的設計思想?也許有不少初學者對這個概念還有許多不明白的地方,特別是這個處於新舊思想交替的時代,許多人剛剛學完現在看來是快要淘汰的只是面向過程的語言。他們的腦子還沒有脫離面向過程思想的束縛,抬頭卻發現,「面向對象」早已經流行開來,這個陌生的詞漫天飛舞。隨便拿起一本流行計算機技術書籍,那裡會沒有「面向對象」的字眼!於是心中便惶惑了:什麼叫「面向對象」?不感興趣者,一帶而過;有志於在這方面發展的,匆忙找到一本有關書籍來啃究竟什麼是「面向對象」。然而,要突破思想的束縛,說難也不難,說到要深刻認識卻也不容易。筆者在做了一些輕量級的工作後,頗以為有點心得,不怕貽笑大方,寫出已供廣大同行批評指正。 「對象(Object)」一詞,早在十九世紀就有現象學大師胡塞爾提出並定義。對象是世界中的物體在人腦中的映象,是人的意識之所以為意識的反映,是做為一種概念而存在的先念的東西,它還包括了人的意願。舉例說明吧。當我們認識到一種新的物體,它叫樹,於是在我們的意識當中就形成了樹的概念。這個概念會一直存在於我們的思維當中,並不會因為這棵樹被砍掉而消失。這個概念就是現實世界當中的物體在我們意識當中的映象。我們對它還可以有我們自己的意願,雖然我們並不需要付諸實現——只要在你的腦中想著把這棵樹砍掉做成桌子、凳子等——我們就把它叫做意向。於是,對象就是客觀世界中物體在人腦中的映象及人的意向。只要這個對象存在我們的思維意識當中,我們就可以籍此判斷同類的東西。譬如,當我們看到另外一棵樹是,並不會因為所見的第一棵樹不在了失去了供參照的模板而不認識這棵樹了。當我們接觸某些新事物時,我們的意識就會為這些事物確立一個對象。當然這個過程是怎麼形成的,那就不是我們所能討論的問題了。上面所說的對象研究的是一般意義上的問題,因而它可以外推到一切事物。我們經常所說的「對象」,一班指的是解決信息領域內所遇到問題的方法。特別是應用軟體技術來決問題的方法。如我們經常碰到的面向對象的編程(Object-Oriented Programming)、面向對象的分析(Object-Oriented Analysis)、面向對象的設計(Object-Oriented Design)等。應用前面所介紹的關於對象的概念,可以對這些問題做進一步的分析。在面對較復雜的系統,我們可以將它作為一個對象來進行分析。一個系統(解決某個問題的全套解決方案)作為一個對象,可以由多個部分組成。同樣,這個對象也可以由多個對象組成。對於同類的事物,可以由一個對象來表示。這樣做的益處是顯而易見的,它靈活而高效,可以大大減輕設計人員的工作量,簡化實際的模型。舉一個例子。在關系型資料庫的設計當中,我們可以把一個元組當作對象,給它定義一組操作方法。這些方法將適用於所有元組,從而我們不必在更大的范圍內去細致的考慮不同的元組(如判斷一個元素是否合法):因為它們有一組公共的面向本身的方法,它們「自己」可以「解決」自己的問題。更上一層的對象可以是一個表、視圖等。表對象在元組對象的基礎上又有它們自己的方法,如增加、刪除等。從這個層面上講,它也只需要做「自己」的事情,因為有元組對象的支持,它無須去考慮像元素是否合法這類的事情。甚至,有時為了滿足我們還可以將元素或表群當作時對象並定義它們自己的方法。這樣,更能顯示面向對象的優勢。 上面所討論的可以說是面向對象的分析方法。在具體的設計過程當中,還應該採用適當的方式。因為面向對象的思想固然很先進,如果做得不好的話,同樣不能達到預期的效果。這主要表現在處理對象與對象的關繫上沒有做好,對象與對象的層次不分明。如上面所舉得關系型資料庫得例子,如果在元組層面上得對象過多得考慮一個表對象得因素,或一個表層面上對象過多地考慮一個元組對象的因素,甚至去考慮元素層面上的因素,這些都不是好的面向對象的設計方法。這一點,在語言實現方面,Java比C++更有優勢,因為它不允許多重繼承,從而使對象之間的關系更明確。誰也不會否認C++的功能更強大,但是它也要由次付出巨大代價——當現在代碼庫發展到一定程度、一定規模時,個對象之間的層次關系將變得異常復雜,給後繼使用者得學習、理解帶來很大的困難,應用上很難把握。另外,雖然C++具備面向對象的處理能力,但它還是保留了很多面向過程的東西。用C++完全可以不用面向對象的思想來進行程序設計,當然人們不會這樣去做——除了那些只是把C++看成是C擴充的初學者,這就為以後的發展埋下了隱患。在者一方面,Java的限制更多一點。就者一點還遠遠不夠。搞開發的是人,開發方法是由人決定的。要應用面向對象的方法開發出優秀的軟體,必須要求開發人員具有良好的面向對象的思想。好的工程師可以利用適當的工具開發出優秀的軟體——而不在乎他所使用的語言工具——Java、C++、Object Pascal、Ada等。
⑸ Java入行需要學什麼知識呢
java所需要的學習的知識點很多,可以大致分為以下幾個階段:
一、預科學習:
HTML5:HTML5標簽入門、HTML5表格、表單
CSS3:CSS3選擇器和簡單屬性、CSS3定位和布局、CSS3復雜選擇器和高級屬性
資料庫:mysql資料庫安裝和數據操作、約束和簡單查詢、復雜查詢、資料庫設計、oracle的安裝與數據操作、oracle與mysql的對比學習
二、JavaSE
Java語言基礎、程序邏輯:環境配置和第一個語言程序-HelloWorld 變數運算符 條件和循環 方法和數組
Java面向對象:面向對象入門
面向對象應用_管理系統類 Java常用類、String相關、演算法相關 面向對象深入(重載、this、static
)繼承(重寫、super、初始化順序) 多態(抽象類和介面、final、克隆和比較介面 設計模式、對象和類的生命周期)
API:異常、日誌 集合 集合工具類和泛型 IO JDBC基礎線程 網路編程 反射 NIO Junit
Java面向對象思想:設計模式 面向對象原則
Java底層理論:集合底層 性能監控工具 反編 JUC
三、Java web
web基礎:TOMCAT/WEB程序結構/HTTP協議
Servlet基礎入門、servlet作用域(cookie、session、ServletContext)、 Cookie和Session
、Servlet的交互/JSP原理及運用、 JavaBean/EL/JSTL/MVC思想
、JSP+Servlet+JDBC綜合練習、Session購物車案例/驗證碼/防止表單重復提交、監聽器過濾器等
第三方工具包:連接池、事務、分頁、文件上傳下載、Dom4j/Log4j/Log back
JavaScript和jQuery框架技術:JS入門和DOM基礎 、DOM模型深入 、jQ基礎、 jQ操作
MVC動態Web開發技術:自定義MVC框架、DAO框架、前端框架(layUI)
Web開發高級運用:tomcat server伺服器配置 、nginx使用、 jetty配置
網路編程:網路原理、HTTP協議基礎、Linux操作系統、雲服務搭建
四、SSM框架
Spring框架、SpringMVC框架、MyBatis框架:mybatis入門、
配置文件詳解和動態sql的使用、 mybatis管理關系映射和延遲載入、 查詢緩存和逆向工程 、Spring入門和集成、myBatis
SpringMVC入門 、SSM集成、 Spring配置詳解 、Spring AOP、 Spring事務配置 、SpringMVC高級功能
、SpringMVC原理
五、前沿技術
高可用、高並發、高擴展:Spring Boot 、緩存 、分布式 、全文索引、 服務中間件、 myCat、 雲服務 、人臉識別 、語言識別 、JVM底層+優化
在java的學習中,最重要的表示實踐,任何一個大牛都是敲出來的,光有理論知識,沒有實際動手能力也是不行的。
對java有興趣的小夥伴們,不妨先從java入門開始!B站上有很多的java教學視頻,從基礎到高級的都有,還挺不錯的,知識點講的很細致,還有完整版的學習路線圖。也可以自己去看看,下載學習試試。
⑹ JavaScript中的「面向對象」和Java語言中的「面向對象」有何不同
面向對象三大特徵:封裝、繼承、多態
基於封裝,引出了js如何創建對象(class、function、原型+閉包創建私有變數等)。這個java和js都差不多
基於繼承,引出了js繼承的一些知識點,如extends、super、重寫重載、abstract(typescript)、interface(typescript)。js主要是基於原型繼承,而java主要是基於extends
多態存在的三個必要條件。重寫(繼承)、重載、向上轉型:其中重寫,js支持。重載js不支持,可以通過額外處理來支持向上轉型,因為js是弱類型語言,不支持數據類型,ts支持(編譯階段)
也就是說對於多態的支持,目前js只支持一種。
總的來說 js的面向對象支持還沒有java語言那麼豐富嚴謹,正是因為這些寬松語法,也讓js變得更加有趣。但是面向對象oop的思想是一致的。因為oop思想不是固定語言的特性,而是一種思想。隨著js不斷的更新迭代,相信其語法特性也更加豐富和嚴謹。
後話:js目前的發展趨勢,好像不在跟隨傳統語言的oop,有點往函數式編程的路上轉向
⑺ 求解,死活理解不了java面向對象的意思。。。
面向對象是一種編程的思想,並不是Java特性,只是Java支持面向對象。面向對象將程序中的各種元素視為對象,對象具有一定的職責,由多個對象互相協作來完成程序功能。
舉個簡單的例子,簡單計算器,這個應該所有Java的書都有教吧:(下面是偽代碼)
1.一般寫法:
//讀取第一個數a
...
//讀取運算符號x
...
//讀取第二個數b
...
//計算結果result
if(x.equals("+")){
...
}elseif(x.equals("-")){
...
}elseif...
//END
2.面向對象寫法:(這里對於計算器的簡單邏輯寫得有點過於復雜,只是意在說明面向對象的思想)
//獲取部分可能和前面一樣
...
//拼裝成字元串s
...
//對象ExpressionAnalyzer負責分析獲取的字元串,生成Expression對象
ExpressionAnalyzeranalyzer=ExpressionAnalyzer.getInstance();//單例模式
Expressionexpression=analyzer.analysis(s);//為啥不是靜態方法?分析器可能會有不同的分析方法,還有可能是開源的對象,甚至是購買回來的。相關設計模式Factory。
//ExpressionAnalyzer.analysis方法內部://相關模式Interpreter
returnnewAddExpression(x,y);//AddExpression是Expression的一個實現類
//Expression是一個介面,負責計算結果
expression.calculate();
result=expression.getResult();//查詢與命令分離
//END
為啥要這么做?
考慮到這個計算器會越來越復雜,還有乘法、除法,各種組合,添加if、else分支會導致代碼塊越來越大,最終導致不可維護;同時考慮以後可能還有記憶功能,Expression對象能夠很好地被記錄下來。
面向對象有啥好處?
低表示差異(與生活中的實際物品比較)能提供設計的靈感。保留了清晰的可擴展邊界,減少了重復臃腫的代碼塊,也可以作為團隊之間協作溝通的統一思想。
面向對象沒有缺點?
掌握面向對象有一定的門檻,需要整個團隊所有人員有一定的理解。項目啟動初期進展慢,隨著項目越來越復雜效果才會明顯。
⑻ 介紹一下java的面向對象
1、面向對象
面向對象(Object Oriented)是一種新興的程序設計方法,或者是一種新的程序設計規范(paradigm),其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,並且在系統構造中盡可能運用人類的自然思維方式。
2、對象
對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。
類的實例化可生成對象,一個對象的生命周期包括三個階段:生成、使用、消除。
當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態內存區,把沒有引用的對象作為垃圾收集起來並釋放。當系統內存用盡或調用System.gc( )要求垃圾回收時,垃圾回收線程與系統同步運行。
3、類
類是具有相同屬性和方法的一組對象的集合,它為屬於該類的所有對象提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名並包括屬性和方法兩個主要部分。
Java中的類實現包括兩個部分:類聲明和類體。
類聲明
繼承
子類的對象擁有父類的全部屬性與方法,稱作子類對父類的繼承。
Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承。
繼承實現了代碼的復用。
Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。
子類不能繼承父類中訪問許可權為private的成員變數和方法。
子類可以重寫父類的方法,即命名與父類同名的成員變數。
Java中通過super來實現對父類成員的訪問,super用來引用當前對象的父類。super 的使用有三種情況:
訪問父類被隱藏的成員變數,如:super.variable;
調用父類中被重寫的方法,如:super.Method([paramlist]),super()調用父類構造方法;
調用父類的構造函數,如:super([paramlist]);
多態
對象的多態性是指在父類中定義的屬性或方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或方法在父類及其各個子類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。
Java的多態性體現在兩個方面:由方法重載實現的靜態多態性(編譯時多態)和方法重寫實現的動態多態性(運行時多態)。
編譯時多態:在編譯階段,具體調用哪個被重載的方法,編譯器會根據參數的不同來靜態確定調用相應的方法。
運行時多態:由於子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。
重載(Overloading)
方法重載是讓類以統一的方式處理不同數據類型的手段。
一個類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法。
返回值類型可以相同也可以不相同,無法以返回型別作為重載函數的區分標准。
重寫(Overriding)
子類對父類的方法進行重新編寫。如果在子類中的方法與其父類有相同的的方法名、返回類型和參數表,我們說該方法被重寫 (Overriding)。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
子類函數的訪問修飾許可權不能低於父類的。
⑼ java入行需要學習什麼呢
java所需要的學習的知識點很多,可以大致分為以下幾個階段:
一、預科學習:
HTML5:HTML5標簽入門、HTML5表格、表單
CSS3:CSS3選擇器和簡單屬性、CSS3定位和布局、CSS3復雜選擇器和高級屬性
資料庫:mysql資料庫安裝和數據操作、約束和簡單查詢、復雜查詢、資料庫設計、oracle的安裝與數據操作、oracle與mysql的對比學習
二、JavaSE
Java語言基礎、程序邏輯:環境配置和第一個語言程序-HelloWorld 變數運算符 條件和循環 方法和數組
Java面向對象:面向對象入門 面向對象應用_管理系統類 Java常用類、String相關、演算法相關 面向對象深入(重載、this、static )繼承(重寫、super、初始化順序) 多態(抽象類和介面、final、克隆和比較介面 設計模式、對象和類的生命周期)
API:異常、日誌 集合 集合工具類和泛型 IO JDBC基礎線程 網路編程 反射 NIO Junit
Java面向對象思想:設計模式 面向對象原則
Java底層理論:集合底層 性能監控工具 反編 JUC
三、Java web
web基礎:TOMCAT/WEB程序結構/HTTP協議 Servlet基礎入門、servlet作用域(cookie、session、ServletContext)、 Cookie和Session 、Servlet的交互/JSP原理及運用、 JavaBean/EL/JSTL/MVC思想 、JSP+Servlet+JDBC綜合練習、Session購物車案例/驗證碼/防止表單重復提交、監聽器過濾器等
第三方工具包:連接池、事務、分頁、文件上傳下載、Dom4j/Log4j/Log back
JavaScript和jQuery框架技術:JS入門和DOM基礎 、DOM模型深入 、jQ基礎、 jQ操作
MVC動態Web開發技術:自定義MVC框架、DAO框架、前端框架(layUI)
Web開發高級運用:tomcat server伺服器配置 、nginx使用、 jetty配置
網路編程:網路原理、HTTP協議基礎、Linux操作系統、雲服務搭建
四、SSM框架
Spring框架、SpringMVC框架、MyBatis框架:mybatis入門、 配置文件詳解和動態sql的使用、 mybatis管理關系映射和延遲載入、 查詢緩存和逆向工程 、Spring入門和集成、myBatis SpringMVC入門 、SSM集成、 Spring配置詳解 、Spring AOP、 Spring事務配置 、SpringMVC高級功能 、SpringMVC原理
五、前沿技術
高可用、高並發、高擴展:Spring Boot 、緩存 、分布式 、全文索引、 服務中間件、 myCat、 雲服務 、人臉識別 、語言識別 、JVM底層+優化
在java的學習中,最重要的表示實踐,任何一個大牛都是敲出來的,光有理論知識,沒有實際動手能力也是不行的。