因爲開學要學Java,只有六週,Python是暑假自己學的,Java結束後繼續吧,而且我同時再看程序設計競賽,好看,但計科的男人不能哭
Java核心技術 ( 卷 I ) 讀書筆記(第一~三章)
注:先修C++,只標記Java與C++不同或特別重要的語法。
第一章 Java程序設計概述
第二章 Java程序設計環境
- JDK:Java Development Kit
- JRE:Java Runtime Environment
- SE:Standard Edition
- EE:Enterprise Edition
- ME:Micro Edition
- CamelCase:駝峯命名法。如果名字由多個單詞組成,每一個單詞的第一個字母都應該大寫。
- 源代碼的文件名必須與公共類的名字相同,並用 .java 作爲拓展名。
- 註釋:Java中前兩種註釋和C++一樣,第三種註釋可以自動地生成文檔,這種註釋使用 \** 開始,以 */ 結束。
/**
* This is the first sample program in Core Java Chapter 3
* @version 1.01 1997-03-22
* @author Gary Cornell
*/
- 數據類型: 8中基本類型( primitive type), 沒有無符號類型。
- int : 4字節
- short:2字節
- long:8字節。長整型數值有一個後綴L。
- byte:1字節
- float:4字節。有效位數6~7位。有後綴F。
- double:8字節。有效位數15位。
- boolean:1字節。整數值和布爾值之間不可以進行互相轉換。
- char:1字節
從Java 7開始,加上前綴 0b 就可以寫二進制數,如0b1001就是9。從Java 7開始還可以爲數字字面量加下劃線,增強可讀性,如1000_1101_1000。在JDK 5.0中可以使用十六進制表示浮點數值,如0x1.0p-3, 其中 p 表示指數。
表示溢出和出錯情況的三個特殊浮點數值:正無窮大,負無窮大,NaN(不是一個數字)。不能這樣檢測一歌特定值是否等於Double.NaN, 但可以使用 Double.isNaN(x) 判斷x是不是一個數字。
轉義序列符 \u 表示Unicode代碼單元的編碼,除了可以出現在字符常量或字符串內,還可以出現在之外,而其他轉移序列符不可以。public static void main(String\u005B\u005D args)
代碼點(Code point):是指與一個編碼表中的某個字符對應的代碼值。Unicode 中代碼點可分爲17個代碼級別(Code plane),第一個代碼級別稱爲基本的多語言級別(basic multilingual plane), 包括經典的Unicode代碼,其餘的16個附加級別,包括一些輔助字符(supplement character)。
- 常量:Java中,使用 final 指示常量。習慣上常量名使用全大寫。
- 在main方法中,所有指令都將使用嚴格的浮點計算,如果將一個類或方法標記爲 strictfp, 那這個類中的所有方法或這個方法都將使用嚴格的浮點計算。
public static strictfp void main(String[] argd)
- 位運算:使用2的冪次方的 & 運算可以將其他位屏蔽掉。>>> 將使用0填充高位,>> 運算符使用符號位填充高位,沒有<<<運算符。對移位運算符右側的參數需要進行 膜32 的運算(左邊是long,這時模64),例如,1<<35 和 1<<3的結果是一樣的。
- Math.round(x) 方法可以對浮點數進行舍入運算,得到最接近的整數(long)。
- 子串:String類的 substring( int beginIndex, int endIndex )返回索引從 beginIndex 到 endIndex-1 的子串。
- 拼接:當將一個字符串和一個非字符串的數值進行拼接時,後者就會轉換成字符串。
- equals(Object anObject):檢測兩個字符串是否相等,是返回True;否則返回false。可以使字符串變量或常量。equalsIgnoreCase()不區分大小寫。== 雲端副不能用來判斷兩個字符串是否相等,只能確定兩個字符串是否放置在同一個位置。
- 空串:”“, 是一個Java對象,有自己的串長度 (0) 和內容 (空)。String還可以存放特殊值 null,目前沒有雨任何對象關聯。
if(str != null && str != "") #要先檢查不爲null
- String.length() 方法返回採用UTF-15編碼表示的給定字符串所需要的代碼單元的數量。String.charAt(n) 將返回位置n的代碼單元。
- 構建字符串:使用 StringBuilder類——字符串構造器。當每次需要添加一部分內容時,就調用 append() 方法,在需要構建字符串就調用 toString()方法。
StringBuilder builder = new StringBuilder();
builder.append(ch);
String completedString = Builder.toString();
- 輸入輸出:要通過 console控制檯進行輸入,首先要構建一個 Scanner 對象,並與標準輸入流 (System.in) 關聯。
Scanner in = new Scanner(System.in);
nextLine() 方法將輸入一行,因爲在輸入行中可能有空白格們要想讀取一個單詞(以空白爲分隔符),就要使用 next() 方法。
String firstName = in.next();
可以使用靜態的 String.format()方法創建一個格式化的字符串。
String message = String.format("Hello, %s!", name);
printf()中日期和時間的格式化選項,以 t 開始,以日期與時間轉換符的任意字母結尾。同時,可使用一個格式化的字符串支出要被格式化的參數索引(從1開始),索引必須緊跟在 % 後,並以 $ 結束。同樣可以使用 < 指示前面格式說明中的參數將被再次使用。
printf("%tc", new Date()); #c表示完整的年月日
printf("%1$tB, %2$te, %3$tY", new Date()) #這行代碼有誤,僅作爲索引的介紹。
- 文件的輸入與輸出:要相對文件記性讀取,就要用一個 File 對象構造一個 Scanner 對象
Scanner in = new Scanner(Paths.get("myFile.txt"));
要寫入文件,就要構造一個 PrintWriter 對象,只需要提供文件名。如果文件不存在,則創建該文件。
PrintWriter out = new Printwriter("myFile.txt");
- 不能在嵌套的兩個塊(block)中聲明同名的變量。
- Java提供了一種帶標籤的 break 語句,用於跳出多重循環,標籤必須放在希望跳出的多層循環之前,並且緊跟一個冒號。智能跳出語句塊而不能跳進語句塊。
read_data;
while(...){
for(...){
if(...)
break read_data;
}
}
- 大數值:BigInteger 和 BigDecimal 兩個類處理包含任意長度數字序列的數值。使用靜態的 valueOf()方法可以將普通的數值轉換成大數值。
BigInteger a = BigInteger.valueOf(100);
不能使用算術運算符,而要使用大數類的add(), subtract(), multiply(), divide(), mod() 方法。其中使用 BigDecimal 類的 divide() 方法時必須給出四捨五入的方式(rounding mode)。 - 數組:聲明數組, 指出數組類型(數據元素類型緊跟[])和數組變量的名字
int[] a;
使用 new 運算符創建一個數組, 數組長度不要求是常量。允許數組長度爲 0,長度爲0和 null 是不同的。
int[] a = new int[100];
使用列表初始化數組的使用不需要調用 new
int[] a = {1, 2, 3, 4};
甚至可以初始化匿名數組, 在不創建新變量的情況下重新初始化一個數組。
a = new int[] {1, 2, 3, 4};
Java允許 數組拷貝, 兩個變量將引用同一個數組。
int[] b = a;
- for each 循環:for(elememt : collection) statement
可以一次處理數組中的每個元素而不必爲制定下標值擔心。collection 這一集合必須是一個數組,或者一個實現了 Iterable 接口的類對象。 - main()函數接受一個字符串數組,也就是命令行參數。
- Math.random() 方法將返回一個從0到1,左開右閉的隨機浮點數,用n乘以這個數就可以到的0 ~ n-1 之間的隨機數。