一:語法細節
1. Java中的命名規則:
- package:統一使用小寫字母
- class:首字母大寫,使用駝峰標識
- method:首字母小寫,使用駝峰標識
- field:首字母小寫,使用駝峰標識
- static field:統一使用大寫字母,並用下划線分割單詞
2. import和import static
- import com.xxx:常規導入某個包下的類
- import static com.xxx:會導入某個包下的類的所有靜態方法,這樣之后再使用該類的靜態方法時,可以直接使用方法名調用,而不必使用 類名.方法名 來調用靜態方法
示例:
3. println和print
- System.out.println:在下次打印時自動換行
- System.out.print:在下次打印時不自動換行
4. Java訪問權限修飾符
每個編譯單元(即一個.java文件)都只能有一個public類,表示每一個編譯單元都有一個單一的公共接口,用public類來展現。
5. final關鍵字
- final 修飾的基本數據類型一旦初始化則數值恆定不變
- final 修飾的對象引用表示:該引用一旦被初始化指向某個對象,就無法再將它改變為指向另一個對象(注意引用指向的對象自身是可以改變的)
- final 修飾的類不允許被任何子類繼承
- final 修飾的方法將會被鎖定,任何子類都無法修改它
- 聲明為 final 的域可以在一開始不給定初值,但是編譯器會確保該域在使用前必須初始化
- 由 static final 修飾的域將會占據一段不能改變的存儲空間
二:基本數據類型
基本類型 |
大小 |
初始值 |
包裝類 |
最小值 |
最大值 |
boolean |
- |
false |
Boolean |
- |
- |
char |
16-bit |
'\u0000' |
Character |
‘\u0000’ (0) |
‘\uffff’ (65535) |
byte |
8-bit |
0 |
Byte |
-128 |
127 |
short |
16-bit |
0 |
Short |
- 2^15 (負的2的15次方) |
2^15 - 1
|
int |
32-bit |
0 |
Integer |
- 2^31 |
2^31 - 1 |
float |
32-bit |
0.0f |
Float |
IEEE754 |
IEEE754 |
double |
64-bit |
0.0d |
Double |
IEEE754 |
IEEE754 |
long |
64-bit |
0L |
Long |
- 2^63 |
2^63 - 1 |
1. 創建基本數據類型不需要 new 操作符。
2. 當基本類型變量作為類的成員變量使用時,才會在初始化時被賦予初值;作為方法體中的局部變量時,則必須要被初始化才能使用。
3. 對象引用的默認初始值為null。
4. float / double 轉換為整型時,總是對該數字執行截尾操作(四舍五入效果實現需要使用 java.lang.Math.round() 方法)。
5. 用於高精度計算的類:
- BigInteger(支持任意大小的整數值)
- BigDecimal(支持任意精度的定點數)
(定點數:指參與運算的數的小數點位置固定不變)
能作用於 int / float 的操作同樣也能作用於 BigInteger / BigDecimal,只是 BigInteger / BigDecimal 需以方法調用的方式使用,而不是以運算符的形式來使用。
6. 基本類型之間比較是否相同可以直接使用“==”;
對象之間比較是否相同需要使用 equals() 方法;對象之間如果使用“==”操作符比較,實際比較的是兩個對象的引用地址。
7. 算術運算中,表達式中出現的最大數據類型決定了表達式最終結果的數據類型(比如:一個float值與一個double值相乘,結果值是double類型);
char / byte/ short 中任意一個或一個以上進行算術運算(如 ’a’+’b’ ),都會獲得一個 int 型的結果;
從較大范圍的類型向較小范圍的類型轉換時,可能引發某些信息的丟失。
三:Java中對象的四種引用類型
1. StrongReference -- 強引用
強引用是最普遍的引用,垃圾回收器不會回收強引用的對象;當內存空間不足時,JVM 寧願拋出 OutOfMemoryError 也不會回收強引用對象以釋放部分內存空間;
(現在的JVM垃圾回收機制其實已經足夠智能,不必特意在o無用時將其手動置為null)
2. SoftReference -- 軟引用
如果一個對象只具有軟引用,則:
- 當內存空間足夠時,垃圾回收器不會回收該對象;
- 當內存空間不足時,垃圾回收器就會回收該對象;
使用場景:軟引用可以用來實現內存敏感的高速緩存:
例如:瀏覽器中的后退按鈕按下時,之前的網頁內容是應該重新獲取還是從緩存中取出呢?
如果一個網頁在瀏覽結束時就進行內容的回收,則每次按后退按鈕時都要重新構建之前的頁面內容;如果將瀏覽過的網頁都存儲在內存(緩存)中,會造成大量的資源浪費;這時候就可以考慮使用軟引用來指向過去瀏覽過的網頁內容。
3. WeakReference -- 弱引用
弱引用與軟引用區別:只具有弱引用的對象擁有更短的生命周期;當垃圾回收器掃描到只具有弱引用的對象時,無論當前內存空間是否足夠,都會回收它;
使用場景:一個對象只是偶爾使用,希望在使用時能隨時獲取,但也不想影響對該對象的垃圾收集,則可以考慮使用弱引用來指向該對象。
4. PhantomReference -- 虛引用
虛引用不會決定對象的生命周期,如果一個對象僅僅持有虛引用,那它就像沒有任何引用一樣,隨時可能被垃圾收集器回收;
虛引用必須和引用隊列聯合使用,主要用來跟蹤對象被垃圾收集器回收的活動過程。
5. 對比
StrongReference(強引用) > SoftReference(軟引用) > WeakReference(弱引用) > PhantomReference(虛引用)
四:關於方法的一些細節
1. 重載方法與重寫方法
a)重載方法(Overload)
多用於同一個類中;
- 重載方法的方法名完全相同,參數列表不同
- 返回值不能參與區分重載方法
b)重寫方法(Overwrite)
多用於繼承父類的子類或接口實現類中;
- 重寫方法中,子類的方法名、參數列表、返回值、訪問修飾符應該與父類中的完全一致
2. 在沒有為類提供構造器的情況下,編譯器會自動為該類添加一個默認構造器;但是一旦為類指定了構造器,則編譯器就不會再自動添加默認構造器了。
3. 方法的方法名和參數列表組合起來作為“方法的特征簽名”,唯一的標識出某個方法;
4. static 的域或方法不跟類的對象綁定,可以通過類名或方法名直接調用(不能在 static 方法中調用非靜態方法);
非static 的域或方法必須通過類的對象來調用;
static 關鍵字不能用於局部變量。
5. 在方法體的傳入參數中:基本數據類型在傳遞時是值傳遞(傳遞原值的拷貝值),對象在傳遞時是引用傳遞。
6. 方法體內的局部變量存儲在方法棧中,類的成員變量存儲在堆中。
7. 可變參數列表
語法格式:MethodName(類型… 參數名稱)
使用示例:
五:控制語句
1. break和continue
- break:用於強行退出當前循環
- continue:用於停止本次迭代,然后返回起始處開始下一次迭代
2. 帶標簽的break和continue
- break outer:中斷當前循環並跳出標簽所指的循環
- continue outer:重新跳到標簽的位置,並開始標簽之后聲明的循環
用法示例:
使用帶標簽的 break / continue 的原因是:為了跳出或重新開始多層嵌套循環。
3. switch
switch 語句可以用於實現多路選擇,但是要注意 break 穿刺問題(即如果上一個 case 里沒有 break 語句,則該 case 執行完成后會順勢執行下一個 case 語句塊)。