1.對象存在什麼地方。
a.寄存器
c和c++允許操作,java不允許。
b.堆棧
java的引用存這裏,java知道堆棧裏所有項的生命週期,以便上下移動。c和c++在此創建對象。
c.堆
存放java對象,編譯器不知道對象的存活週期。
d.常量存儲
直接存代碼內部。
e.靜態存儲區
static的字樣的數據存在這裏,ram,java對象則不存這裏。
f.非ram存儲
存活在程序之外,如流對象,對象轉化爲字節流發送給另一臺機器。
持久化對象,對象被放在磁盤上。
2.基本類型
new 的對象都在存在堆裏。基本類型由於簡單,所以存在棧裏,高效。
boolean
char 16bits
byte 8bits -128 +127
short 16bits from -32768 to 32767
int 32bits from -2147483648 to 2147483647
long 64bits from -9223372036854775808 to 9223372036854775807
float 32bits
double 64bits
void
3.高精度數字
BigInteger 任意精度整數
BigDecimal 任意精度定點數。
速度換精度。
4.java數組
java數組確保初始化,且有範圍檢查,以少量內存開銷和運行時下標檢查爲代價換來安全性和效率提高。
java數組存基本類型的話,編譯器確保數組初始化爲零。
5.作用域
{
int x=1;
{
int x=2;
}
}
爲防止混亂,java認爲重複定義,c++則會隱藏較大作用域變量。
6.對象作用域
{
String s = new String(“a string”);
}
作用域外 s引用失效。但是對象仍存在。
7.類的基本成員
當類的成員是基本類型,即使沒有初始化,也會確保有個默認值。
當變量作爲類的成員使用,java才確保給定默認值。(c++沒有這樣)
如果在某方法裏定義 int x; x沒有初始化,可能範圍任意值。
8.方法名和參數列表 合成 方法簽名 唯一標識出某個方法。
實驗 public String method()
private int method()
被java認爲是同一方法,報錯。
9.註釋
常見的註釋 /* */ 或者//
註釋文檔 類,域,方法
//: object/Documentation1.java
/** A class comment */
public class Documentation1 {
/** A field comment */
public int i;
/** A method comment */
public void f() {}
} ///:~
還有一些標籤,如@author,@param,@return ,@Deprecated