一:語法細節java
1. Java中的命名規則:瀏覽器
2. import和import static緩存
示例:大數據
3. println和printspa
4. Java訪問權限修飾符3d
每一個編譯單元(即一個.java文件)都只能有一個public類,表示每個編譯單元都有一個單一的公共接口,用public類來展示。對象
5. final關鍵字blog
二:基本數據類型繼承
基本類型接口 |
大小 |
初始值 |
包裝類 |
最小值 |
最大值 |
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. 用於高精度計算的類:
(定點數:指參與運算的數的小數點位置固定不變)
能做用於 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
2. 帶標籤的break和continue
用法示例:
使用帶標籤的 break / continue 的緣由是:爲了跳出或從新開始多層嵌套循環。
3. switch
switch 語句能夠用於實現多路選擇,可是要注意 break 穿刺問題(即若是上一個 case 裏沒有 break 語句,則該 case 執行完成後會順勢執行下一個 case 語句塊)。