Java基礎中一些容易被忽視的語法小細節總結

一:語法細節java

1. Java中的命名規則:瀏覽器

  • package:統一使用小寫字母
  • class:首字母大寫,使用駝峯標識
  • method:首字母小寫,使用駝峯標識
  • field:首字母小寫,使用駝峯標識
  • static field:統一使用大寫字母,並用下劃線分割單詞

2. import和import static緩存

  • import com.xxx:常規導入某個包下的類
  • import static com.xxx:會導入某個包下的類的全部靜態方法,這樣以後再使用該類的靜態方法時,能夠直接使用方法名調用,而沒必要使用 類名.方法名 來調用靜態方法

示例:大數據

clip_image001[5]

3. println和printspa

  • System.out.println:在下次打印時自動換行
  • System.out.print:在下次打印時不自動換行

4. Java訪問權限修飾符3d

clip_image001[7]

每一個編譯單元(即一個.java文件)都只能有一個public類,表示每個編譯單元都有一個單一的公共接口,用public類來展示。對象

5. final關鍵字blog

  • 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 -- 強引用

clip_image001

強引用是最廣泛的引用,垃圾回收器不會回收強引用的對象;當內存空間不足時,JVM 寧願拋出 OutOfMemoryError 也不會回收強引用對象以釋放部份內存空間;

強引用對象 o 不使用時能夠經過以下方式弱化引用:clip_image002

(如今的JVM垃圾回收機制其實已經足夠智能,沒必要特地在o無用時將其手動置爲null)

 

2. SoftReference -- 軟引用

clip_image001[4]

若是一個對象只具備軟引用,則:

  • 當內存空間足夠時,垃圾回收器不會回收該對象;
  • 當內存空間不足時,垃圾回收器就回收該對象;

使用場景:軟引用能夠用來實現內存敏感的高速緩存:

例如:瀏覽器中的後退按鈕按下時,以前的網頁內容是應該從新獲取仍是從緩存中取出呢?

若是一個網頁在瀏覽結束時就進行內容的回收,則每次按後退按鈕時都要從新構建以前的頁面內容;若是將瀏覽過的網頁都存儲在內存(緩存)中,會形成大量的資源浪費;這時候就能夠考慮使用軟引用來指向過去瀏覽過的網頁內容。

 

3. WeakReference -- 弱引用

clip_image001[6]

弱引用與軟引用區別:只具備弱引用的對象擁有更短的生命週期;當垃圾回收器掃描到只具備弱引用的對象時,不管當前內存空間是否足夠,都會回收它;

使用場景:一個對象只是偶爾使用,但願在使用時能隨時獲取,但也不想影響對該對象的垃圾收集,則能夠考慮使用弱引用來指向該對象。

 

4. PhantomReference -- 虛引用

虛引用不會決定對象的生命週期,若是一個對象僅僅持有虛引用,那它就像沒有任何引用同樣,隨時可能被垃圾收集器回收;

虛引用必須和引用隊列聯合使用,主要用來跟蹤對象被垃圾收集器回收的活動過程。

 

5. 對比

StrongReference(強引用) > SoftReference(軟引用) > WeakReference(弱引用) > PhantomReference(虛引用)

clip_image001[8]

 

 

四:關於方法的一些細節

1. 重載方法與重寫方法

a)重載方法(Overload)

     多用於同一個類中;

  • 重載方法的方法名徹底相同參數列表不一樣
  • 返回值不能參與區分重載方法

b)重寫方法(Overwrite)

     多用於繼承父類的子類或接口實現類中;

  • 重寫方法中,子類的方法名、參數列表、返回值、訪問修飾符應該與父類中的徹底一致

2. 在沒有爲類提供構造器的狀況下,編譯器會自動爲該類添加一個默認構造器;可是一旦爲類指定了構造器,則編譯器就不會再自動添加默認構造器了。

3. 方法的方法名參數列表組合起來做爲「方法的特徵簽名」,惟一的標識出某個方法;

4. static 的域或方法不跟類的對象綁定,能夠經過類名或方法名直接調用(不能在 static 方法中調用非靜態方法);

    非static 的域或方法必須經過類的對象來調用;

    static 關鍵字不能用於局部變量。

5. 在方法體的傳入參數中:基本數據類型在傳遞時是值傳遞(傳遞原值的拷貝值),對象在傳遞時是引用傳遞

6. 方法體內的局部變量存儲在方法棧中,類的成員變量存儲在堆中。

7. 可變參數列表

語法格式:MethodName(類型… 參數名稱)

使用示例:

clip_image001[3]

 

 

五:控制語句

1. break和continue

  • break:用於強行退出當前循環
  • continue:用於中止本次迭代,而後返回起始處開始下一次迭代

2. 帶標籤的break和continue

  • break outer:中斷當前循環並跳出標籤所指的循環
  • continue outer:從新跳到標籤的位置,並開始標籤以後聲明的循環

用法示例:

clip_image001[1]

使用帶標籤的 break / continue 的緣由是:爲了跳出或從新開始多層嵌套循環

3. switch

switch 語句能夠用於實現多路選擇,可是要注意 break 穿刺問題(即若是上一個 case 裏沒有 break 語句,則該 case 執行完成後會順勢執行下一個 case 語句塊)。

相關文章
相關標籤/搜索