Java編程思想--第2章 一切都是對象

2.1 用引用操縱對象

操作的標識符是對象的一個引用,而不代表對象本身。

2.2 必須由你創(chuàng)建所有對象

一旦創(chuàng)建了一個引用,就希望它能與一個新的對象相關聯(lián)。通常用new關鍵字來實現(xiàn)這個目的,意思就是“給我一個新對象”。

2.2.1 存儲到什么地方

寄存器:最快的存儲區(qū),位于CPU內(nèi)部。因為數(shù)量有限,要按需分配,程序員感受不到。

堆棧:位于RAM中,但是通過堆棧指針可以從處理器哪里獲得直接支持。堆棧指針向下移動,則分配新的內(nèi)存;若向上移動,則釋放這些內(nèi)存。一般是存放對象引用,約束:創(chuàng)建程序時,Java系統(tǒng)必須知道存儲在堆棧內(nèi)所有項的確切生命周期,以便移動堆棧指針。

堆:一種通用的內(nèi)存池,也位于RAM區(qū),用于存放所有的Java對象。堆不同于棧的好處:編譯器不需要知道存儲的數(shù)據(jù)在堆內(nèi)存活多長時間,因此堆內(nèi)存分配有很大的靈活性。

常亮存儲:常量值通常直接存放在代碼內(nèi)部,因為永遠不會改變。

非RAM存儲:如果數(shù)據(jù)完全存活在程序之外,那么它可以不受程序的任何控制,在程序沒有運行的時候它也可以存在,如流對象和持久化對象。

【注意】基本類型、對象引用存放在堆棧中,對象本身放在堆中。String是一個不變的常量,放在常量池中。如果是new出來的String對象放在堆中,它的引用是在棧中。

2.2.2 特別基本類型

基本類型:為了提高效率,不用new來創(chuàng)建,而是創(chuàng)建一個并非是“引用”。這個變量直接存儲值,并且置于堆棧中。

基本數(shù)據(jù)類型大小最小值最大值包裝器類型

boolean---Boolean

cahr16bitUnicode0Unicode2^16-1Character

byte8bit-128+127Byte

short16bits-2^15+2^15-1Short

int32bits-2^31+2^15-1Interger

long64bits-2^63+2^63-1Long

float32bitsIEEE754IEEE754Double

double64bitsIEEE754IEEE754Double

所有數(shù)值類型都有正負號。

基本類型具有的包裝器類,使得可以在堆中創(chuàng)建一個非基本對象,用來表示對應的基本類型、

構造方法:

char c = 'x';

Character ch = new Character(c);

也可以這樣:

Character ch = new Character(‘'x');

JDK1.5后有自動裝箱拆箱功能

Character ch = 'x'; 或 char c = ch;

Java提供了兩個高精度的類:BigInteger和BigDecimal,他們大體上是屬于包裝類的范疇,但是沒有對應的基本類型。

2.2.3 Java中的數(shù)組

Java可以確保數(shù)組會被初始化,而且不會在他的訪問范圍之外被訪問。

當數(shù)組存放基本數(shù)據(jù)類型的時候,全部初始化為0。

當創(chuàng)建一個數(shù)組對象時,實際上就是創(chuàng)建了一個引用數(shù)組,并且每個引用都會自動被初始化為一個特定的值,該值擁有一個自己的關鍵字null。一旦編譯器看見null,就知道這個引用還沒有指向某個對象。在使用任何引用之前,必須為其指定一個對象;如果試圖使用一個還是null的引用,在運行時會報錯。

2.3 永遠不需要銷毀對象

2.3.1作用域

由大括號決定,決定了在其內(nèi)定義的變量名的可見性和生命周期。在作用域內(nèi)定義的變量只可用于作用域結束之前。Java中不存在C++的作用域覆蓋的情況。

2.3.2 對象的作用域

Java對象的生命周期和基本數(shù)據(jù)類型的不一樣。當用new創(chuàng)建一個新的對象時,它可以存活于它的創(chuàng)建所在的作用域之外。

{

String s = new String("Hello");

}

引用s在作用域終點就消失了。然而,s指向的String對象仍繼續(xù)占據(jù)內(nèi)存空間。所以Java有一個垃圾回收器,用來監(jiān)視new創(chuàng)建的所有對象,并辨別那些不怎么被引用的對象。然后將其釋放掉。

2.4 創(chuàng)建新的數(shù)據(jù)類型:類

2.4.1 字段和方法

類中可以設置兩種類型的元素:字段(數(shù)據(jù)成員)和方法(成員函數(shù))

字段可以是基本數(shù)據(jù)類型,也可以是任何類型的對象,通過其引用和其進行通信,必須要初始化該引用,以便使其與一個實際的對象相關聯(lián)。

每個對象都有用來存儲其字段的空間,普通字段不能在對象間共享。

使用 . 來引用對象成員,如data.i = 10;

基本成員默認值

若類的某個成員是基本數(shù)據(jù)類型,即使沒有進行初始化,Java也會給它默認值,這種默認只針對類的字段。(boolean是false,其他是0)

2.5 方法、參數(shù)和返回值

方法就是函數(shù)。它的基本組成方式:名稱、參數(shù)、返回值和方法體。

Java中的方法只能作為類的一部分來創(chuàng)建。

調(diào)用方法的行為稱作發(fā)送消息給對象。

2.5.1 參數(shù)列表

方法的參數(shù)列表是指要傳遞什么信息給方法。

return關鍵字表示做完了要離開這個方法了,帶上要返回的結果。

2.6 構建一個Java程序

2.6.1 名字可見性

引入包名,反寫域名。

2.6.2 運用其他構件

import關鍵字

2.6.3 static關鍵字

用new來創(chuàng)建對象的時候,數(shù)據(jù)存儲空間才會被分配,其方法才供外界調(diào)用。通過static關鍵字可以不用創(chuàng)建對象而調(diào)用方法。

當聲明一個事物是static時,意味著它不會與它所在的類的任何對象關聯(lián)在一起。所以,即使從未創(chuàng)建某個類的任何對象,也可以調(diào)用其static方法或訪問其static域。

也就是說,為什么非得創(chuàng)建一個對象,才能使用方法和字段。因為非static域的字段和方法都是和特定的對象綁定的。如果你想不創(chuàng)建對象,直接使用方法和字段,就設定static,這樣沒有和特定對象綁定,直接用就好了,不用創(chuàng)建對象。

使用: 直接類名+方法名即可。

2.7 第一個Java程序

java.lang包是默認導入到每個類文件中的,他的所有類都是可以直接被使用的。

2.8 注釋和嵌入文檔

介紹一些常用的javadoc標簽:

1.@see:引用其他類:在生產(chǎn)的HTML文件中,可以通過這個標簽鏈接到其他文檔。

2.{@link package.class#memeber label} :與@see相似

3.{@docRoot} :產(chǎn)生到文件根目錄的相對路徑。

4.@version : 存放版本信息

5.@author :作者

6.@since: 允許指定程序代碼最早使用版本。

7.@Param :是用來描述方法中參數(shù)列表。

8.@return :描述返回值的含義

9.@throws :調(diào)用失敗后拋出的對象。

10.@Deprecated :棄用的意思。指出一些舊特性被新特性取代,不要使用這些特性,可能會被刪除。

2.9 編碼風格

類名的首字母大寫。使用駝峰風格。

方法、變量名等地一個字母小寫。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容