Java培训教程分享:变量与常量
在程序執(zhí)行過(guò)程中,其值不能被改變的量稱為常量,其值能被改變的量稱為變量。變量與常量在編寫程序中需要經(jīng)常使用,本節(jié)將詳細(xì)介紹變量與常量的使用方法。
標(biāo)識(shí)符
標(biāo)識(shí)符(identifier)用于命名變量、常量、方法、類、包等實(shí)體。
標(biāo)識(shí)符命名規(guī)則:
標(biāo)識(shí)符是由字母、數(shù)字、下劃線“_”、美元符號(hào)“$”組成的字符序列。
標(biāo)識(shí)符必須以字母、下劃線“_”、美元符號(hào)“$”開(kāi)頭,不能以數(shù)字開(kāi)頭。
標(biāo)識(shí)符不能是關(guān)鍵字和保留字。
標(biāo)識(shí)符不能包含空格。
例如,$6,name,Class,java,_pwd都是合法的標(biāo)識(shí)符,而2a,class,c++,hello world,a@都是非法的標(biāo)識(shí)符,不符合標(biāo)識(shí)符命名規(guī)則。Java編譯器會(huì)檢測(cè)出非法標(biāo)識(shí)符并報(bào)錯(cuò)。
變量的定義
變量的使用是程序設(shè)計(jì)中一個(gè)十分重要的環(huán)節(jié),定義變量就是告訴編譯器這個(gè)變量的數(shù)據(jù)類型,這樣編譯器才知道需要配置多少內(nèi)存空間給它,以及它能存放什么樣的數(shù)據(jù)。在程序運(yùn)行過(guò)程中,空間內(nèi)的值是變化的,這個(gè)內(nèi)存空間就稱為變量。為了便于操作,給這個(gè)空間取個(gè)名字,稱為變量名。變量的命名必須是合法的標(biāo)識(shí)符。內(nèi)存空間內(nèi)的值就是變量值,在聲明變量時(shí)可以是沒(méi)有賦值,也可以是直接賦給初值。
聲明變量的語(yǔ)法格式如下:
數(shù)據(jù)類型 變量名;
如需聲明多個(gè)相同類型變量時(shí),可使用下面的語(yǔ)法格式:
數(shù)據(jù)類型 變量名1,變量名2,…,變量名n;
接下來(lái),通過(guò)具體的代碼學(xué)習(xí)變量的定義,具體示例如下:
int n,q=1; // 定義了二個(gè)int類型的變量,為q賦初值為1
double x, y, z; // 定義了三個(gè)double類型的變量
對(duì)于變量的命名并不是任意的,應(yīng)遵循以下4條規(guī)則:
(1)變量名必須是一個(gè)有效的標(biāo)識(shí)符。
(2)變量名不可以使用Java關(guān)鍵字。
(3)變量名不能重復(fù)。
(4)應(yīng)選擇較有意義的單詞作為變量名。
變量的類型轉(zhuǎn)換
Java的數(shù)據(jù)類型在定義時(shí)就已經(jīng)明確了,但程序中有時(shí)需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,Java允許用戶有限度地進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。數(shù)據(jù)類型轉(zhuǎn)換方式分為自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換兩種。
1.自動(dòng)類型轉(zhuǎn)換
自動(dòng)類型轉(zhuǎn)換也稱隱式類型轉(zhuǎn)換,指兩種數(shù)據(jù)類型轉(zhuǎn)換過(guò)程中不需要顯式地進(jìn)行聲明。Java會(huì)在下列的條件成立時(shí),自動(dòng)做數(shù)據(jù)類型的轉(zhuǎn)換:
(1)轉(zhuǎn)換的兩種數(shù)據(jù)類型彼此兼容。
(2)目標(biāo)數(shù)據(jù)類型的取值范圍比原類型大。
類型轉(zhuǎn)換只限該行語(yǔ)句,并不會(huì)影響原先定義的變量類型,而且自動(dòng)類型轉(zhuǎn)換可以保持?jǐn)?shù)據(jù)的精確度,不會(huì)因?yàn)檗D(zhuǎn)換而丟失數(shù)據(jù)內(nèi)容。
Java支持自動(dòng)類型轉(zhuǎn)換的類型,如圖所示。
圖2.1 自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換圖
自動(dòng)類型轉(zhuǎn)換示例說(shuō)明如下:
byte b = 97; // 聲明byte型變量值為97
char c = b; // 錯(cuò)誤,byte類型不能自動(dòng)類型轉(zhuǎn)換為char類型
float f = b; // 正確,byte類型能自動(dòng)類型轉(zhuǎn)換為float類型
double d = ‘c’; // 正確,char類型能自動(dòng)類型轉(zhuǎn)換為double類型
在Java中,任何基本類型的值和字符串進(jìn)行鏈接運(yùn)算“+”時(shí),基本類型的值將自動(dòng)類型轉(zhuǎn)換為字符串類型,字符串用String類表示,是引用類型。具體示例如下:
String s = 97; // 錯(cuò)誤,不能直接將基本類型賦值給字符串
String str = 97 + “”; // 正確,基本類型的值自動(dòng)轉(zhuǎn)換為字符串,""代表空字符串
2.強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換也稱為顯式轉(zhuǎn)換,指兩種數(shù)據(jù)類型轉(zhuǎn)換過(guò)程中需要顯式地進(jìn)行聲明。當(dāng)轉(zhuǎn)換的兩種數(shù)據(jù)類型彼此不兼容,或者目標(biāo)數(shù)據(jù)類型的取值范圍小于原類型時(shí),而無(wú)法進(jìn)行自動(dòng)類型轉(zhuǎn)換,此時(shí)就需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,如例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 }
程序的運(yùn)行結(jié)果如圖所示。
圖2.2 例2-1運(yùn)行結(jié)果
圖2.9出現(xiàn)了編譯錯(cuò)誤,提示第4行代碼類型不兼容,出現(xiàn)這樣錯(cuò)誤的原因是將int轉(zhuǎn)換到byte時(shí),int類型的取值范圍大于byte類型的取值范圍,轉(zhuǎn)換會(huì)導(dǎo)致精度損失,也就是用1個(gè)字節(jié)的變量來(lái)存儲(chǔ)4個(gè)字節(jié)的變量值。
對(duì)第4行代碼進(jìn)行強(qiáng)制類型轉(zhuǎn)換,修改為下面的代碼:
byte b = (byte) n;
程序的運(yùn)行結(jié)果如圖所示。
圖2.3 例2-1修改后運(yùn)行結(jié)果
當(dāng)試圖強(qiáng)制把取值范圍大的類型轉(zhuǎn)換為取值范圍小的類型時(shí),將會(huì)引起溢出,從而導(dǎo)致數(shù)據(jù)丟失。圖2.10中運(yùn)行結(jié)果為-128,出現(xiàn)這種現(xiàn)象的原因是,int類型占4個(gè)字節(jié),byte類型占1個(gè)字節(jié),將int類型變量強(qiáng)制轉(zhuǎn)換為byte類型時(shí),Java會(huì)將int類型變量的3個(gè)高位字節(jié)截?cái)?#xff0c;直接丟棄,變量值發(fā)生了改變,如圖所示。
圖2.4 強(qiáng)制轉(zhuǎn)換過(guò)程
變量的作用域
變量的作用域是指它的作用范圍,只有在這個(gè)范圍內(nèi),程序代碼才能訪問(wèn)它。變量聲明在程序中的位置決定了變量的作用域。變量一定會(huì)聲明在一對(duì)大括號(hào)中,該大括號(hào)所包含的代碼區(qū)域就是這個(gè)變量的作用域,下面通過(guò)一個(gè)示例來(lái)分析變量的作用域。如例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); // 訪問(wèn)變量y
8 }
9 }
程序的運(yùn)行結(jié)果如圖所示。
圖2.5 例2-2編譯報(bào)錯(cuò)
圖2.12出現(xiàn)了編譯錯(cuò)誤,提示“找不到符號(hào)”。報(bào)錯(cuò)的原因在于,定義的變量y超出了作用域。將第7行代碼放置在第5行代碼之后,再次編譯程序不再報(bào)錯(cuò),程序的運(yùn)行結(jié)果如圖所示。
圖2.6 例2-2運(yùn)行結(jié)果
常量
常量就是一個(gè)固定的值,是不能被改變的數(shù)據(jù)。Java程序中使用的直接量稱為常量,是在程序中通過(guò)源代碼直接給出的值,在程序執(zhí)行過(guò)程中都不會(huì)改變,也稱最終量。
1.整型常量
整型常量是整數(shù)類型的數(shù)據(jù),可分為二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制4種,具體表示如下:
二進(jìn)制:由數(shù)字0和1組成,用0b或0B開(kāi)頭的字面值,如0b110、0B110。
八進(jìn)制:由數(shù)字[0, 7]范圍內(nèi)的整數(shù)組成,用0開(kāi)頭的字面值,如0110。
十進(jìn)制:由數(shù)字[0, 9]范圍內(nèi)的整數(shù)組成的字面值,如110。
十六進(jìn)制:由數(shù)字[0, 9]和字符[A, F]范圍內(nèi)組成,用0x或0X開(kāi)頭的字面值,如0x12、0XAbA。
2.浮點(diǎn)數(shù)常量
浮點(diǎn)數(shù)就是實(shí)數(shù),包含有小數(shù)點(diǎn),可以用標(biāo)準(zhǔn)小數(shù)形式和科學(xué)計(jì)數(shù)法形式兩種方式表示,具體表示如下:
標(biāo)準(zhǔn)小數(shù):由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分構(gòu)成,如1.5、2.2。
科學(xué)計(jì)數(shù)法:由一個(gè)標(biāo)準(zhǔn)式加上一個(gè)以10為底的冪構(gòu)成,兩者間用e或E隔開(kāi),如1.2e+6、5E-8。
在Java中,分為float單精度浮點(diǎn)數(shù)和double雙精度浮點(diǎn)數(shù)兩種類型,單精度浮點(diǎn)數(shù)以f或F結(jié)尾,雙精度浮點(diǎn)數(shù)以d或D結(jié)尾。不加后綴會(huì)默認(rèn)為double雙精度浮點(diǎn)數(shù)。
3.字符常量
字符常量有三種形式,具體表示如下:
用單引號(hào)括起來(lái)的字符。如’a’、‘0’。
轉(zhuǎn)義字符。如’\n’、’\t’、’\0’。
用Unicode值表示的字符,格式是’\uXXXX’,其中XXXX代表一個(gè)十六進(jìn)制的整數(shù)。如’\u0000’。
4.字符串常量
字符串常量就是用雙引號(hào)括起來(lái)的字符序列。如"歡迎學(xué)習(xí)Java"、“A”。
5.布爾常量
布爾常量就是布爾類型的兩個(gè)值true和false,用于表示真和假。
6.null常量
null常量只有一個(gè)值null,表示對(duì)象引用為空。
多學(xué)一招:轉(zhuǎn)義字符
Java定義了一種特殊的標(biāo)記來(lái)表示特殊字符,這種標(biāo)記稱為轉(zhuǎn)義序列,轉(zhuǎn)義序列由()后面加上一個(gè)字符或者一些數(shù)字位組成。如\t表示Tab字符的轉(zhuǎn)義符,\u000A表示換行符\n。轉(zhuǎn)義序列中的序列號(hào)作為一個(gè)整體翻譯,而不是分開(kāi)翻譯。一個(gè)轉(zhuǎn)義序列被當(dāng)做一個(gè)字符。
常用的轉(zhuǎn)義序列如下:
\b,退格鍵,Unicode碼為\u0008。
\t,Tab鍵,Unicode碼為\u0009。
\n,換行符,Unicode碼為\u000A。
\r,回車符,Unicode碼為\u000D。
反斜杠\被稱為轉(zhuǎn)義字符,它是一個(gè)特殊字符。有特殊意義的字符,無(wú)法直接表示,需要用轉(zhuǎn)義序列來(lái)表示。
‘,單引號(hào)字符,Java中單引號(hào)表示字符的開(kāi)始和結(jié)束,直接寫單引號(hào)字符(’),編譯器會(huì)匹配前兩個(gè)是一對(duì),會(huì)報(bào)錯(cuò),所以需要使用轉(zhuǎn)義字符’。
“,雙引號(hào)字符,Java中雙引號(hào)表示字符串的開(kāi)始和結(jié)束,要顯示雙引號(hào)需要使用轉(zhuǎn)義字符”,如"歡迎學(xué)習(xí)"Java""。
\,反斜杠字符,Java中的反斜杠是轉(zhuǎn)義字符,要顯示反斜杠,需要使用轉(zhuǎn)義字符\。
本文來(lái)自千鋒教育,轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的Java培训教程分享:变量与常量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java学习笔记:Javaweb的服务器
- 下一篇: 五分钟带你了解Django框架设计思想!