1. 程式人生 > >Java編程思想 4th 第2章 一切都是對象

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

reference 報錯 編程 必須 返回 -1 color 處理 是什麽

Java是基於C++的,但Java是一種更純粹的面向對象程序設計語言,和C++不同的是,Java只支持面向對象編程,因此Java的編程風格也是純OOP風格的,即一切都是類,所有事情在類對象中完成。

在Java中,使用引用來操縱對象,在Java編程思想的第四版中,使用的術語是“引用(reference)”,之前有讀過Java編程思想第三版,在第三版中,使用的術語是“句柄(handle)”,事實上,我覺得第三版的術語“句柄”更加形象傳神,就像你用一個門的把柄來開門關門一樣,不用管門是什麽門,總之你用門把柄就能控制操作這扇門。當然,使用“引用”這個術語對於C++出身的人來說更方便理解,因為在C++中,底層一般使用指針來實現引用,也即通過指針來間接操縱對象。更合拍的是,在C++中,使用new動態分配的對象是匿名的,沒有任何辦法能夠操縱該對象,除了起初new表達式返回的指針,在Java中,對象都是new出來的,是存放於動態內存中的,要想使用對象,就要通過對象的句柄(引用)來操作,這無形中把Java和C++聯系了起來,因為二者本質都是一種類似指針的東西。

在Java中,引用可以單獨存在,就像在C++中,指針也是一個獨立的存在。我們可以把引用關聯到對象上,也可以令指針指向對象,因此引用(指針)是獨立於對象存在的。同指針一樣,不能夠隨意使用沒有關聯對象的引用。在Java中,使用未關聯對象的引用會導致編譯報錯;在C++中,這通常會導致內存越界,進而收到操作系統的segmentfault信號,如果未捕捉處理該信號,默認是程序coredump。如下圖所示:

C++:

技術分享

Java:

技術分享

此處還隱式說明了一個Java語言的特性:String字符串可以用帶引號的字面值進行初始化(字面值一詞是我從C++中拿過來的術語),示例如下:

String str = "Hello";

一旦創建了引用,除了用上述特性直接進行初始化,通常情況下引用必須管理到一個對象,而Java中對象的創建只能通過new來進行。對於上述例子,可以寫成:

String str = new String("Hello");

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