1. 程式人生 > >《thinking in JAVA》讀書筆記 (二)

《thinking in JAVA》讀書筆記 (二)

物件與引用

一切被視為物件。操縱的識別符號實際上是物件的一個“引用”;
基本型別的變數沒有被視作物件。但我認為它們應該與類型別得到相同的待遇。
JAVA的操作符更像是物件的指標。書上了花了大段來說明為什麼是引用不是指標,但還是不理解。

你擁有一個引用,並不需要有一個物件與之關聯。
使用之前關聯上物件就可以,不一定要在宣告的時候。

建立物件

基本型別不用new不建立,也不是建立引用。而是建立“自動”變數,直接儲存值並置於棧中。
字串不屬於基本型別,但可以像使用基本型別一樣的方法申請字串物件。如

String s1 = "asdf";
String s2 = new
String("asfd");

通常基本型別用第一種,其它都要用第二種。

物件存放

基本型別置於堆中。
物件引用一般放在棧中,物件都放在堆中。

基本型別

基本型別所佔的儲存空間大小不變。
所有數值型別都有正負號。
boolean型別所佔儲存空間的大小沒有明確指定。(也沒有sizeof()這樣的函式去計算。
基本型別具有的包裝器類,使得可以在堆中建立一個非基本物件,用來表示對應的基本型別。例如:

char c = 'x';
Character ch = new Character('x');

陣列

JAVA確保陣列會被初始化,而且不能在它的範圍之外被訪問。
陣列識別符號本身是個引用。
如果是基本型別陣列,陣列內容是值,初始化為0。
如果是物件陣列,陣列內容是物件,初始化為null,使用前需要關聯物件。

作用域

當兩個不同作用域的變數名衝突。C/C++會隱藏較大作用域的變數,JAVA會報錯。例如:

{
    int x = 12;
    {
        int x = 96;
    }
}

基本型別的初始化

類中的成員是基本型別,申請物件是成員會得到預設值。
“區域性”變數基本成員,不會預設初始化。
類中的基本成員在堆中,開闢堆空間時會二進位制清零。
“區域性”變數基本成員在棧中,開闢棧空間時不會清零,為隨機值。

方法

JAVA的方法必須是類的一部分。
JAVA消除了“前向引用”(先宣告再引用)。

static

類中的static成員,意味著這個成員不會與類的任何物件例項關聯到一起。(與C++同。)
static方法常常拿來作“牧羊人”的角色,負責看護與其隸屬同一型別的例項群。

類名與檔名

一個檔案中最多有一個public類,這個類必須與檔案同名,包括大小寫。
也可以沒有一個public類,這時檔名任意。

javadoc

JAVA特有的東西,完全不懂,內容太多,不記了。