




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
這篇Java基礎(chǔ),我吹不動(dòng)了
Heyguys,這里是程序員cxuan,歡迎你收看我最新一期的文章,這篇文章我
補(bǔ)充了一些關(guān)于《Java基礎(chǔ)核心總結(jié)》的內(nèi)容,修改了部分錯(cuò)別字和語(yǔ)句不通
順的地方,并且對(duì)內(nèi)部類、泛型等內(nèi)容進(jìn)行了一定的補(bǔ)充,并且我在文章有些地
方給出了一些鏈接,這些鏈接都是我自己寫的硬核文章,能夠更好的幫助你理解
Java這門語(yǔ)言,那么廢話不多說(shuō),下面開始正文。
|java概速|(zhì)
Java是SunMicrosystems于1995年首次發(fā)布的一種編程語(yǔ)言和計(jì)算平臺(tái)。編程
語(yǔ)言還比較好理解,那么什么是計(jì)算平臺(tái)呢?
計(jì)算平臺(tái)是在電腦中運(yùn)行應(yīng)用程序(軟件)的環(huán)境,包括硬件環(huán)境
和軟件環(huán)境。一般系統(tǒng)平臺(tái)包括一臺(tái)電腦的硬件體系結(jié)構(gòu)、操作系
統(tǒng)、運(yùn)行時(shí)庫(kù)。
Java是快速,安全和可靠的。從筆記本電腦到數(shù)據(jù)中心,從游戲機(jī)到科學(xué)超級(jí)
計(jì)算機(jī),從手機(jī)到互聯(lián)網(wǎng),Java無(wú)處不在!Java主要分為三個(gè)版本:
JavaSE(J2SE)(Java2PlatformStandardEdition,java平臺(tái)標(biāo)準(zhǔn)版)
JavaSE是JavaEE和JavaME的基礎(chǔ),JavaSE就是基于JDK和JRE,然后還包
含了一些支持JavaWeb服務(wù)開發(fā)的類
JavaEE(J2EE)(Java2Platform,EnterpriseEdition,java平臺(tái)企業(yè)版)
JavaEE一開始叫J2EE,后來(lái)改名為JavaEE,它是JavaSE的一個(gè)擴(kuò)展,這是我
們企業(yè)級(jí)開發(fā)使用的一個(gè)版本,包括一些JavaWeb工具包。
JavaME(J2ME)(Java2PlatformMicroEdition,java平臺(tái)微型版)。
JavaME一般用于移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA、電視機(jī)頂盒和打印
機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境。
Java的特點(diǎn)
Java是一門面向?qū)ο蟮木幊陶Z(yǔ)言
什么是面向?qū)ο??面向?qū)ο?ObjectOriented)是一種軟件開發(fā)思想。它是對(duì)現(xiàn)實(shí)
世界的一種抽象,面向?qū)ο髸?huì)把相關(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來(lái)看待。
相對(duì)的另外一種開發(fā)思想就是面向過(guò)程的開發(fā)思想,什么面向過(guò)程?面向過(guò)程
(ProcedureOriented)是一種以過(guò)程為中心的編程思想。
再舉個(gè)例子:比如你是個(gè)學(xué)生,你每天去上學(xué)需要做幾件事情?
起床、穿衣服、洗臉?biāo)⒀?,吃飯,去學(xué)校。一般是順序性的完成一系列動(dòng)作。
student
student_wakeUp(){...
student_cloth(){...
student_wash(){???}
student_eating(){...
studentgotoSchool()
而面向?qū)ο罂梢园褜W(xué)生進(jìn)行抽象,所以這個(gè)例子就會(huì)變?yōu)?/p>
student()
wash(){...
voidgotoSchool(){?,?
可以不用嚴(yán)格按照順序來(lái)執(zhí)行每個(gè)動(dòng)作。這是特點(diǎn)一。
Java摒棄了C++中難以理解的多繼承、指針、內(nèi)存管理等概念;不用手動(dòng)管理對(duì)
象的生命周期,這是特征二。
Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征,現(xiàn)在企業(yè)級(jí)開發(fā),快速敏捷開發(fā),尤
其是各種框架的出現(xiàn),使Java成為越來(lái)越火的一門語(yǔ)言。這是特點(diǎn)三。
Java是一門靜態(tài)語(yǔ)言,靜態(tài)語(yǔ)言指的就是在編譯期間就能夠知道數(shù)據(jù)類型的語(yǔ)言,
在運(yùn)行前就能夠檢查類型的正確性,一旦類型確定后就不能再更改,比如下面這個(gè)例子。
booleanb=x:1
靜態(tài)語(yǔ)言主要有Pascal,Perl,C/C++,JAVA,C#,Scala等。
相對(duì)應(yīng)的,動(dòng)態(tài)語(yǔ)言沒(méi)有任何特定的情況需要指定變量的類型,在運(yùn)行時(shí)確定的
數(shù)據(jù)類型。比如有Lisp,Perl,Python.Ruby、JavaScript等。
從設(shè)計(jì)的角度上來(lái)說(shuō),所有語(yǔ)言的設(shè)計(jì)目的都是用來(lái)把人類可讀的代碼轉(zhuǎn)換為機(jī)
器指令。下面是一幅語(yǔ)言分類圖。
腳本語(yǔ)言PerlsPythonsJavaScript
的代碼,以此來(lái)讓你的代碼盡快的執(zhí)行。從這個(gè)角度來(lái)說(shuō),靜態(tài)語(yǔ)言的執(zhí)行效率
要比動(dòng)態(tài)語(yǔ)言高,速度更快。這是特點(diǎn)四。
Java具有平臺(tái)獨(dú)立性和可移植性
Java有一句非常著名的口號(hào):Writeonce,runanywhere,也就是一次編寫、到
處運(yùn)行。為什么Java能夠吹出這種牛批的口號(hào)來(lái)?核心就是JVM。我們知道,
計(jì)算機(jī)應(yīng)用程序和硬件之間會(huì)屏蔽很多細(xì)節(jié),它們之間依靠操作系統(tǒng)完成調(diào)度和
協(xié)調(diào),大致的體系結(jié)構(gòu)如下
操作系統(tǒng)所處的位置
那么加上Java應(yīng)用、JVM的體系結(jié)構(gòu)會(huì)變?yōu)槿缦?/p>
Java是跨平臺(tái)的,已編譯的Java程序可以在任何帶有JVM的平臺(tái)上運(yùn)行。你
可以在Windows平臺(tái)下編寫代碼,然后拿到Linux平臺(tái)下運(yùn)行,該如何實(shí)現(xiàn)
呢?
首先你需要在應(yīng)用中編寫Java代碼;
用Eclipse或者javac把Java代碼編譯為.class文件;
然后把你的.class文件打成.jar文件;
然后你的.jar文件就能夠在Windows、MacOSX>Linux系統(tǒng)下運(yùn)行了。不同
的操作系統(tǒng)有不同的JVM實(shí)現(xiàn),切換平臺(tái)時(shí),不需要再次編譯你的Java代碼
了。這是特點(diǎn)五。
Java能夠容易實(shí)現(xiàn)多線程
Java是一門高級(jí)語(yǔ)言,高級(jí)語(yǔ)言會(huì)對(duì)用戶屏蔽很多底層實(shí)現(xiàn)細(xì)節(jié)。比如Java是
如何實(shí)現(xiàn)多線程的。從操作系統(tǒng)的角度來(lái)說(shuō),實(shí)現(xiàn)多線程的方式主要有下面這幾
種
在用戶空間中實(shí)現(xiàn)多線程
在內(nèi)核空間中實(shí)現(xiàn)多線程
在用戶和內(nèi)核空間中混合實(shí)現(xiàn)線程
而我認(rèn)為Java應(yīng)該是在用戶空間實(shí)現(xiàn)的多線程,內(nèi)核是感知不到Java存在多
線程機(jī)制的。這是特點(diǎn)六。
Java具有高性能
我們編寫的代碼,經(jīng)過(guò)javac編譯器編譯稱為字節(jié)碼(bytecode),經(jīng)過(guò)JVM內(nèi)
嵌的解釋器將字節(jié)碼轉(zhuǎn)換為機(jī)器代碼,這是解釋執(zhí)行,這種轉(zhuǎn)換過(guò)程效率較低。
但是部分JVM的實(shí)現(xiàn)比如HotspotJVM都提供了JIT(Just-In-Time)編譯器,
也就是通常所說(shuō)的動(dòng)態(tài)編譯
Java語(yǔ)言具有健壯性
Java的強(qiáng)類型機(jī)制、異常處理、垃圾的自動(dòng)收集等是Java程序健壯性的重要保
證。這也是Java與C語(yǔ)言的重要區(qū)別。這是特點(diǎn)八。
Java很容易開發(fā)分布式項(xiàng)目
Java語(yǔ)言支持Internet應(yīng)用的開發(fā),Java中有netapi,它提供了用于網(wǎng)絡(luò)應(yīng)用
編程的類庫(kù),包括URL、URLConnection>Socket、ServerSocket等。Java的RMI
(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。這是特點(diǎn)九。
一個(gè)小例子說(shuō)明一下面向過(guò)程和面向?qū)ο蟮膮^(qū)別
一、面向過(guò)程
為了把大象裝進(jìn)冰箱,需要3個(gè)過(guò)程。
思路:
1、把冰箱門打開(得到打開門的冰箱)。
2、把大象裝進(jìn)去(打開門后,得到里面裝著大象的冰箱)。
3、把冰箱門關(guān)上(打開門、裝好大象后,獲得關(guān)好門的冰箱)。
根據(jù)上面的思路,可以看到,每個(gè)過(guò)程都有一個(gè)階段性的目標(biāo),依
次完成這些過(guò)程,就能把大象裝進(jìn)冰箱。
二、面向?qū)ο?/p>
為了把大象裝進(jìn)冰箱,需要做三個(gè)動(dòng)作(或者叫行為)。每個(gè)動(dòng)作
有一個(gè)執(zhí)行者,它就是對(duì)象。
思路:
1、冰箱,你給我把門打開。
2、冰箱,你給我把大象裝進(jìn)去(或者說(shuō),大象,你給我鉆到冰箱
里去)。
3、冰箱,你給我把門關(guān)上。
依次完成這些動(dòng)作,你就可以把大象裝進(jìn)去。
Java開發(fā)環(huán)境
JDK
JDK(JavaDevelopmentKit)稱為Java開發(fā)包或Java開發(fā)工具,是一個(gè)編寫
Java的Applet小程序和應(yīng)用程序的程序開發(fā)環(huán)境。JDK是整個(gè)Java的核心,包
括了lava運(yùn)行環(huán)境(JavaRuntimeEnvironment),一些Java工具和Java的核
心類庫(kù)(JavaAPI)o
JavaPlatformStandardEdition8Documentation
Onot2toopraducaMmBlurBEjawPuetsmStatVart>?va必,&aa?StDwvnomMKMfJCM)8andJMCnvtranmcr*WL;&
XM???rwiofjNtQTconttm2*cJNf?7UwhM*M??"mbi.eMCMWVKWawwc*a*fJM.?pmMM*MNhww
*wWWare?r?rcorvonaf'ciiob?ppMandaepkcaOcnsanagncitwJw?progr?nnng?rQuag?Nott2”JWEncMHCCMTW"***WWtwJmmS£
?9M*catanmduangt?*EnwMtandMJMctwncoiwr*
Th*tD*O?M<?oonoWKM)M0ra?4u?MIM*?COMWWnti0(OMM%J*M?S€CTOCkxtt
我們可以認(rèn)真研究一下這張圖,它幾乎包括了Java中所有的概念,我使用的
是jdkl.8,可以點(diǎn)進(jìn)去DescriptionofJavaConceptualDiagram,可以發(fā)現(xiàn)
這里面包括了所有關(guān)于Java的描述。
Oracle提供了兩種Java平臺(tái)的實(shí)現(xiàn),一種是我們上面說(shuō)的JDK,Java開發(fā)標(biāo)準(zhǔn)
工具包,一種是JRE,叫做JavaRuntimeEnvironment,Java運(yùn)行時(shí)環(huán)境。JDK的
功能要比JRE全很多。
JRE
JRE是個(gè)運(yùn)行環(huán)境,JDK是個(gè)開發(fā)環(huán)境。因此寫Java程序的時(shí)候需要JDK,而
運(yùn)行Java程序的時(shí)候就需要JRE。而JDK里面已經(jīng)包含了JRE,因此只要安裝
了JDK,就可以編輯Java程序,也可以正常運(yùn)行Java程序。但由于JDK包含
了許多與運(yùn)行無(wú)關(guān)的內(nèi)容,占用的空間較大,因此運(yùn)行普通的Java程序無(wú)須安
裝JDK,而只需要安裝川E即可。
"ava開發(fā)環(huán)境鋼
這里給大家推薦幾個(gè)JDK安裝和配置的博客:
Windows版本JDK的下載和安裝
mac版本JDK的下載和安裝
|java基本語(yǔ)法|
在配置完Java開發(fā)環(huán)境,并下載Java開發(fā)工具(Eclipse,IDEA等)后,就可
以編寫Java程序了,因?yàn)檫@個(gè)教程是從頭梳理Java體系,所以有必要從基礎(chǔ)
的概念開始談起。
數(shù)據(jù)類型
在Java中,數(shù)據(jù)類型只有四類八種。
整數(shù)型:byte、short>int、long
byte也就是字節(jié),1byte=8bits,byte的默認(rèn)值是0;
short占用兩個(gè)字節(jié),也就是16位,1short=16bits,它的默認(rèn)值也是0;
int占用四個(gè)字節(jié),也就是32位,lint=32bits,默認(rèn)值是0;
long占用八個(gè)字節(jié),也就是64位,1long=64bits,默認(rèn)值是0L;
所以整數(shù)型的占用字節(jié)大小空間為long>int>short>byte
浮點(diǎn)型
浮點(diǎn)型有兩種數(shù)據(jù)類型:float和double
float是單精度浮點(diǎn)型,占用4位,1float=32bits,默認(rèn)值是O.Of;
double是雙精度浮點(diǎn)型,占用8位,1double=64bits,默認(rèn)值是O.Od;
字符型
字符型就是char,char類型是一個(gè)單一的16位Unicode字符,最小值
是\u0000(也就是。),最大值是\uffff(即為65535),char數(shù)據(jù)類型可以存儲(chǔ)
任何字符,例如chara='A'。
布爾型
布爾型指的就是boolean,boolean只有兩種值,true或者是false,只表示1
位,默認(rèn)值是falseo
以上x位都指的是在內(nèi)存中的占用。
數(shù)據(jù)類型內(nèi)存默認(rèn)值
byte8位0
short16位0
int32位0
long64位0L
float32位O.Of
double64位O.Od
char16位\u0000
boolean8位false
基礎(chǔ)語(yǔ)法
大小寫敏感:Java是對(duì)大小寫敏感的語(yǔ)言,例如Hello與hello是不同的,這其實(shí)
就是Java的字符串表示方式。
類名:對(duì)于所有的類來(lái)說(shuō),首字母應(yīng)該大寫,例如MyFirstClass。
包名:包名應(yīng)該盡量保證小寫,例如my.first.package。
方法名:方法名首字母需要小寫,后面每個(gè)單詞字母都需要大寫,例
如myFirstMethod()?
運(yùn)算符
運(yùn)算符不只Java中有,其他語(yǔ)言也有運(yùn)算符,運(yùn)算符是一些特殊的符號(hào),主要
用于數(shù)學(xué)函數(shù)、一些類型的賦值語(yǔ)句和邏輯比較方面,我們就以Java為例,來(lái)
看一下運(yùn)算符。
賦值運(yùn)算符
賦值運(yùn)算符使用操作符=來(lái)表示,它的意思是把=號(hào)右邊的值復(fù)制給左邊,右
邊的值可以是任何常數(shù)、變量或者表達(dá)式,但左邊的值必須是一個(gè)明確的,已經(jīng)
定義的變量。比如inta=4。
但是對(duì)于對(duì)象來(lái)說(shuō),復(fù)制的不是對(duì)象的值,而是對(duì)象的引用,所以如果說(shuō)將一個(gè)
對(duì)象復(fù)制給另一個(gè)對(duì)象,實(shí)際上是將一個(gè)對(duì)象的引用賦值給另一個(gè)對(duì)象。
算數(shù)運(yùn)算符
算數(shù)運(yùn)算符就和數(shù)學(xué)中的數(shù)值計(jì)算差不多,主要有
運(yùn)算符說(shuō)明
+加
*乘
/除
%取余
算數(shù)運(yùn)算符需要注意的就是優(yōu)先級(jí)問(wèn)題,當(dāng)一個(gè)表達(dá)式中存在多個(gè)操作符時(shí),操
作符的優(yōu)先級(jí)順序就決定了計(jì)算順序,最簡(jiǎn)單的規(guī)則就是先乘除后加減,()的
優(yōu)先級(jí)最高,沒(méi)必要記住所有的優(yōu)先級(jí)順序,不確定的直接用()就可以了。
自增、自減運(yùn)算符
這個(gè)就不文字解釋了,解釋不如直接看例子明白
比較運(yùn)算符
比較運(yùn)算符用于程序中的變量之間,變量和自變量之間以及其他類型的信息之間
的比較。
比較運(yùn)算符的運(yùn)算結(jié)果是boolean型。當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算的結(jié)
果為true,否則為falseo比較運(yùn)算符共有6個(gè),通常作為判斷的依據(jù)用于條
件語(yǔ)句中。
運(yùn)算符說(shuō)明
>比較左方是否大于右方
<比較左方是否小于右方
==比較左方是否等于右方
>=比較左方是否大于等于右方
<=比較左方是否小于等于右方
!=比較左方是否不等于右方
邏輯運(yùn)算符
邏輯運(yùn)算符主要有三種,與、或、非
運(yùn)算符作用
&&短路與
II短路或
1邏輯非
&邏輻與
邏帽或
邏輯異或
下面是邏輯運(yùn)算符對(duì)應(yīng)的true/false符號(hào)表
aba&ba&&ba|ba||b!aaAb
truetruetruetruetruetruefalsefalse
truefalsefalsefalsetruetruefalsetrue
falsetruefalsefalsetruetruetruetrue
falsefalsefalsefalsefalsefalsetruefalse
按位運(yùn)算符
按位運(yùn)算符用來(lái)操作整數(shù)基本類型中的每個(gè)比特位,也就是二進(jìn)制位。按位操作
符會(huì)對(duì)兩個(gè)參數(shù)中對(duì)應(yīng)的位執(zhí)行布爾代數(shù)運(yùn)算,并最終生成一個(gè)結(jié)果。
運(yùn)算符作用
&與eg:4&5=4
I或eg:415=5
~非eg:~4=~5
A異或eg:4A5=1
如果進(jìn)行比較的雙方是數(shù)字的話,那么進(jìn)行比較就會(huì)變?yōu)榘次贿\(yùn)算。
按位與:按位進(jìn)行與運(yùn)算(AND),兩個(gè)操作數(shù)中位都為1,結(jié)果才為1,否則
結(jié)果為Oo需要首先把比較雙方轉(zhuǎn)換成二進(jìn)制再按每個(gè)位進(jìn)行比較
按位或:按位進(jìn)行或運(yùn)算(OR),兩個(gè)位只要有一個(gè)為1,那么結(jié)果就是1,否
則就為Oo
按位異或:按位進(jìn)行異或運(yùn)算(XOR),如果位為0,結(jié)果是1,如果位為1,結(jié)
果是0。
按位非:按位進(jìn)行取反運(yùn)算(NOT),兩個(gè)操作數(shù)的位中,相同則結(jié)果為0,不
同則結(jié)果為1。
移位運(yùn)算符
移位運(yùn)算符用來(lái)將操作數(shù)向某個(gè)方向(向左或者右)移動(dòng)指定的二進(jìn)制位數(shù)。
運(yùn)算符含義
?右移運(yùn)算符eg:8>>1=4
?左移運(yùn)算符eg:9?2=36
三元運(yùn)算符
三元運(yùn)算符是類似if...else...這種的操作符,語(yǔ)法為:條件表達(dá)式?表達(dá)式
1:表達(dá)式2。問(wèn)號(hào)前面的位置是判斷的條件,判斷結(jié)果為布爾型,為true時(shí)
調(diào)用表達(dá)式1>為false時(shí)調(diào)用表達(dá)式2o
"ava執(zhí)行控制斕
Java中的控制流程其實(shí)和C一樣,在Java中,流程控制會(huì)涉及到包括if-else、
while、do-while>for、returnbreak以及選擇語(yǔ)句switcho下面以此進(jìn)行分析。
條件語(yǔ)句
翥件語(yǔ)句可根據(jù)不同的條件執(zhí)行不同的語(yǔ)句。包括if條件語(yǔ)句與switch多分
支語(yǔ)句。
if條件語(yǔ)句
if語(yǔ)句可以單獨(dú)判斷表達(dá)式的結(jié)果,表示表達(dá)的執(zhí)行結(jié)果,例如:
returntrue;
^-etur■nfal1st;■
if...else條件語(yǔ)句
if語(yǔ)句還可以與else連用,通常表現(xiàn)為如果滿足某種條件,就進(jìn)行某種處理,
否則就進(jìn)行另一種處理。
a
System.out.println("a<b");
if后的()內(nèi)的表達(dá)式必須是boolean型的。如果為true,則執(zhí)行if后的復(fù)合
語(yǔ)句;如果為false,則執(zhí)行else后的復(fù)合語(yǔ)句。
if...elseif多分支語(yǔ)句
上面中的if...else是單分支和兩個(gè)分支的判斷,如果有多個(gè)判斷條件,就需要使
用if...elseifo
X=40:
System.out.printin("x的值大『60"慧
System.out.printIn("x的值大于30但小于60");
switchcase多分支語(yǔ)句
一種比**if...elseif**語(yǔ)句更優(yōu)雅的方式是使用switch多分支語(yǔ)句,它的示例
如下:
(,"c(、k)j
-j-ImMlMM
System.out.printin("Monday");■
System.out?printin("Tuesdayn);|
System.out.println("Wednesday")
System.out.printIn("Thursday11);
System.out.printin("Friday");■
System.out?println("Saturday");
case
System.out.println("Sunday11);■
循環(huán)語(yǔ)句
循環(huán)語(yǔ)句就是在滿足一定的條件下反復(fù)執(zhí)行某一表達(dá)式的操作,直到滿足循環(huán)語(yǔ)
句的要求。使用的循環(huán)語(yǔ)句主要有**for、do…while。、while**0
while循環(huán)語(yǔ)句
while循環(huán)語(yǔ)句的循環(huán)方式為利用一個(gè)條件來(lái)控制是否要繼續(xù)反復(fù)執(zhí)行這個(gè)語(yǔ)
句。while循環(huán)語(yǔ)句的格式如下:
vuhlh“布爾值){|
它的含義是,當(dāng)(布爾值)為true的時(shí)候,執(zhí)行下面的表達(dá)式,布爾值為false
的時(shí)候,結(jié)束循環(huán),布爾值其實(shí)也是一個(gè)表達(dá)式,比如:
(a>5){|
do...while循環(huán)
while與do...while循環(huán)的唯一區(qū)別是do...while語(yǔ)句至少執(zhí)行一次,即使第一
次的表達(dá)式為falseo而在while循環(huán)中,如果第一次條件為false,那么其中的
語(yǔ)句根本不會(huì)執(zhí)行。在實(shí)際應(yīng)用中,while要比do...while應(yīng)用的更廣。它的一
般形式如下:
b二
System.out.println("b=="+b);
KSS
for循環(huán)語(yǔ)句
for循環(huán)是我們經(jīng)常使用的循環(huán)方式,這種形式會(huì)在第一次迭代前進(jìn)行初始化。
它的形式如下:
”(初始化;布爾表達(dá)式;步進(jìn)){}|
每次迭代前會(huì)測(cè)試布爾表達(dá)式。如果獲得的結(jié)果是false,就會(huì)執(zhí)行for語(yǔ)句后
面的代碼;每次循環(huán)結(jié)束,會(huì)按照步進(jìn)的值執(zhí)行下一次循環(huán)。
逗號(hào)操作符
這里不可忽略的一個(gè)就是逗號(hào)操作符,Java里唯一用到逗號(hào)操作符的就是for
循環(huán)控制語(yǔ)句。在表達(dá)式的初始化部分,可以使用一系列的逗號(hào)分隔的語(yǔ)句;通
過(guò)逗號(hào)操作符,可以在for語(yǔ)句內(nèi)定義多個(gè)變量,但它們必須具有相同的類型。
or(ini==i+10;i<5;i++,j=j*2){}|
for-each語(yǔ)句
在JavaJDK1.5中還引入了一種更加簡(jiǎn)潔的、方便對(duì)數(shù)組和集合進(jìn)行遍歷的方
法,即for-each語(yǔ)句,例子如下:
array口={7,8,9};
(arr:array)
System.out,printin(arr);
跳轉(zhuǎn)語(yǔ)句
語(yǔ)言中,有三種跳轉(zhuǎn)語(yǔ)句:、和
Javabreakcontinuereturn0
break語(yǔ)句
break語(yǔ)句我們?cè)趕witch中已經(jīng)見到了,它是用于終止循環(huán)的操作,實(shí)際上
break語(yǔ)句在for、while、do…while循環(huán)語(yǔ)句中,用于強(qiáng)行退出當(dāng)前循環(huán),例如:
continue語(yǔ)句
continue也可以放在循環(huán)語(yǔ)句中,它與break語(yǔ)句具有相反的效果,它的作用
是用于執(zhí)行下一次循環(huán),而不是退出當(dāng)前循環(huán),還以上面的例子為主:
(i=0;i<10;i++){^-I
System.out.printl("continue...
return語(yǔ)句
return語(yǔ)句可以從一個(gè)方法返回,并把控制權(quán)交給調(diào)用它的語(yǔ)句。
getName()
I面向?qū)ο驣
面向?qū)ο笫菍W(xué)習(xí)Java一種非常重要的開發(fā)思想,但是面向?qū)ο蟛?/p>
不是Java所特有的思想,這里大家不要搞混了。
下面我們來(lái)探討面向?qū)ο蟮乃枷?,面向?qū)ο蟮乃枷胍呀?jīng)逐步取代了過(guò)程化的思想
一面向過(guò)程,Java是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,面向?qū)ο笳Z(yǔ)言具有如下特征
面向?qū)ο笫且环N常見的思想,比較符合人們的思考習(xí)慣;
面向?qū)ο罂梢詫?fù)雜的業(yè)務(wù)邏輯簡(jiǎn)單化,增強(qiáng)代碼復(fù)用性;
面向?qū)ο缶哂谐橄?、封裝、繼承、多態(tài)等特性。
面向?qū)ο蟮木幊陶Z(yǔ)言主要有:C++、Java、C#等。
所以必須熟悉面向?qū)ο蟮乃枷氩拍芫帉懗鯦ava程序。
類也是一種對(duì)象
現(xiàn)在我們來(lái)認(rèn)識(shí)一個(gè)面向?qū)ο蟮男碌母拍钜活?,什么是類,它就相?dāng)于是一系
列對(duì)象的抽象,就比如書籍一樣,類相當(dāng)于是書的封面,大多數(shù)面向?qū)ο蟮恼Z(yǔ)言
都使用class來(lái)定義類,它告訴你它里面定義的對(duì)象都是什么樣的,我們一般使
用下面來(lái)定義類
ClassName
代碼段中涉及一個(gè)新的概念//,這個(gè)我們后面會(huì)說(shuō)。上面,你聲明了一個(gè)class
類,現(xiàn)在,你就可以使用new來(lái)創(chuàng)建這個(gè)對(duì)象
|classNameclassname:ClassName();
一般,類的命名遵循駝峰原則,它的定義如下:
駱駝式命名法(Camel-Case)又稱駝峰式命名法,是電腦程式編寫
時(shí)的一套命名規(guī)則(慣例)。正如它的名稱CamelCase所表示的
那樣,是指混合使用大小寫字母來(lái)構(gòu)成變量和函數(shù)的名字。程序員
們?yōu)榱俗约旱拇a能更容易的在同行之間交流,所以多采取統(tǒng)一的
可讀性比較好的命名方式。
對(duì)象的創(chuàng)建
在Java中,萬(wàn)事萬(wàn)物都是對(duì)象。這句話相信你一定不陌生,盡管一切都看作是
對(duì)象,但是你操縱的卻是一個(gè)對(duì)象的引用(reference)。在這里有一個(gè)很形象的
比喻:你可以把車鑰匙和車看作是一組對(duì)象引用和對(duì)象的組合。當(dāng)你想要開車的
時(shí)候,你首先需要拿出車鑰匙點(diǎn)擊開鎖的選項(xiàng),停車時(shí),你需要點(diǎn)擊加鎖來(lái)鎖車。
車鑰匙相當(dāng)于就是引用,車就是對(duì)象,由車鑰匙來(lái)驅(qū)動(dòng)車的加鎖和開鎖。并且,
即使沒(méi)有車的存在,車鑰匙也是一個(gè)獨(dú)立存在的實(shí)體,也就是說(shuō),你有一個(gè)對(duì)象
引用,但你不一定需要一個(gè)對(duì)象與之關(guān)聯(lián),也就是
這里創(chuàng)建的只是引用,而并非對(duì)象,但是如果你想要使用S這個(gè)引用時(shí),會(huì)返
回一個(gè)異常,告訴你需要一個(gè)對(duì)象來(lái)和這個(gè)引用進(jìn)行關(guān)聯(lián)。一種安全的做法是,
在創(chuàng)建對(duì)象引用時(shí)同時(shí)把一個(gè)對(duì)象賦給它。
|CarcarKey=Car();
在Java中,一旦創(chuàng)建了一個(gè)引用,就希望它能與一個(gè)新的對(duì)象進(jìn)行關(guān)聯(lián),通常
使用new操作符來(lái)實(shí)現(xiàn)這一目的。new的意思是,給我一個(gè)新對(duì)象,如果你不想
相親,自己new一個(gè)對(duì)象就好了。祝你下輩子幸福。
屬性和方法
類一個(gè)最基本的要素就是有屬性和方法。
屬性也被稱為字段,它是類的重要組成部分,屬性可以是任意類型的對(duì)象,也可
以是基本數(shù)據(jù)類型。例如下
A{|
Appleapple;
類中還應(yīng)該包括方法,方法表示的是做某些事情的方式。方法其實(shí)就是函數(shù),
只不過(guò)Java習(xí)慣把函數(shù)稱為方法。這種叫法也體現(xiàn)了面向?qū)ο蟮母拍睢?/p>
方法的基本組成包括方法名稱、參數(shù)、返回值和方法體,下面是它的示例:
publicintgetResult(){|
其中,getResult就是方法名稱、()里面表示方法接收的參數(shù)、return表木方法
的返回值。有一種特殊的參數(shù)類型一void表示方法無(wú)返回值。{}包含的代碼段
被稱為方法體。
構(gòu)造方法
在Java中,有一種特殊的方法被稱為構(gòu)造方法,也被稱為構(gòu)造函數(shù)、構(gòu)造器等。
在Java中,通過(guò)提供這個(gè)構(gòu)造器,來(lái)確保每個(gè)對(duì)象都被初始化。構(gòu)造方法只能
在對(duì)象的創(chuàng)建時(shí)期調(diào)用一次,保證了對(duì)象初始化的進(jìn)行。構(gòu)造方法比較特殊,它
沒(méi)有參數(shù)類型和返回值,它的名稱要和類名保持一致,并且構(gòu)造方法可以有多個(gè),
下面是一個(gè)構(gòu)造方法的示例:
Apple(
Apple(String(20石亍^
Apple(sum,Stringcolor){}|
上面定義了一個(gè)Apple類,你會(huì)發(fā)現(xiàn)這個(gè)Apple類沒(méi)有參數(shù)類型和返回值,并
且有多個(gè)以Apple同名的方法,而且各個(gè)Apple的參數(shù)列表都不一樣,這其實(shí)
是一種多態(tài)的體現(xiàn),我們后面會(huì)說(shuō)。在定義完成構(gòu)造方法后,我們就能夠創(chuàng)建
Apple對(duì)象了。
createApple{|
ublicstaticvoidmain(Strin
Appleapplel=Apple();
pple2=Apple(l);
Appleapple3=newApple("red");
pple4=Apple(2,,^olor11);
如上面所示,我們定義了四個(gè)A叩Ie對(duì)象,并調(diào)用了Apple的四種不同的構(gòu)造
方法,其中,不加任何參數(shù)的構(gòu)造方法被稱為默認(rèn)的構(gòu)造方法,也就是
,ppleapplel=
如果類中沒(méi)有定義任何構(gòu)造方法,那么JVM會(huì)為你自動(dòng)生成一個(gè)構(gòu)造方法,如
下:
Apple{|
sum;
Stringcolor;
main(String[]args)
上面代碼不會(huì)發(fā)生編譯錯(cuò)誤,因?yàn)锳pple對(duì)象包含了一個(gè)默認(rèn)的構(gòu)造方法。
默認(rèn)的構(gòu)造方法也被稱為默認(rèn)構(gòu)造器或者無(wú)參構(gòu)造器。
這里需要注意一點(diǎn)的是,即使JVM會(huì)為你默認(rèn)添加一個(gè)無(wú)參的構(gòu)造器,但是如
果你手動(dòng)定義了任何一個(gè)構(gòu)造方法,JVM就不再為你提供默認(rèn)的構(gòu)造器,你必
須手動(dòng)指定,否則會(huì)出現(xiàn)編譯錯(cuò)誤。
publicclassApple{
intsum;
Stringcolor;
publicApple(intsum){}
}
classcreateApple{
publicstaticvoidmain(String(]args){
Appleapplel=newApple(J;
}q
Apple(int)inApplecannotbeapplied
>to()
顯示的錯(cuò)誤是,必須提供Apple帶有int參數(shù)的構(gòu)造函數(shù),而默認(rèn)的無(wú)參構(gòu)造
函數(shù)沒(méi)有被允許使用。
方法重載
在Java中一個(gè)很重要的概念是方法的重載,它是類名的不同表現(xiàn)形式。我們上
面說(shuō)到了構(gòu)造函數(shù),其實(shí)構(gòu)造函數(shù)也是重載的一種。另外一種就是方法的重載
Apple{|
Stringcolor;
publicApple(){}
Apple(sum){}
pubJigetApple(num){
StringgetApple(Stringcolor){|
return"color*':
如上面所示,就有兩種重載的方式,一種是Apple構(gòu)造函數(shù)的重載,一種是
getApple方法的重載。
但是這樣就涉及到一個(gè)問(wèn)題,要是有幾個(gè)相同的名字,Java如何知道你調(diào)用的
是哪個(gè)方法呢?這里記住一點(diǎn)即可,每個(gè)重載的方法都有獨(dú)一無(wú)二的參數(shù)列表。
其中包括參數(shù)的類型、順序、參數(shù)數(shù)量等,滿足一種一個(gè)因素就構(gòu)成了重載的必
要條件。
請(qǐng)記住下面重載的條件
方法名稱必須相同。
參數(shù)列表必須不同(個(gè)數(shù)不同、或類型不同、參數(shù)類型排列順序不同等)。
方法的返回類型可以相同也可以不相同。
僅僅返回類型不同不足以成為方法的重載。
重載是發(fā)生在編譯時(shí)的,因?yàn)榫幾g器可以根據(jù)參數(shù)的類型來(lái)選擇使用哪個(gè)方法。
方法的重寫
方法的重寫與重載雖然名字很相似,但卻完全是不同的東西。方法重寫的描述是
對(duì)子類和父類之間的。而重載指的是同一類中的。例如如下代碼
Fruit■■覆■圖
System.out.printl('eatfruit');
AppleFruit
System.out.printl('eatapple');
上面這段代碼描述的就是重寫的代碼,你可以看到,子類Apple中的方法和父
類Fruit中的方法同名,所以,我們能夠推斷出重寫的原則
重寫的方法必須要和父類保持一致,包括返回值類型,方法名,參數(shù)列表也都一樣。
重寫的方法可以使用?Override注解來(lái)標(biāo)識(shí)
子類中重寫方法的訪問(wèn)權(quán)限不能低于父類中方法的訪問(wèn)權(quán)限。
初始化
類的初始化
上面我們創(chuàng)建出來(lái)了一個(gè)Car這個(gè)對(duì)象,其實(shí)在使用new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象
的時(shí)候,其實(shí)是調(diào)用了這個(gè)對(duì)象無(wú)參數(shù)的構(gòu)造方法進(jìn)行的初始化,也就是如下這
段代碼
這個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)可以隱藏,由JVM自動(dòng)添加。也就是說(shuō),構(gòu)造函數(shù)能夠
確保類的初始化。
成員初始化
Java會(huì)盡量保證每個(gè)變量在使用前都會(huì)獲得初始化,初始化涉及兩種初始化。
一種是編譯器默認(rèn)指定的字段初始化,基本數(shù)據(jù)類型的初始化
類型初始值
booleanfalse
char/uOOOO
byte(byte)O
short(short)O
int0
longOL
floatO.Of
doubleO.Od
一種是其他對(duì)象類型的初始化,String也是一種對(duì)象,對(duì)象的初始值都為null,
其中也包括基本類型的包裝類。
一種是指定數(shù)值的初始化,例如:
也就是說(shuō),指定a的初始化值不是0,而是11。其他基本類型和對(duì)象類型也
是一樣的。
構(gòu)造器初始化
可以利用構(gòu)造器來(lái)對(duì)某些方法和某些動(dòng)作進(jìn)行初始化,確定初始值,例如
Counter{|
Courrter(){|
利用構(gòu)造函數(shù),能夠把i的值初始化為11。
初始化順序
首先先來(lái)看一下有哪些需要探討的初始化順序
靜態(tài)屬性:static開頭定義的屬性
靜態(tài)方法塊:static{}包起來(lái)的代碼塊
普通屬性:非static定義的屬性
普通方法塊:{}包起來(lái)的代碼塊
構(gòu)造函數(shù):類名相同的方法
方法:普通方法
LifeCycle{|
//
StringstaticField=getStaticField();
//
static[
System,out,printin(“靜態(tài)方法塊初始化”);
//普通屬
Stringfield=getField();
//普通方法塊
System.out.println(field);
//構(gòu)造函差
LifeCycle。
System.out.printing構(gòu)造函數(shù)初始化”);
StringstatiFiled="StaticFieldInitial";
____StringgetField。{■
「iled;
main(String[]ar;
LifeCycle()
這段代碼的執(zhí)行結(jié)果就反應(yīng)了它的初始化順序
輸出結(jié)果:靜態(tài)屬性初始化、靜態(tài)方法塊初始化、普通屬性初始化、普通方法塊
初始化、構(gòu)造函數(shù)初始化
數(shù)組初始化
數(shù)組是相同類型的、用一個(gè)標(biāo)識(shí)符名稱封裝到一起的一個(gè)對(duì)象序列或基本類型數(shù)
據(jù)序列。數(shù)組是通過(guò)方括號(hào)下標(biāo)操作符口來(lái)定義使用。
一般數(shù)組是這么定義的
al[];
兩種格式的含義是一樣的。
直接給每個(gè)元素賦值:intarray[4]={1,2,3,4};
給一部分賦值,后面的都為0:intarray[4]={1,2};
由賦值參數(shù)個(gè)數(shù)決定數(shù)組的個(gè)數(shù):intarray。={1,2};
可變參數(shù)列表
Java中一種數(shù)組冷門的用法就是可變參數(shù),可變參數(shù)的定義如下
|add(一,??numbers)]
(num:numbers){|
SUI
sum;
然后,你可以使用下面這幾種方式進(jìn)行可變參數(shù)的調(diào)用
add();
add(new口{1,3,2});
對(duì)象的銷毀
雖然Java語(yǔ)言是基于C++的,但是它和C/C++一個(gè)重要的特征就是不需要手
動(dòng)管理對(duì)象的銷毀工作。在著名的一書《深入理解Java虛擬機(jī)》中提到一個(gè)
觀點(diǎn)
Java與CH之間有一堵由內(nèi)存動(dòng)態(tài)分配和垃圾收集技術(shù)所圍成的“高墻”,墻外面的人
想進(jìn)去,墻里面的人卻想出來(lái).
在Java中,我們不再需要手動(dòng)管理對(duì)象的銷毀,它是由Java虛擬機(jī)(JVM)
進(jìn)行管理和銷毀的。雖然我們不需要手動(dòng)管理對(duì)象,但是你需要知道對(duì)象作用
域這個(gè)概念。
對(duì)象作用域
許多數(shù)語(yǔ)言都有作用域(scope)這個(gè)概念。作用域決定了其內(nèi)部定義的變量名的
可見性和生命周期。在C、C++和Java中,作用域通常由{}的位置來(lái)決定,
這也是我們常說(shuō)的代碼塊。例如:
a變量會(huì)在兩個(gè){}作用域內(nèi)有效,而b變量的值只能在它自己的{}內(nèi)有效。
雖然存在作用域,但是不允許這樣寫
這種寫法在C/C++中是可以的,但是在Java中不允許這樣寫,因?yàn)镴ava設(shè)計(jì)
者認(rèn)為這樣寫會(huì)導(dǎo)致程序混亂。
###this和super
this和super都是Java中的關(guān)鍵字。
this表示的當(dāng)前對(duì)象,this可以調(diào)用方法、調(diào)用屬性和指向?qū)ο蟊旧怼his在
Java中的使用一般有三種:指向當(dāng)前對(duì)象
Apple{|
AppleeatApple(){
returnthis;
main(String[]ari
Appleapple=
apple.eatApple()
這段代碼比較精妙,精妙在哪呢?我一個(gè)eatApple()方法竟然可以調(diào)用多次,
你在后面還可以繼續(xù)調(diào)用,這就很神奇了,為啥呢?其實(shí)就是this在作祟了,
我在eatApple方法中加了一個(gè)returnthis的返回值,也就是說(shuō)哪個(gè)對(duì)象調(diào)用
eatApple方法都能返回對(duì)象的自身。
this還可以修飾屬性,最常見的就是在構(gòu)造方法中使用this,如下所示
Apple{|
privateintnum:
Apple(num){|
.num=
ublicstaticvoidmain(Strin
Apple(10);
main方法中傳遞了一個(gè)int值為10的參數(shù),它表示的就是蘋果的數(shù)量,并把
這個(gè)數(shù)量賦給了num全局變量。所以num的值現(xiàn)在就是10。
this還可以和構(gòu)造函數(shù)一起使用,充當(dāng)一個(gè)全局關(guān)鍵字的效果
Apple{|
privateStringcolor;
Apple(num){|
Apple(Stringcolor){
(ljColor);
Apple(num.Stringcolor)
.num二
.color=
你會(huì)發(fā)現(xiàn)上面這段代碼使用的不是this,而是this(參數(shù))。它相當(dāng)于調(diào)用了其他
構(gòu)造方法,然后傳遞參數(shù)進(jìn)去。這里注意一點(diǎn):this。必須放在構(gòu)造方法的第一
行,否則編譯不通過(guò)。
publicclassApple{
privateint「:「;
privateString;
publicApp:H(intnum){
thisfnum/color:“紅色”);
}
publicApple(Stringcolor){
this.color=color;
}Callto'this()(mustbefirststatemenl)nconstructorbody
publicAcom,sendmessage?api?Apple
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療器械買賣合同協(xié)議書
- 商品房產(chǎn)購(gòu)銷合同
- 2025年春人教版(2024)小學(xué)數(shù)學(xué)一年級(jí)下冊(cè)教學(xué)計(jì)劃
- 2021電力工程繼電保護(hù)及接線施工作業(yè)指導(dǎo)書
- 醫(yī)院醫(yī)療器械買賣合同
- 2025年南昌年貨運(yùn)從業(yè)資格證考試試題題庫(kù)
- 承包攪拌站運(yùn)輸合同
- 2025年鷹潭貨運(yùn)資格證培訓(xùn)考試題
- 戶外廣告發(fā)布合同
- 2025年遵義貨運(yùn)從業(yè)資格考試題
- 工程造價(jià)預(yù)算書
- 終止授權(quán)代理協(xié)議書模板
- 修建水壩施工合同模板
- 劍橋商務(wù)英語(yǔ)中級(jí)unit12
- 北師大版三年級(jí)下冊(cè)除法豎式計(jì)算題練習(xí)100道及答案
- 十堰2024年湖北十堰市茅箭區(qū)教育局所屬學(xué)校招聘教師134人筆試歷年典型考題及考點(diǎn)附答案解析
- 小白兔拔蘿卜(無(wú)背景音樂(lè))
- 人音版六年級(jí)下冊(cè)音樂(lè)教案及反思
- 四年級(jí)上冊(cè)豎式計(jì)算100題及答案
- 結(jié)構(gòu)化在崗帶教手冊(cè)模板2.0
- 2024屆遼寧省沈陽(yáng)市名校中考四?;瘜W(xué)試題含答案解析
評(píng)論
0/150
提交評(píng)論