1、盡管Java是基于C++的,但是相比之下,Java是一種更“純粹”的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C++和Java都是混合/雜合型語(yǔ)言,
但是后者的設(shè)計(jì)者認(rèn)為這種雜合性并不像C++中那么重要。C++之所以成為一種雜合語(yǔ)言主要是因?yàn)樗С峙cC語(yǔ)言的向后兼容,
作為C的一個(gè)超集,它具有許多C語(yǔ)言不具備的特性,而這些特性使得C++在某些方面顯得過(guò)于復(fù)雜。
2、Java中(幾乎)一切都是對(duì)象,并且借助引用(reference)來(lái)操縱對(duì)象
(1)Java中(幾乎)一切都是對(duì)象,因而可采用單一固定的語(yǔ)法——引用來(lái)操縱元素;
(2)引用之于對(duì)象就像遙控器之于電視機(jī),遙控器(引用)可以沒(méi)有電視機(jī)(對(duì)象)與之關(guān)聯(lián)而獨(dú)立存在;
3、對(duì)象的存儲(chǔ)位置
(1)寄存器:位于處理器內(nèi)部,存取速度最快同時(shí)數(shù)量也極其有限,并且開(kāi)發(fā)者無(wú)法直接控制。
(2)棧:位于通用RAM中,存取速度僅次于寄存器,用于存放對(duì)象引用、變量值等。創(chuàng)建程序時(shí),Java系統(tǒng)必須知道
存儲(chǔ)在堆棧內(nèi)所有項(xiàng)的確切聲明周期,以便上下移動(dòng)堆棧指針——堆棧指針向下移動(dòng),則分配內(nèi)存;若向上移動(dòng),
則釋放那些內(nèi)存。每個(gè)方法在執(zhí)行時(shí)都會(huì)創(chuàng)建自己的棧內(nèi)存,用于存放局部變量,棧內(nèi)存在方法結(jié)束時(shí)自動(dòng)銷(xiāo)毀。
(3)堆:也位于通用RAM,存取速度比堆棧慢,用于存放所有Java對(duì)象。編譯器無(wú)需知道存儲(chǔ)的數(shù)據(jù)在堆中存活
多長(zhǎng)時(shí)間,因而具有更大的靈活行。
(4)常量存儲(chǔ):常量永遠(yuǎn)不會(huì)改變,通常直接存放到程序代碼內(nèi)部。有時(shí),在嵌入式系統(tǒng)中,常量直接存放到ROM中。
(5)非RAM存儲(chǔ):有些數(shù)據(jù)可以獨(dú)立于程序之外,在程序沒(méi)有運(yùn)行時(shí)也可以存在。其中兩個(gè)基本的例子是流對(duì)象(
對(duì)象轉(zhuǎn)化為字節(jié)流發(fā)送給另一臺(tái)機(jī)器)和持久化對(duì)象(對(duì)象存放與磁盤(pán)上,在需要時(shí),可以恢復(fù)成常規(guī)的基于RAM的對(duì)象)。
4、永遠(yuǎn)不需要銷(xiāo)毀對(duì)象
(1)變量只可用于定義它的作用域之內(nèi):與C、C++類(lèi)似,Java的作用域也是由花括號(hào)位置決定。不同的是,
Java不允許在嵌套的塊內(nèi)外定義同名的變量。
(2)對(duì)象在不被引用時(shí),會(huì)被垃圾回收器自動(dòng)銷(xiāo)毀,因而不存在“內(nèi)存泄漏”的問(wèn)題。
二、創(chuàng)建新的數(shù)據(jù)類(lèi)型:類(lèi)
1、在Java中,你所做的全部工作就是定義類(lèi),產(chǎn)生這些類(lèi)的對(duì)象,以及發(fā)送消息給這些對(duì)象。一旦
定義了一個(gè)類(lèi),就可以在類(lèi)中設(shè)置兩種類(lèi)型的元素:字段(數(shù)據(jù)成員)和方法(成員函數(shù))。
2、類(lèi)的數(shù)據(jù)成員如果是基本數(shù)據(jù)類(lèi)型(8種),即使沒(méi)有初始化,Java也會(huì)確保它獲得一個(gè)默認(rèn)值:
數(shù)據(jù)類(lèi)型 | 字節(jié)數(shù) | 默認(rèn)值 |
byte | 1 | (byte)0 |
short | 2 | (short)0 |
int | 4 | 0 |
long | 8 | 0L |
float | 4 | 0.0f |
double | 8 | 0.0d |
boolean | 1bit | false |
char | 2 | ‘/u0000’(null) |
但是,方法內(nèi)部定義的變量如果沒(méi)有初始化,直接使用,編譯器就會(huì)報(bào)錯(cuò)而不會(huì)自動(dòng)初始化為默認(rèn)值。
3、通過(guò)對(duì)象名完成的方法調(diào)用通常被稱(chēng)為“發(fā)送消息給對(duì)象”,面向?qū)ο蟮某绦蛟O(shè)計(jì)通常簡(jiǎn)單地歸納為“向?qū)ο蟀l(fā)送消息”。
4、在每個(gè)Java文件的開(kāi)頭,必須聲明import語(yǔ)句,以便引入在文件代碼中需要用到的額外類(lèi)。注意,
java.lang是默認(rèn)自動(dòng)導(dǎo)入到每個(gè)java文件中的,無(wú)需開(kāi)發(fā)者手動(dòng)import導(dǎo)入。關(guān)于import和package的具體用法,可以參考這篇文檔。
三、注釋和嵌入式文檔
1、Java中有兩種注釋風(fēng)格,都是從C++中繼承而來(lái):“//”和“/**/”。
2、JDK中提供了javadoc工具,用于簡(jiǎn)化文檔管理——將代碼和文檔放在同一個(gè)文件內(nèi),通過(guò)從中
提取文檔并輸出一個(gè)HTML文件文檔。
3、javadoc語(yǔ)法
(1)只能處理位于“/**”和緊接著的”*/”之間的內(nèi)容;
(2)內(nèi)容中包括兩種方式:
HTML標(biāo)簽:可以是Web文檔中的任何標(biāo)簽(除<h1>外,因?yàn)閖avadoc會(huì)插入自己的標(biāo)題)文檔標(biāo)簽:即以“@”開(kāi)頭
的命令,包括獨(dú)立文檔標(biāo)簽(必須位于注釋行的最前面)和行內(nèi)文檔標(biāo)簽(必須括于花括號(hào)內(nèi),可以位于javadoc注釋中的任何地方);
(3)共有三種類(lèi)型的注釋文檔:
/** 注釋內(nèi)容 *//* 注釋內(nèi)容 */
//注釋內(nèi)容
4、詳細(xì)的規(guī)范可以參考《EffectiveJava中文第二版》第44條
參考:
《Java編程思想 (第4版)》
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注