對于Java語言應(yīng)該都不陌生,今天我們就將Java中的入門部分概念做一具體的講解一下揭朝。
1.什么叫JVM,JRE,JDK?
JRE
全稱為JavaRunningEnvironment庐舟,就是我們所說的java運行環(huán)境,由java虛擬機(jī)和一些核心的類庫文件組成欣除。
JVM
全稱為JavaVirtualMachine(java虛擬機(jī)),是java運行環(huán)境的一部分挪略。
JDK
全稱為JavaDevelopmentKit,java開發(fā)工具包历帚。
2.標(biāo)識符及其所需注意事項
1.標(biāo)識符可以由字母、數(shù)字杠娱、下劃線挽牢、美元符號組成,但不能包含@摊求,%禽拔,空格等特殊字符,不能以字母開頭。
2.標(biāo)識符不是能是java的關(guān)鍵字和保留字奏赘,但可以包含關(guān)鍵字寥闪。
3.標(biāo)識符嚴(yán)格區(qū)分大小寫。
小編推薦一個學(xué)JAVA的學(xué)習(xí)裙【 一三三磨淌,九三零疲憋,六九三】,無論你是大牛還是小白梁只,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)缚柳!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享搪锣!
正題
我們之前使用類創(chuàng)造新的類型(type)秋忙,并使用繼承來便利我們創(chuàng)建類的過程。我將在這一講中深入類型构舟,并介紹多態(tài)(polymorphism)的概念灰追。
Java的任意變量和引用經(jīng)過類型聲明(type declaration),才能使用狗超。我們之前見過對象數(shù)據(jù)弹澎、類數(shù)據(jù)、方法參數(shù)努咐、方法返回值以及方法內(nèi)部的自動變量苦蒿,它們都需要聲明其類型。Java是一種強(qiáng)類型(strongly typing)語言渗稍,它會對類型進(jìn)行檢查佩迟。如果我們錯誤的使用類型,將造成錯誤竿屹。
比如在下面的Test類中报强,我們將一個Cup類對象賦予給aPerson類引用:
javac將返回:
found : Cup
required: Human
aPerson =newCup;^1 errorJava可以對基本類型的變量進(jìn)行類型轉(zhuǎn)換。不同的基本類型有不同的長度和存儲范圍拱燃。如果我們從一個高精度類型轉(zhuǎn)換到低精度類型秉溉,比如從float轉(zhuǎn)換到int,那么我們有可能會損失信息扼雏。這樣的轉(zhuǎn)換叫做收縮變換(narrowingconversion)坚嗜。這種情況下夯膀,我們需要顯示的聲明類型轉(zhuǎn)換诗充,
比如:如果我們從低精度類型轉(zhuǎn)換成高精度類型,則不存在信息損失的顧慮诱建。這樣的變換叫做寬松變換(wideningconversion)蝴蜓。我們不需要顯示的要求類型轉(zhuǎn)換,Java可以自動進(jìn)行:
在Java中,引用也可以進(jìn)行類型轉(zhuǎn)換茎匠,但是有限制格仲。我們可以將一個衍生類引用轉(zhuǎn)換為其基類引用,這叫做向上轉(zhuǎn)換(upcast)或者寬松轉(zhuǎn)換诵冒。下面的BrokenCup類繼承自Cup類凯肋,并覆蓋了Cup類中原有的addWater和drinkWater方法:
程序運行結(jié)果:
shit, broken cup
在上面可以看到,不需要任何顯示說明汽馋,我們將衍生類引用aBrokenCup賦予給它的基類引用aCup侮东。類型轉(zhuǎn)換將由Java自動進(jìn)行。
我們隨后調(diào)用了aCup(我們聲明它為Cup類型)的addWater方法豹芯。盡管aCup是Cup類型的引用悄雅,它實際上調(diào)用的是BrokenCup的addWater方法!也就是說铁蹈,即使我們經(jīng)過upcast宽闲,將引用的類型寬松為其基類,Java依然能正確的識別對象本身的類型握牧,并調(diào)用正確的方法容诬。Java可以根據(jù)當(dāng)前狀況,識別對象的真實類型我碟,這叫做多態(tài)(polymorphism)放案。多態(tài)是面向?qū)ο蟮囊粋€重要方面。
多態(tài)是Java的支持的一種機(jī)制矫俺,同時也是面向?qū)ο蟮囊粋€重要概念吱殉。這提出了一個分類學(xué)的問題,既子類對象實際上“是”父類對象厘托。比如一只鳥友雳,也是一個動物;一輛汽車铅匹,也必然是一個交通工具。Java告訴我們流礁,一個衍生類對象可以當(dāng)做一個基類對象使用萌抵,而Java會正確的處理這種情況霎桅。
比如下面的繼承關(guān)系:小編推薦一個學(xué)JAVA的學(xué)習(xí)裙【 一三三,九三零,六九三】杠巡,無論你是大牛還是小白锨侯,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具奕谭,很多干貨和技術(shù)資料分享生兆!
我們可以說用杯子(Cup)喝水(drinkWater)。實際上,喝水這個動作具體含義會在衍生類中發(fā)生很大變換。比如用吸管喝水,和從一個破杯子喝水,這兩個動作差別會很大,雖然我們抽象中都講“喝水”键闺。我們當(dāng)然可以針對每個衍生類分別編程寿烟,調(diào)用不同的drinkWater方法。然而辛燥,作為程序員筛武,我們可以對杯子編程,調(diào)用Cup的drinkWater方法挎塌,而無論這個杯子是什么樣的衍生類杯子徘六。Java會調(diào)用相應(yīng)的正確方法,正如我們在上面程序中看到的榴都。
看一個更加有意義的例子待锈,我們給Human類增加一個drink方法,這個方法接收一個杯子對象和一個整數(shù)作為參數(shù)嘴高。整數(shù)表示喝水的水量:
程序運行結(jié)果:
shit, no water inside
我們在Human類的drink的定義中竿音,要求第一個參量為Cup類型的引用。但在實際運用時(Test類)拴驮,將Cup的BrokenCup衍生類對象谍失。這實際上是將hisCup向上轉(zhuǎn)型稱為Cup類,傳遞給drink方法莹汤。在方法中快鱼,我們調(diào)用了drinkWater方法。Java發(fā)現(xiàn)這個對象實際上是BrokenCup對象纲岭,所以實際調(diào)用了BrokenCup的相應(yīng)方法抹竹。
我們可以將一個基類引用向下轉(zhuǎn)型(downcast)成為衍生類的引用,但要求該基類引用所指向的對象止潮,已經(jīng)是所要downcast的衍生類對象窃判。比如可以將上面的hisCup向上轉(zhuǎn)型為Cup類引用后,再向下轉(zhuǎn)型成為BrokenCup類引用喇闸。
Java中袄琳,所有的類實際上都有一個共同的繼承祖先询件,即Object類。Object類提供了一些方法唆樊,比如toString宛琅。我們可以在自己的類定義中覆蓋這些方法。
我們可以編寫一個操作Object對象的程序逗旁,就可以通過upcast嘿辟,將任意對象傳遞給該程序。