程序員之Java基礎(chǔ)知識(shí)及應(yīng)用概述_第1頁(yè)
程序員之Java基礎(chǔ)知識(shí)及應(yīng)用概述_第2頁(yè)
程序員之Java基礎(chǔ)知識(shí)及應(yīng)用概述_第3頁(yè)
程序員之Java基礎(chǔ)知識(shí)及應(yīng)用概述_第4頁(yè)
程序員之Java基礎(chǔ)知識(shí)及應(yīng)用概述_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論