1.java的關鍵術語
2.==和equals
如果虛擬機始終將相同的字符串共享, 就可以使用= 運算符檢測是否相等。但實際上 只有字符串常量是共享的,而+ 或 substring 等操作產生的結果並不是共享的。因此,千萬不要使甩== 運算符測試字符串的相等性, 以免在程序中出現糟糕的 bug。
3.空串與 Null 串
- 空串 "" 是長度為 0 的字符串,是一個 Java 對象。
- String 變量還可以存 放一個特殊的值, 名為 null, 這表示目前沒有任何對象與該變量關聯
4.構建字符串
每次連接字符串, 都會構建一個新的 String 對象, 既耗時, 又浪費空間。使用 StringBuilder類就可以避免這個問題的發生。
5.封裝
封裝(encapsulation, 有時稱為數據隱藏)是與對象有關的一個重要概念。從形式上看, 封裝不過是將數據和行為組合在一個包中, 並對對象的使用者隱藏了數據的實現方式。
實現封裝的關鍵在於絕對不能讓類中的方法直接地訪問其他類的實例域。程序僅通過對 象的方法與對象數據進行交互。封裝給對象賦予了“ 黑盒” 特征, 這是提高重用性和可靠性 的關鍵。 這意味着一個類可以全面地改變存儲數據的方式,只要仍舊使用同樣的方法操作數據, 其他對象就不會知道或介意所發生的變化。
6.對象的三個主要特性
對象的行為、狀態、標識
7.依賴(dependence)、聚合(aggregation)、繼承(inheritance)
- 如果一個類的方法操縱另一個 類的對象,我們就說一個類依賴於另一個類。
- 聚合關系意味着類 A 的對象包含類 B 的對象。
- 繼承是一種用於表示特殊與一般關系的。
8.對象變量
可以將 Java 的對象變量看作 C++ 的對象指針,所有的 Java 對象都存儲在堆中。 當一個對象包含另一個對象變量時, 這個變量依然 包含着指向另一個堆對象的指針。
9.clone
在 Java 中, 必須使用 clone 方法獲得對象的完整拷貝。
如果需要返回一個可變對象的引用, 應該首先對它進行克隆(clone)。對象 clone 是 指存放在另一個位置上的對象副本。
10.靜態域、靜態常量
靜態域是static修飾的數據域,屬於類,而不屬於任何 獨立的對象。在絕大多數的面向對象程序設計語言中, 靜態域被稱為類域。
靜態常量(類常量): static final 修飾。
11.靜態方法
-
靜態方法是一種不能向對象實施操作的方法,是沒有 this 參數的方法。
-
靜態方法不能訪問實例域, 因為它不能操作對象。但是,靜態方法可 以訪問自身類中的靜態域。
-
可以通過類名或對象名調用靜態方法,不建議用對象名調用!
-
在下面兩種情況下使用靜態方法:
•一 方法不需要訪問對象狀態,其所需參數都是通過顯式參數提供(例如: Math.pow)
•一個方法只需要訪問類的靜態域
static修飾的含義總結:屬於類且不屬於類對象的變量和函數。
12.方法參數
Java 總是采用按值調用,對對象采用的不是引用調用,實際上, 對象引用是按值傳遞的。
下面總結一下 Java中方法參數的使用情況:
•一個方法不能修改一個基本數據類型的參數(即數值型或布爾型) 。
•一個方法可以改變一個對象參數的狀態。
•一個方法不能讓對象參數引用一個新的對象。
13.重載
如果多個方法有 相同的名字、不同的參數,便產生了重載(overloading)。
14.域和局部變量
域與局部變量的主要不同點:必須明確地初始化方法中的局部變量。 但是, 如果沒有初始化類中的域, 將會被自動初始化為默認值(0、false 或 null)。
15.構造器
如果構造器的第一個語句形如 this(...), 這個構造器將調用同一個類的另一個構造器。
僅當類沒有提供任何構造器的時候, 系統才會提供一個默認的構造器
16.對象析構
由於 Java 有自動的垃圾回收器,不需要人工回收內存, 所以 Java 不支持析構器。
17.包
從編譯器的角度來看, 嵌套的包之間沒有任何關系。例如,java.utU 包與java.util.jar 包 毫無關系。每一個都擁有獨立的類集合。
18.編譯器、虛擬機和包
編譯器在編譯源文件的時候不檢查目錄結構。 即使這個源文件沒有在子目錄 com/mycompany 下, 也可以進行編譯。如果它不依賴 於其他包, 就不會出現編譯錯誤。但是, 最終的程序將無法運行, 除非先將所有類文件 移到正確的位置上。 如果包與目錄不匹配, 虛擬機就找不到類 。
javac 編譯器總是在當前的目錄中查找文件, 但 Java 虛擬機僅在類路徑中有 目錄的時候才查看當前目錄
19.繼承
-
在 Java 中, 所有的繼承都是公有繼承,Java 不支持多繼承,而是用接口實現。
-
用來判斷是否應該設計為繼承 關系的簡單規則:這就是“ is-a” 規則,它 表明子類的每個對象也是超類的對象。
-
在設計類的時候,應該將通用的方法放在超類中, 而將具有特殊用途的方法放在子類中,這種將通用的 功能放到超類的做法,在面向對象程序設計中十分普遍。
-
子類使用super.xxx()來調用超類的xxx()方法,進而訪問超類的私有域。
-
由於 Manager 類的構造器不能訪問 Employee 類的私有域, 所以必須利用 Employee 類 的構造器對這部分私有域進行初始化,我們可以通過 super 實現對超類構造器的調用。使用 super 調用構造器的語句必須是子類構造器的第一條語句。 如果子類的構造器沒有顯式地調用超類的構造器, 則將自動地調用超類默認(沒有參數) 的構造器。 如果超類沒有不帶參數的構造器, 並且在子類的構造器中又沒有顯式地調用超類 的其他構造器 ,則 Java 編譯器將報告錯誤。
-
超類和子類的轉換:
•只能在繼承層次內進行類型轉換。
•在將超類轉換成子類之前,應該使用 instanceof進行檢查。
20.Java 不支持多繼承
-
關鍵字 this 有兩個用途: 一是引用隱式參數,二是調用該類其他的構 造器 。
-
super 關鍵字也有兩個用途:一是調用超類的方法,二是調用超類的構造器。
在調用構造器的時候, 這兩個關鍵字的使用方式很相似。調用構造器的語句只能作為另 一個構造器的第一條語句出現。構造參數既可以傳遞給本類(this) 的其他構造器,也可 以傳遞給超類(super) 的構造器。