一、 java的基本程式設計結構 (一) java共有8種基本類型:4種整型,2種浮點類型,1種char,1種boolean。 1) 4種整型:byte(1)、short(2)、int(4)、long(8)。 2) int最常用,byte和short常用在底層的文件處理或者需要控制占用存儲空間量的大 ...
一、 java的基本程式設計結構
(一) 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(…),這個構造器將調用同一個類的另一個構造器。