對象與引用
String s = new String("abc");
這裏的s只是一個引用並不是對象,對象是通過new操作符來生成的。引用可以用來操縱對象並且可以單獨存在,並不一定需要有一個對象與其關聯。
內存分配
程序運行時,共有寄存器、堆棧、堆、常量存儲、非RAM存儲等5個地方可以存儲數據,其中對象的引用存放在堆棧中,對象存放在堆中,常量直接存放在代碼內部。
基本數據類型
java共有八大基本數據類型,基本數據類型不需要用new來創建,存放在堆中。
基本數據類型都具有包裝器類,使得可以在堆中創建非基本對象。
char c = 'x';
Character ch = new Character(c);
其中c爲一個並非是引用的“自動”變量,而ch則是對象的引用。
基本類型 | 大小 | 包裝器類型 | 默認值 |
---|---|---|---|
boolean | - | Boolean | false |
char | 16bit | Character | null |
byte | 8bits | Byte | 0 |
short | 16bits | Short | 0 |
int | 32bits | Integer | 0 |
long | 64bits | Long | 0L |
float | 32bits | Float | 0.0f |
double | 64bits | Double | 0.0d |
基本數據類型的變量在作爲類的成員使用時,java會給它默認值使其初始化,但該方法不適應於局部變量,若類的成員是某個對象的引用則必須初始化。
static關鍵字
當使用new來創建對象時,java會在棧中爲對象分配存儲空間,此時同一個類的不同對象的字段內容不同,而用static關鍵字聲明的字段與方法是屬於類的不屬於特定對象。這就使得無論創建了特定類的多少個對象,這個類中特定的static域只有一個實例,並且可以直接用類名調用。