JVM:java virtual machine
JRE:java runtime environment = JVM + java系統類庫,運行java程序
JDK:java development kit = JRE + 編譯/運行等命令工具
運行java的最小環境:JRE
開發java的最小環境:JDK
環境變量: JAVA_HOME: Path for jdk
CLASS_PATH: Path to search for Class, '.' default
PATH: Path for /jdk/bin
Development Steps:
new Java project
new Java package
new Java class
當且僅當運算數中有long時,運算結果纔是long
long dis1 = 1000000000*100000000L; //no overflow, 100000000000000000
long dis2 = 1000000000*100000000; //overflow, 1569325056
運算從前向後進行,所以最好是第一個數字是Long
long dis1 = 100000000*10000000000*10000000L; //overflow,-15304949760000000
long dis2 = 100000000L*100000000000*10000000; //no overflow,1864712049423024128
System.time.currentTimeMillis: Milliseconds from start of 1970
Default type of decimal is double. For float constant a 'f' or 'F' is required.
浮點數會產生舍入誤差,因爲二進制表示有誤差。完全不能接收誤差的,使用BigDecimal
數據從小到大自動轉換,從大到小強制轉換
邏輯運算是短路的
加法運算符是從前向後的,所以
System.out.println(11+22+""); //輸出33
System.out.println(""+11+22); //輸出1122
變量作用域:到下面一個大括號。
相同作用域中不能有重名變量
switch語句:
優點:簡介快速
缺點:只能判斷整數相等
while和do-while:是否至少執行一次
返回每月天數的函數
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 2:
return 28;
default:
return 30;
}
Math.random(); 0-1之間的隨機數
數組arr = {1,2,3};只能用於初始化
數組訪問:arr.length
數組的複製:System.arraycopy(src, srcPos, dest, destPos, length);
b = Arrays.copyOf(original, newLength),多出來的length補默認值0
數組擴容:使用Arrays.copyOf方法進行擴容
方法的簽名:方法名+參數類型
方法重載的意義:降低用戶的使用負擔,對於用戶而言更加優雅
補充:
同一個文件中能夠包含多個類,並列關係
public修飾的類只能有一個,且必須與文件名相同
構造方法特點:
給成員變量賦值
構造方法必須與類名相同
沒有返回類型
默認提供,如果自己提供了,則沒有默認的無參構造方法
this:只能用在類的非靜態方法中,指當前對象
this的用法:
this.variable:訪問成員變量
this.function:一般不用
如果構造函數出入的形參名字和成員變量一樣,那麼必須用this調用成員變量
技巧:可以使用this()調用本類的構造函數,實現不同構造函數
內存管理:JVM進行
堆:對象和成員變量
棧:局部變量
方法區:.class字節碼文件(包括方法)
基本類型的等號是直接賦值
對象名的等號是複製引用,指向同一個文件,並非在拷貝對象,只是在拷貝引用
空指針異常:
Student[] s = new Student[5];
System.out.println(s[0]);
定義了一個Student類的數組,每個都指向null
也可以給引用類型的數組按下列語法賦值:
Student[] student = new Student[]{
new Student(name, age, address),
new Student(name, age, address),
new Student(name, age, address),
}
Java中,一個類只具有一個父類,不能繼承多個父類。即不支持多繼承
繼承具有傳遞性
java規定:構造子類之前,必須先構造父類
如果子類中沒有調用父類的構造方法,則默認super調用父類的無參構造方法
否則如果手動調用了super,則不默認調用
super的用法:
super.成員變量名
super.方法名
super()調用父類的構造方法
幫助理解的例子:studnet繼承person,則在student中賦值:
this.studentid = 1120172954
super.name = "William"
(但是,其實用this.studentid也可以修改該屬性)