Java程式設計思想學習(二)----一切都是物件
2.1用應用操作物件
String s;
這裡所建立的只是引用,並不是物件。如果此時向s傳送一個訊息,就會返回一個執行時錯誤。這是因為此時s沒有和任何事物關聯。因此,一種安全的做法是:建立一個引用的同時便進行初始化。
2.2必須由你建立所有物件
一旦建立了一個引用,就希望它能與一個新的物件相關聯。通常用new操作符來實現這一目的。
String s = new String("asdf");
2.2.1儲存到什麼地方
1)暫存器。這是最快的儲存區,因為它不同於其他儲存區的地方——處理器內部。但是暫存器的數量及其有限,所以暫存器根據需求進行分配。你不能直接控制,也不能在程式中感覺到暫存器存在的任何跡象。
2)堆疊。位於通用RAM(隨機訪問儲存器)中,但通過堆疊指標可以從處理器那裡獲取直接支援。堆疊指標向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效的分配儲存方法,僅次於暫存器。建立程式時,Java系統必須知道儲存在堆疊內所有項的確切生命週期,以便上下移動堆疊指標。這一約束限制了Java程式碼的靈活性,所以雖然某些Java資料儲存在堆疊中——特別是物件引用,但是Java物件並不儲存於其中。
3)堆。一種通用的記憶體池(也位於RAM區),用於存放所以的Java物件。堆不同於堆疊的好處是:編譯器不需要知道儲存的資料在堆裡存活的多長時間。當需要一個物件時,只需要new寫一行簡單的程式碼,當執行這行程式碼時,會自動在堆裡進行儲存分配。當然,這種靈活性必須要付出相應的代價:用堆進行儲存分配和清理可能用比堆疊進行儲存分配需要更多的時間。
4)常量儲存。常量值通常直接存放在程式程式碼內部,這樣做是安全的,因為它們永遠不會被改變。有時,在嵌入式系統中,常量本身會和其它部分隔離開,所以在這種情況下,可以選擇將其存放在ROM(只讀儲存器)中。
5)非RAM儲存。如果資料完全存活於程式之外,那麼他可以不受程式的任何控制,在程式沒有執行時也可以存在。其中兩個基本的例子是流物件和持久化物件。在流物件中,物件轉換為位元組流,通常被髮送給另一臺機器。在“持久化物件”中,物件被存放於磁碟上,因此,即使程式終止,它們任可以保持自己的狀態。Java提供了輕量級的持久化支援,而諸如JDBC和Hibernate這樣的機制提供了更復雜的對資料庫中儲存和讀取物件資訊的支援。
2.2.2特例:基本型別
基本型別 | 大小 | 最小值 | 最大值 | 包裝器型別 |
boolean | —— | —— | —— | Boolean |
char | 16bit | Unicode 0 | Unicode 216-1 | Character |
byte | 8bit | -128 | 127 | Byte |
short | 16bit | -215 | 215-1 | Short |
int | 32bit | -231 | 231-1 | Integer |
long | 64bit | -263 |
-263-1 |
Long |
float | 32bit | IEEE754 | IEEE754 | Float |
double | 64bit | IEEE754 | IEEE754 | Double |
void | —— | —— | —— | Void |
高精度數字
Java提供了兩個用於高精度計算的類:BigInteger和BigDecimal。雖然它們大體上屬於“包裝器類”的範疇,但二者沒有對應的基本型別。
BigInteger支援任意精度的整數。
BigDecimal支援任何精度的定點數。例如,可以用它進行精確的貨幣計算。
2.4.1欄位和方法
基本成員預設值
基本型別 | 預設值 |
boolean | false |
char | '\uoooo'(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |