(一) java共有8種基本類型:4種整型,2種浮點類型,1種char,1種boolean。
1) 4種整型:byte(1)、short(2)、int(4)、long(8)。
2) int最常用,byte和short常用在底層的文件處理或者需要控制占用存儲空間量的大數組。
3) 浮點類型:float(4)、double(8)。Float後綴F,不加後綴默認為double(D)。
4) char類型表示單個字符,通常用來表示字符常量。
5) boolean類型有兩個值:false、true。
(二) 聲明一個變量之後,必須用賦值語句對變量進行顯式初始化,千萬不要使用未初始化的變量。
(三) 關鍵詞final表示該變量只能被賦值一次。一旦賦值,不可更改。在Java中,經常用final來定義類常量,這樣,可以使該常量在一個類中的多個方法中使用。
(四) 正數被0除將會產生異常,浮點數被0除將會得到無窮大或NaN。
(五) 字符串的不可變性有一個優點:可以讓字符串共享。
(六) 檢測字符串是否相等使用equals而不用==。後者要求兩個字符串的存放地址必須也相同。
(七) 輸入輸出例子:
(八) While循環語句首先檢測循環條件,因此循環體中的代碼可能不被執行。如果希望循環體至少執行一次,則應該將檢測條件放在最後,使用do..while.
(九) case標簽可以是:類型為char、byte、short、int的常量表達式;枚舉常量;
1) 從Java7開始,case可以支持字符串字面量。
2) 如果case分支語句的末尾沒有break,那麼會接著執行下一個分支語句。
(十) 中斷控制流程語句:break、continue。
(十一) 數組
1) 創建一個數組時,所有元素初始化為0;
2) boolean數組元素初始化為false。
3) 對象數組元素初始化為null(表示這些元素未存放任何對象)。
4) Arrays.sort()可以對數組進行快速排序。
(一) 類之間最常見的關系:
1) 依賴(uses-a):A類的方法操縱B類的對象(B類的對象是A類的方法的入參),則A類依賴B類。
2) 聚合(has-a):A類的對象包含B類的對象(B對象是A的成員變量)。
3) 繼承(is-a):A繼承自B,A is a B。
(二) 要想使用對象,就必須首先構造對象,並制定其初始狀態。然後對對象應用方法。
1) 使用構造器構造新實例。
(三) 一個對象變量只是引用一個對象,而不是包含一個對象。
1) 如:Date deadline = new Date(); new Date()構造了一個Date類型的對象,該對象的值是一個引用該對象的地址,而這個地址存放在變量deadline中。
2) 如果一個對象為null,就等於沒有指向任何對象,就不能調用該對象的任何方法。比如:
Brithday birth = null;
birth.toString();
這樣會報錯。
(四) 在一個源文件中,只可以有一個公共類,可以有多個非公共類。
1) 比如,EmployeeTest.java除了一個公共類EmployeeTest(包含main方法)之外,還有一個非公共類Employee。
2) 當編譯這段源代碼時,編譯器會在目錄下創建兩個類文件:EmployeeTest.class和Employee.class。
3) 然後將程序中包含main方法的類名(EmployeeTest)提供給字節碼解釋器,以便啟動該程序:java EmployeeTest
(五) 關於構造器
1) 構造器與類同名。
2) 每個類可以有一個以上的構造器。
3) 構造器可以有多個參數。
4) 構造器沒有返回值。
5) 構造器總是伴隨著new操作一起調用。
(六) 在每一個方法中,關鍵詞this表示隱式參數,表示當前對象實例。比如:
public void raiseSalary(double percent){
double raise = this.salary +percent;
this.salary +=raise;
}
而percent就是顯式參數。
(七) 如果一個類有final實例變量,那麼初始化該類時必須初始化該變量。即:必須確保在每一個構造器執行之後,該變量的值被設置,並且在後續操作中不能夠對它再修改。
(八) final修飾符大都應用於基本類型變量或者不可變類型的變量(如果類中的每一個方法都不會改變其對象,這種類就是不可變的類。例如String類。)
(九) 靜態變量屬於類,不屬於任何對象。比如:
每一個Test對象擁有自己的size變量,但是無論新建多少對象,它們共享age變量。
(十) System.out就是一個使用靜態變量的例子。
(十一) 按值調用表示方法提供的是調用者提供的值。按引用調用表示方法接收的是調用者提供的變量地址。Java總是采用按值調用。
1) 很多人根據下面的例子得出結論:Java對對象的傳遞采用按地址調用,因為調用函數後,對象的屬性值發生了變化:
實際上,49行的方法的引用x只是harry的一個拷貝,此時,x和harry都是一個數值,該數值都等於Employee對象指向的地址。即:x和harry同時指向Employee對象的地址。你改變了對象的屬性,但x、harry各自代表的那個地址數值並沒有發生改變。
2) 通過下例來說明Java對對象采用的也是按值傳遞:
swap方法對x、y進行置換,導致x和y引用的地址發生了變化。但是a、b沒有發生任何變化。
(十二) 如果多個方法有相同的名字、不同的參數,便發生了重載。
1) 要完整的描述一個方法,需要指出方法名以及參數類型。這叫做方法的簽名。
2) 返回值類型不是方法簽名的一部分。也就是說,不能有兩個名字相同、參數類型也相同卻返回不同類型值得方法。下面的寫法錯誤:
(十三) 如果在編寫一個類時沒有編寫構造器,那麼系統就會提供一個無參構造器。這個構造器將所有的實例域(成員變量)設置為默認值。於是,實例域的數值數據設置為0、布爾型數據設置為false、所有對象變量設置為null。(僅當類沒有提供任何構造器的時候,系統才會提供一個默認的構造器。)
(十四) 關鍵詞this的雙重意義:
1) 首先,this引用方法的隱式參數(即,一個函數除了多個入參外,還有一個沒有寫出的this參數,該參數總是指向當前調用該方法的對象實例。)
2) 第二個,如果構造器的第一個語句形如:this(…),這個構造器將調用同一個類的另一個構造器。