學JAVA,首先得知道JAVA是什麼,JAVA能做些什麼,JAVA有哪些概念和特性,首先我們從JAVA是什麼開始入手帶大家入坑:
前兩篇內容我們提到了,JAVA的一些概念和特性,這篇文章我們來補足剩餘的基本概念,當然,每篇文章的概念性東西會根據節奏走,每篇文章不會一次帶入太多的概念。
OOP:Object Oriented Programming , 物件導向的程式設計
JAVA 三大功能
JAVA 其它的基礎概念
# 首先我們來回顧下歷史,OOP的許多原始思想都來之於Simula語言,並在Smalltalk語言的完善和標準化過程中得到更多的擴展和對以前的思想的重新註解。可以說OO思想和OOPL幾乎是同步發展相互促進的。與函數式程式設計(functional-programming)和邏輯式程式設計(logic-programming)所代表的接近機器的實際計算模型所不同的是,OOP幾乎沒有引入精確的數學描敘,而是傾向於建立一個物件模型,它能夠近似的反映應用領域內的實體之間的關係,其本質是更接近一種人類認知事物所採用的哲學觀的計算模型。由此,導致了一個自然的話題,那就是OOP到底是什麼? [D&T 1988][B.S 1991] .。在OOP中,物件作為計算主體,擁有自己的名稱,狀態以及接受外界訊息的介面。在物件模型中,產生新對象,舊物件銷毀,發送訊息,回應訊息就構成OOP計算模型的根本。
物件的產生有兩種基本方式:一種是以原型(prototype)物件為基礎產生新的物件。 一種是以類別(class)為基礎產生新物件。 原型的概念已經在認知心理學中被用來解釋概念學習的遞增特性,原型模型本身就是企圖透過提供一個有代表性的對象為基礎來產生各種新的對象,並由此繼續產生更符合實際應用的物件。而原型-委託也是OOP中的物件抽象,程式碼共享機制中的一種。一個類別提供了一個或多個物件的通用性描敘。從形式化的觀點來看,類別與類型有關,因此一個類別相當於從該類別產生的實例的集合。而這樣的觀點也會帶來一些矛盾,比較典型的就是在繼承體系下,子集(子類別)物件和父集(父類別)物件之間的行為相融性可能很難達到,這也就是OOP中常被引用的---子類型(subtype)不等於子類別(subclass) [Budd 2002]。而在一種所有皆物件的世界觀背景下,在類別模型基礎上也誕生出了一種擁有元類別(metaclass)的新物件模型。即類別本身也是一種其他類別的物件。以上三種根本不同的觀點各自定義了三種基於類別(class-based),基於原型(prototype-based)和基於元類別(metaclass-based)的物件模型。而這三種物件模型也就導致了許多不同的程式設計語言(如果我們暫時把靜態與動態的差異放在一邊)。是的,我們常接觸的C++,Java都是使用基於類別的物件模型,但除此之外還有很多我們所沒有接觸的OOPL採用了完全不一樣的物件模型,他們是在用另外一種觀點詮釋OOP的內涵。
什麼是oop的基本想法呢? 把元件的實作和介面分開,並且讓元件具有多態性。不過,兩者還是有根本的不同。 oop強調在程式建構中語言要素的語法。你必須得繼承,使用類,使用對象,對象傳遞訊息。 gp不關心你繼承或是不繼承,它的開端是分析產品的分類,有些什麼種類,他們的行為如何。是說,兩件東西相等意味著什麼?怎樣正確地定義相等運算?不單單是相等操作那麼簡單,你往深處分析就會發現「相等」這個一般觀念意味著兩個物件部分,或至少基本部分是相等的,據此我們就可以有一個通用的相等操作。再說對象的種類。假設存在一個順序序列和一組對於順序序列的操作。那麼這些操作的語意是什麼呢?從複雜度權衡的角度來看,我們應該提供使用者什麼樣的順序序列?該種序列上存在那些操作?那種排序是我們需要的?只有對這些元件的概念型分類搞清楚了,我們才能提到實作的問題:使用模板、繼承還是巨集?使用什麼語言和技術? gp的基本觀點是把抽象的軟體元件和它們的行為用標準的分類學分類,出發點就是要建造真實的、高效的和不取決於語言的演算法和資料結構。當然最終的載體還是語言,沒有語言沒辦法程式。 stl 使用c++,你也可以用ada來實現,用其他的語言來實現也行,結果會有所不同,但基本的東西是一樣的。到處都要用到二分查找和排序,而這就是人們正在做的。對於容器的語義,不同的語言會帶來輕微的不同。但是基本的區別很清楚是gp所依賴的語義,以及語意分解。例如,我們決定需要一個元件swap,然後指出這個元件在不同的語言中如果工作。顯然重點是語意以及語意分類。而oop所強調的(我認為是過度強調的)是清楚的定義類別之間的層次關係。 oop告訴了你如何建立層次關係,卻沒有告訴你這些關係的實質內容。
(這段不太理解,有一些術語可能要過一段時間才會有合適的中文翻譯-譯者)
物件導向的程式設計方法OOP是九十年代才流行的一種軟體程式設計方法。它強調物件的「抽象」、「封裝」、「繼承」、「多態」。我們講程式設計是由「資料結構」+「演算法」組成的。從宏觀的角度講,OOP下的物件是以程式設計為中心的,是程式導向的物件。
上面是三大特性的概念與比較圖# ,讓我們來分析一下:
Java的語法比C++的相對簡單,另一個面向就是Java能使軟體在很小的機器上運行,基礎解釋其和類別庫的支援的大小約為40kb,增加基本的標準庫和線程支援的記憶體需要增加125kb。
OO:##
OO:「物件導向設計是把重點放在物件及物件的介面上的一個程式技術。
#1.抽象:
抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。
抽象包含兩個方面,一是過程抽象,二是資料抽象。
2.繼承:
繼承是一種聯結類別的層次模型,並且允許和鼓勵類別的重用,它提供了一種明確表述共性的方法。
物件的一個新類別可以從現有的類別中派生,這個過程稱為類別繼承。
新類別繼承了原始類別的特性,新類別稱為原始類別的衍生類別(子類別),而原始類別稱為新類別的基類別(父類別)。
衍生類別可以從它的基底類別繼承方法和實例變量,並且類別可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和資料包圍起來,資料的存取只能透過已定義的介面。
物件導向運算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象透過一個受保護的介面存取其他物件。
4. 多態性:
多態性是指允許不同類別的物件對同一訊息作出回應。
多態性包含參數化多型性和包含多型性。
多態性語言具有靈活、抽象化、行為共享、程式碼共享的優勢,很好的解決了應用程式函數同名問題。
總結:動態綁定裡有一個非常重要的功能:就是不需要對現存的程式碼進行修改,就可以擴充程式。 所以要記住,多型是開放封閉原則的基礎。
String 和StringBuffer的區別
#JAVA平台提供了兩個類別:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類別提供了數值不可改變的字串。而這個StringBuffer類別提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers來動態建構字元資料。
int 和Integer 有什麼區別
#Java 提供兩種不同的類型:引用類型和原始類型(或內建類型)。 Int是java的原始資料類型,Integer是java為int提供的封裝類別。 Java為每個原始型別提供了封裝類別。
原始類型 -->> 封裝類別
boolean -->> Boolean
char -->>te; Character
byte -->> Byte; Character
byte -->> Byte
short
byte -->> By
short
#short -->> Short int -->> Integerlong -->> Long float -->> Float -->>> Double
引用類型和原始類型的行為完全不同,並且它們具有不同的語意。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的資料結構存儲,當引用類型和原始類型用作某個類別的實例資料時所指定的缺省值。物件引用實例變數的預設值為 null,而原始類型實例變數的缺省值與它們的類型有關。
基本資料型別包括byte、int、char、long、float、double、boolean和short。
java.lang.String類別是final型別的,因此不可以繼承這個類別、不能修改這個類別。為了提高效率節省空間,我們應該用StringBuffer類別
重載:當多個方法具有相同的名字而含有不同的參數時,便發生重載.編譯器必須挑選出要呼叫哪個方法
1.ehavior- --說明這個物件能做什麼。
2.tate---當物件施加方法時物件的反映。
3.dentity---與其他相似行為對象的區分標誌。
##use -a :依賴關係
###has-a :聚合關係#######is-a :繼承關係--例:A類繼承了B類,此時A類不僅有了B類的方法,還有其自己的方法.(個性存在於共性中)
建構物件使用建構器:建構器的提出,建構子是一種特殊的方法,建構物件並對其初始化。
範例:Data類別的建構子叫做Data
New Data()---建構一個新對象,且初始化當前時間。
Data dujinyang=new Data()---把一個物件賦值給一個變數dujinyang,從而使該物件能夠多次使用,此處要聲明的使變數與物件變數二者是不同的
.new 傳回的值是一個參考。
建構子特性:
建構器可以有0個,一個或多個參數
」建構器和類別有相同的名稱
一個類別可以有多個建構器
#建構器沒有傳回值
建構器總是和new運算子一起使用
##介面(Interface )說明類別該做什麼而不指定如何去做,一個類別可以實作一個或多個interface
#介面不是一個類,而是對符合介面要求的類別的一套規範。 #####################若實作一個介面需要2個步驟:############1)宣告類別需要實作的指定接口。 ############2)提供介面中的所有方法的定義。 ######
---- 宣告一個類別實作一個介面需要使用implements 關鍵字,介面不是類,不能用new實例化一個介面。
什麼是超類別(基底類別)?什麼是派生類別?
一個類別只有一個超類別(基底類別),但一個類別能實作多個介面。 (記:Java中的重要介面:Cloneable.)
什麼是基底類別?其實就是父類,繼承裡的兩個類,一個子類別一個父類,基底類別等於父類,衍生類別等於子類別。
基底類別、超類別、父類別都是一個意思,不同說法而已。
例如:
#class BaBa{}
class A extends BaBa{}
這就可以說BaBa是A的基類,BaBa是A的超類,BaBa是A的父類;反過來,A就是BaBa的子類,或者叫派生類。
內部類別:一個內部類別的定義是定義在另一個內部的類別。
原因是:
#1)一個內部類別的物件能夠存取創建它的物件的實現,包括私有資料。
2)對於同一個套件中的其他類別來說,內部類別能夠隱藏起來。
3)匿名內部類別可以很方便的定義回呼。
4)使用內部類別可以非常方便的編寫事件驅動程式。
以上是JAVA 入坑教學 | 章節一 基礎概念的內容,更多相關內容請關注PHP中文網(www.php.cn)!