Java培訓教程分享:變數與常量

千鋒武漢發表於2021-06-15

  在程式執行過程中,其值不能被改變的量稱為常量,其值能被改變的量稱為變數。變數與常量在編寫程式中需要經常使用,本節將詳細介紹變數與常量的使用方法。

   識別符號

  識別符號(identifier)用於命名變數、常量、方法、類、包等實體。

  識別符號命名規則:

  識別符號是由字母、數字、下劃線“_”、美元符號“$”組成的字元序列。

  識別符號必須以字母、下劃線“_”、美元符號“$”開頭,不能以數字開頭。

  識別符號不能是關鍵字和保留字。

  識別符號不能包含空格。

  例如,$6,name,Class,java,_pwd都是合法的識別符號,而2a,class,c++,hello world,a@都是非法的識別符號,不符合識別符號命名規則。Java編譯器會檢測出非法識別符號並報錯。

   變數的定義

  變數的使用是程式設計中一個十分重要的環節,定義變數就是告訴編譯器這個變數的資料型別,這樣編譯器才知道需要配置多少記憶體空間給它,以及它能存放什麼樣的資料。在程式執行過程中,空間內的值是變化的,這個記憶體空間就稱為變數。為了便於操作,給這個空間取個名字,稱為變數名。變數的命名必須是合法的識別符號。記憶體空間內的值就是變數值,在宣告變數時可以是沒有賦值,也可以是直接賦給初值。

  宣告變數的語法格式如下:

  資料型別 變數名;

  如需宣告多個相同型別變數時,可使用下面的語法格式:

  資料型別 變數名1,變數名2,…,變數名n;

  接下來,透過具體的程式碼學習變數的定義,具體示例如下:

  int n,q=1; // 定義了二個int型別的變數,為q賦初值為1

  double x, y, z; // 定義了三個double型別的變數

  對於變數的命名並不是任意的,應遵循以下4條規則:

  (1)變數名必須是一個有效的識別符號。

  (2)變數名不可以使用Java關鍵字。

  (3)變數名不能重複。

  (4)應選擇較有意義的單詞作為變數名。

   變數的型別轉換

  Java的資料型別在定義時就已經明確了,但程式中有時需要進行資料型別的轉換,Java允許使用者有限度地進行資料型別轉換。資料型別轉換方式分為自動型別轉換和強制型別轉換兩種。

   1.自動型別轉換

  自動型別轉換也稱隱式型別轉換,指兩種資料型別轉換過程中不需要顯式地進行宣告。Java會在下列的條件成立時,自動做資料型別的轉換:

  (1)轉換的兩種資料型別彼此相容。

  (2)目標資料型別的取值範圍比原型別大。

  型別轉換隻限該行語句,並不會影響原先定義的變數型別,而且自動型別轉換可以保持資料的精確度,不會因為轉換而丟失資料內容。

  Java支援自動型別轉換的型別,如圖所示。

1

  圖2.1 自動資料型別轉換圖

  自動型別轉換示例說明如下:

  byte b = 97; // 宣告byte型變數值為97

  char c = b; // 錯誤,byte型別不能自動型別轉換為char型別

  float f = b; // 正確,byte型別能自動型別轉換為float型別

  double d = 'c'; // 正確,char型別能自動型別轉換為double型別

  在Java中,任何基本型別的值和字串進行連結運算“+”時,基本型別的值將自動型別轉換為字串型別,字串用String類表示,是引用型別。具體示例如下:

  String s = 97; // 錯誤,不能直接將基本型別賦值給字串

  String str = 97 + ""; // 正確,基本型別的值自動轉換為字串,""代表空字串

   2.強制型別轉換

  強制型別轉換也稱為顯式轉換,指兩種資料型別轉換過程中需要顯式地進行宣告。當轉換的兩種資料型別彼此不相容,或者目標資料型別的取值範圍小於原型別時,而無法進行自動型別轉換,此時就需要進行強制型別轉換,如例2-1所示。

  例2-1 TestTypeCast.java

  1 public class TestTypeCast {

  2 public static void main(String[] args) {

  3 int n = 128;

  4 byte b = n;

  5 System.out.println(b);

  6 }

  7 }

  程式的執行結果如圖所示。

2

  圖2.2 例2-1執行結果

  圖2.9出現了編譯錯誤,提示第4行程式碼型別不相容,出現這樣錯誤的原因是將int轉換到byte時,int型別的取值範圍大於byte型別的取值範圍,轉換會導致精度損失,也就是用1個位元組的變數來儲存4個位元組的變數值。

  對第4行程式碼進行強制型別轉換,修改為下面的程式碼:

  byte b = (byte) n;

  程式的執行結果如圖所示。

3

  圖2.3 例2-1修改後執行結果

  當試圖強制把取值範圍大的型別轉換為取值範圍小的型別時,將會引起溢位,從而導致資料丟失。圖2.10中執行結果為-128,出現這種現象的原因是,int型別佔4個位元組,byte型別佔1個位元組,將int型別變數強制轉換為byte型別時,Java會將int型別變數的3個高位位元組截斷,直接丟棄,變數值發生了改變,如圖所示。

4

  圖2.4 強制轉換過程

   變數的作用域

  變數的作用域是指它的作用範圍,只有在這個範圍內,程式程式碼才能訪問它。變數宣告在程式中的位置決定了變數的作用域。變數一定會宣告在一對大括號中,該大括號所包含的程式碼區域就是這個變數的作用域,下面透過一個示例來分析變數的作用域。如例2-2所示

  例2-2 TestScope.java

  1 public class TestScope {

  2 public static void main(String[] args) {

  3 int x = 100; // 定義變數x

  4 {

  5 int y = 200; // 定義變數y

  6 }

  7 System.out.println(y); // 訪問變數y

  8 }

  9 }

  程式的執行結果如圖所示。

5

  圖2.5 例2-2編譯報錯

  圖2.12出現了編譯錯誤,提示“找不到符號”。報錯的原因在於,定義的變數y超出了作用域。將第7行程式碼放置在第5行程式碼之後,再次編譯程式不再報錯,程式的執行結果如圖所示。

6

  圖2.6 例2-2執行結果

   常量

  常量就是一個固定的值,是不能被改變的資料。Java程式中使用的直接量稱為常量,是在程式中透過原始碼直接給出的值,在程式執行過程中都不會改變,也稱最終量。

   1.整型常量

  整型常量是整數型別的資料,可分為二進位制、八進位制、十進位制和十六進位制4種,具體表示如下:

  二進位制:由數字0和1組成,用0b或0B開頭的字面值,如0b110、0B110。

  八進位制:由數字[0, 7]範圍內的整陣列成,用0開頭的字面值,如0110。

  十進位制:由數字[0, 9]範圍內的整陣列成的字面值,如110。

  十六進位制:由數字[0, 9]和字元[A, F]範圍內組成,用0x或0X開頭的字面值,如0x12、0XAbA。

   2.浮點數常量

  浮點數就是實數,包含有小數點,可以用標準小數形式和科學計數法形式兩種方式表示,具體表示如下:

  標準小數:由整數部分、小數點和小數部分構成,如1.5、2.2。

  科學計數法:由一個標準式加上一個以10為底的冪構成,兩者間用e或E隔開,如1.2e+6、5E-8。

  在Java中,分為float單精度浮點數和double雙精度浮點數兩種型別,單精度浮點數以f或F結尾,雙精度浮點數以d或D結尾。不加字尾會預設為double雙精度浮點數。

   3.字元常量

  字元常量有三種形式,具體表示如下:

  用單引號括起來的字元。如'a'、'0'。

  跳脫字元。如'\n'、'\t'、'\0'。

  用Unicode值表示的字元,格式是'\uXXXX',其中XXXX代表一個十六進位制的整數。如'\u0000'。

   4.字串常量

  字串常量就是用雙引號括起來的字元序列。如"歡迎學習Java"、"A"。

   5.布林常量

  布林常量就是布林型別的兩個值true和false,用於表示真和假。

   6.null常量

  null常量只有一個值null,表示物件引用為空。

   多學一招:跳脫字元

  Java定義了一種特殊的標記來表示特殊字元,這種標記稱為轉義序列,轉義序列由(\)後面加上一個字元或者一些數字位組成。如\t表示Tab字元的轉義符,\u000A表示換行符\n。轉義序列中的序列號作為一個整體翻譯,而不是分開翻譯。一個轉義序列被當做一個字元。

   常用的轉義序列如下:

  \b,退格鍵,Unicode碼為\u0008。

  \t,Tab鍵,Unicode碼為\u0009。

  \n,換行符,Unicode碼為\u000A。

  \r,回車符,Unicode碼為\u000D。

  反斜槓\被稱為跳脫字元,它是一個特殊字元。有特殊意義的字元,無法直接表示,需要用轉義序列來表示。

  \',單引號字元,Java中單引號表示字元的開始和結束,直接寫單引號字元('),編譯器會匹配前兩個是一對,會報錯,所以需要使用跳脫字元\'。

  \",雙引號字元,Java中雙引號表示字串的開始和結束,要顯示雙引號需要使用跳脫字元\",如"歡迎學習\"Java\""。

  \\,反斜槓字元,Java中的反斜槓是跳脫字元,要顯示反斜槓,需要使用跳脫字元\\。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2776715/,如需轉載,請註明出處,否則將追究法律責任。

相關文章