《Java核心技術 卷I》學習筆記2:資料型別、變數與常量

ALL禿發表於2020-11-01


Java是一種強型別語言,必須為每個變數宣告一種型別。在Java中,一共有8種基本型別,其中有4中整型、2種浮點型別、1中字元型別和一種boolean型別

1 資料型別

1.1 整型

型別儲存長度取值範圍
int4位元組-2 147 483 648~2 147 483 647
short2位元組-32768~32767
long8位元組-9 223 372 036 854 775 808 ~9 223 372 036 854 775 807
byte1位元組-128~127

長整型數值有一個字尾L或l(如4000000000L),十六進位制數值有一個字首0x或0X(如0xCAFE),八進位制有一個字首0。八進位制表示法比較容易混淆,所以最好不要使用八進位制常數。

從Java 7開始,可以用字首0b或0B表示二進位制數。此外,從Java 7開始,還可以為數字字面量加下劃線(如1_000_000),使數字更易讀,Java編譯器會去除這些下劃線,不會對程式產生影響。

1.2 浮點型別

型別儲存長度取值範圍
float4位元組大約±3.402 823 47E+38F(有效位數為6~7位)
double8位元組大約±1.797 693 134 862 315 70E+308(有效位數為15位)

float型別的數值有一個字尾F或f(如3.14F),沒有字尾F的浮點數值預設為double型別。也可以在double型別數值後面新增字尾D或d。

可以使用十六進位制表示浮點數值,尾數採用十六進位制,指數採用十進位制,指數的基數是2,尾數和指數之間用p分隔。例如,0.125=2-3,在十六進位制表示法中表示為0x1.0p-3,其中0x是十六進位制字首,1.0是尾數,-3是指數。

1.3 char型別

char型別的字面值要用單引號括起來,如’A’是一個字元常量,而"A"是一個字串。

char型別的值可以表示為十六進位制值,其範圍從\u0000到\uFFFF。\u是一個轉義序列,後面跟四位十六進位制數,表示一個字元。除此之外,還有一些用於表示特殊字元的轉義序列,如下表所示。

轉義序列名稱Unicode值
\b退格\u0008
\t製表\u0009
\n換行\u000a
\r回車\u000d
\"雙引號\u0022
\’單引號\u0027
\\反斜槓\u005c

所有這些轉義序列都可以出現在加引號的字元字面量或字串中,例如’\u2122’和"Hello\n"。

轉義序列\u還可以出現在加引號的字元常量或字串之外,而其他所有轉義序列不可以。例如:

public static void main(String\u005B\u005D args)

這種寫法符合語法規則,\u005B和\u005D分別是’[‘和’]'的編碼。

一定要當心註釋中的\u。例如:

// \u000A is a newline
錯誤,因為\u000A是換行符,之後的所有內容在下一行,不屬於註釋內容

// look inside c:\users
錯誤,因為\u後面沒有跟著四位十六進位制數。正確的寫法為c:\\users,\\是轉義序列,表示反斜槓

1.4 Unicode編碼與char型別

碼點(code point)是指與一個編碼表中的某個字元對應的程式碼值。在Unicode標準中,碼點採用16進位制書寫,並加上字首“U+”,例如“U+0041”是“A”的碼點。Unicode的碼點可分為17個程式碼平面(code plane)。第一個程式碼平面稱為基本多語言平面,包括碼點從U+0000到U+FFFF的“經典”Unicode程式碼;其餘16個平面的碼點從U+10000到U+10FFFF,包括輔助字元

UTF-16編碼採用不同長度的編碼表示所有Unicode碼點。在基本多語言平面中,每個字元用16位表示,通常稱為程式碼單元(code unit);而輔助字元編碼為一對連續的程式碼單元,即32位。輔助字元的兩個程式碼單元取值落入基本多語言平面中未用的2048個值範圍內,通常稱為替代區域。這樣,對於任意給定的一個程式碼單元,可以迅速確定它是一個字元的編碼,還是一個輔助字元的第一部分或第二部分。

在Java中,char型別描述了UTF-16編碼中的一個程式碼單元。對於基本多語言平面中的字元,只需要1個char值;而輔助字元則需要2個char值。對於一個單獨的char值,當它代表輔助字元中的一個程式碼單元時,對它的解釋將沒有意義。因此,最好不要在程式中使用char型別,除非需要處理UTF-16程式碼單元。

1.5 boolean型別

boolean型別有兩個值:false和true,用來判定邏輯條件。整型值和布林值之間不能進行相互轉換

2 變數與常量

2.1 變數

宣告變數時,先指定變數的型別,然後是變數名。例如:

double salary;
int vacationDays;
long earthPopulation;
boolean done;

變數名必須是一個以字母開頭並由字母或數字構成的序列。變數名中所有的字元都有意義,並且大小寫敏感。

宣告一個變數之後,必須用賦值語句對變數進行顯示初始化,千萬不要使用未初始化的變數的值

變數的宣告儘可能地靠近變數第一次使用的地方,這是一種良好的程式碼風格。

從Java 10開始,對於區域性變數,如果可以從變數的初始值推斷出它的型別,就不再需要宣告型別,只需要使用關鍵字var而無需指定型別。例如:

var vacationDays = 12;
var greeting = "Hello";

2.2 常量

在Java中,使用關鍵字final指示常量。例如:

final double CM_PER_INCH = 2.54;

常量只能被賦值一次,一旦被賦值後,就不能再更改了。習慣上,常量名使用全大寫。

可以在類中使用關鍵字static final設定類常量,這樣就可以在類的多個方法中使用這個常量。例如:

public class Constant
{
	public static final double CM_PER_INCH = 2.54;
}

相關文章