簡單的介紹下Java呀

面向對象:

都知道Java是面向對象的編程語言,那麼面向對象與面向過程的區別是什麼?

先說面向過程吧,明白了面向過程來談面向對象就更加好理解了。

面向過程:就是根據我們的思路去分析問題的解決步驟,和玩遊戲本質一樣,走這一步然後下一步,有個步驟的流程,每個步驟就是一個函數方法來實現的。

用經典的例子就是:五子棋。

1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。

面向對象:三大特性/封裝、繼承、多態。

"世間萬物"都是對象,將對象抽象成一個類,例如把我自己進行抽象成一個類,那這個類就是人類了,而人類的具體實例化又是我自己了,可以理解類爲一個類型。

**封裝:**將人這個類包含的共有屬性進行匯合,例如:年齡、性別、眼睛/2、鼻子/1、嘴巴/1等等。將這些功能給封裝起來方便其他人調用,對其他人有什麼好處?能夠隱藏功能屬性的實現細節,對外僅提供公共的訪問方式,能複用又安全。

**繼承:**我自己繼承了我媽和我爸的一些屬性,比如:我眼睛長得像我媽的眼睛。

**多態:**我自己就是一個實體,當然在類中不單單就只有黃種人了,還有其他膚色的人/派生類。

按照面向對象思想可以將五子棋分爲黑白雙方棋盤系統規則系統

第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。

面向對象/抽象類-接口-重載與重寫

抽象類:

抽象類可以有非抽象的方法。

一個類可以實現多個接口,但只能實現一個抽象類。

接口方法默認修飾符是public,抽象方法可以有public、protected和default這些修飾符(抽象方法就是爲了被重寫所以不能使用private關鍵字修飾!)

抽象類就像是一本武林基本功祕籍,如果是private,那麼就不能衍生出其他的功法祕籍了。

接口:

所謂的接口就是將這些功能給封裝起來,然後類/抽象類可以實現接口的功能方法,這些方法必須是抽象的,例如眼睛也可以再進行區分,接口中沒有對眼睛進行具體的區分和實現,這就是抽象,讓人能夠去猜想,接口不是類,因爲類能有屬性,而接口就只能有方法。

接口不能用於實例化對象。

接口沒有構造方法。

接口中所有的方法必須是抽象方法。

接口不能包含成員變量,除了 static 和 final 變量。

接口不是被類繼承了,而是要被類實現。

接口支持多繼承。

JDK 1.8 以後,接口裏可以有靜態方法和方法體

接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定爲 public abstract(只能是 public abstract,其他修飾符都會報錯)。

接口中可以含有變量,但是接口中的變量會被隱式的指定爲 public static final 變量(並且只能是 public,用 private 修飾會報編譯錯誤)。

接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。

重載:只能在同一個類中,同一個方法,參數類型不同、個數不同、順序不同,方法返回值和訪問修飾符可以不同,發生在編譯時。
重寫:發生在父子類中,方法名、參數列表必須相同,返回值範圍小於等於父類,拋出的異常範圍小於等於父類,訪問修飾符範圍大於等於父類;如果父類方法訪問修飾符爲 private 則子類就不能重寫該方法。

面向過程:

優點:性能比面向對象高,因爲面向對象中類調用時需要實例化,開銷比較大,比較消耗資源。
缺點:沒有面向對象易維護、易複用、易擴展。

面向對象:

優點:易維護、易複用、易擴展,低耦合。
缺點:性能比面向過程低。

如何將封裝、繼承、多態、接口、抽象類、重載、重寫聯繫?

封裝:

父類/老師類:屬性(姓名、性別、年齡)/ 方法 (上課、下課)。

接口/方法:講課、佈置作業。

繼承:

子類(語文老師類、數學老師類)繼承老師類並實現接口。

多態:

一個接口,多個方法。

語文老師類/方法:寫範文。

數學老師類/方法:寫公式。

重載:

語文老師可能一天要佈置多次作業,數學老師也是如此。

重寫:

語文老師上課與下課不能太提前也不能太過拖延,這樣會影響到其他老師的課程,數學老師也是如此。

總結下面向對象的五大基本原則:

單一職責原則SRP(Single Responsibility Principle)

一個類的功能要單一

開放封閉原則OCP(Open-Close Principle)

一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。

PS:一個網絡模塊,原來只服務端功能,而現在要加入客戶端功能,那麼應當在不用修改服務端功能代碼的前提下,就能夠增加客戶端功能的實現代碼,這要求在設計之初,就應當將服務端和客戶端分開,公共部分抽象出來。

裏式替換原則LSP(the Liskov Substitution Principle LSP)

子類應當可以替換父類並出現在父類能夠出現的任何地方。

依賴倒置原則DIP(the Dependency Inversion Principle DIP)

具體依賴抽象,上層依賴下層。

PS:假設B是較A低的模塊,但B需要使用到A的功能,這個時候,B不應當直接使用A中的具體類: 而應當由B定義一抽象接口,並由A來實現這個抽象接口,B只使用這個抽象接口:這樣就達到了依賴倒置的目的,B也解除了對A的依賴,反過來是A依賴於B定義的抽象接口。通過上層模塊難以避免依賴下層模塊,假如B也直接依賴A的實現,那麼就可能 造成循環依賴。一個常見的問題就是編譯A模塊時需要直接包含到B模塊的cpp文件,而編譯B時同樣要直接包含到A的cpp文件。

接口分離原則ISP(the Interface Segregation Principle ISP)

模塊間要通過抽象接口隔離開,而不是通過具體的類強耦合起來。

低耦合、高內聚:

低耦合:類之間的依賴性降到最小。

高內聚:模塊內的各個功能/元素之間的聯繫達到高度緊密。


上面講完了面向對象,下面來看看Java的其他特點:

跨平臺:

Java代碼是運行在JVM中的,首先將.java文件編譯成二進制字節碼/中間碼.class文件,隨後JVM對class文件進行解析並執行,因爲不同系統平臺可以有不同的JVM,所以Java不需要考慮平臺。

JVM:

JRE的一部分。

運行Java字節碼的虛擬機。

.java文件/源代碼——> 通過JDK中的javac編譯——>.class文件——>JVM。

JDK:

編譯、調試java程序用的開發工具包。

JDK的工具也是Java程序,也需要JRE才能運行。爲了保持JDK的獨立性和完整性,在JDK的安裝過程中,JRE也是 安裝的一部分。

JRE:

Java運行時環境,所有的Java 程序都要在JRE下才能運行。

JVM——>JRE——>JDK。

Oracle JDK 與 Open JDK:

非常接近 - Oracle JDK版本構建過程基於OpenJDK 7構建,只添加了幾個部分,例如部署代碼,其中包括Oracle的Java插件和Java WebStart的實現,以及一些封閉的源代碼派對組件,如圖形光柵化器,一些開源的第三方組件,如Rhino,以及一些零碎的東西,如附加文檔或第三方字體。展望未來,我們的目的是開源Oracle JDK的所有部分,除了我們考慮商業功能的部分。

Oracle JDK性能比OpenJDK好。

Java與C++的區別:

都是面向對象的語言,都支持封裝、繼承和多態

Java 不提供指針來直接訪問內存,程序內存更加安全

Java 的類是單繼承的,C++ 支持多重繼承;雖然 Java 的類不可以多繼承,但是接口可以多繼承。

Java 有自動內存管理機制,不需要程序員手動釋放無用內存

什麼是 Java 程序的主類 應用程序和小程序的主類有何不同?

程序主類就是包含有main()方法的類。

Java小程序:applet 小程序。

Java 應用程序與小程序之間有那些差別?

應用程序:主線程啓動/main。

小程序:調用init()/run()在瀏覽器運行。

應用程序的主類不一定要求是 public 類,但小程序的主類要求必須是 public 類。主類是 Java 程序執行的入口點。

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