- Java 開發從入門到精通(第2版)
- 扶松柏 王洋 陳小玉
- 2909字
- 2020-04-14 15:06:04
3.1 常量和變量
量是用來傳遞數據的介質,有著十分重要的作用。Java語言中的量既可以是變化的,也可以是固定不變的。根據是否可變,可以將Java中的量分為變量和常量。在接下來的內容中,將詳細講解Java語言中變量和常量的基本知識。
知識點講解:

3.1.1 常量
永遠不變的量就是常量,常量的值不會隨著時間的變化而發生改變,在程序中通常用來表示某一固定值的字符或字符串。在Java程序中,我們經常會用大寫字母來表示常量名,具體格式如下。
final double PI=value;
在上述代碼中,PI是常量的名稱,value是常量的值。
實例3-1
定義幾個Java常量
源碼路徑:daima\3\ding.java
實例文件ding.java的主要實現代碼如下所示。
public class ding { //下面開始定義各種數據類型的常量 public final double PI = 3.1415926; public final int Aa = 24; public final int Bb = 36; public final int Cc = 48; public final int Dd = 60; public final String Str1="hello"; public final String Str2="aa"; public final String Str3="bb"; public final String Str4="cc"; public final String Str5="dd"; public final String Str6="ee"; public final String Str7="ff"; public final String Str8="gg"; public final String Str9="hh"; public final String Str10="ii"; public final Boolean Mm=true; public final Boolean Nn=false; }
拓展范例及視頻二維碼
范例3-1-01:定義并操作常量
源碼路徑:演練范例\3-1-01\
范例3-1-02:輸出錯誤信息和調試信息
源碼路徑:演練范例\3-1-02\

在上述代碼中,我們分別定義了不同類型的常量,既有double類型,也有int類型;既有String類型,也有Boolean類型。
在Java中,常量也稱為直接量,直接量是指在程序中通過源代碼直接指定的值,例如在int a=5這行代碼中,我們為變量a分配的初始值5就是一個直接量。
并不是所有數據類型都可以指定給直接量,能指定直接量的通常只有3種類型—基本類型、字符串類型和null類型。具體來說,Java支持如下8種數據類型的直接量。
? int類型的直接量:在程序中直接給出的整型數值,可分為十進制、八進制和十六進制3種,其中八進制需要以0開頭,十六進制需要以0x或0X開頭。例如123、012(對應十進制的10)、0x12(對應十進制的18)等。
? long類型的直接量:整數數值在后面添加l(字母)或L后就變成了long類型的直接量,例如3L、0x12L(對應十進制的18L)。
? float類型的直接量:浮點數在后面添加f或F就成了float類型的直接量,浮點數既可以是標準小數形式,也可以是科學記數法形式。例如5.34F、3.14E5f。
? double類型的直接量:直接給出標準小數形式或科學記數法形式的浮點數就是double類型的直接量。例如5.34、3.14E5。
? boolean類型的直接量:這種類型的直接量只有兩個——true和false。
? char類型的直接量:char類型的直接量有3種形式,分別是用單引號括起的字符、轉義字符以及用Unicode值表示的字符。例如’a'、'\n’和’\u0061'。
? String類型的直接量:用雙引號括起來的字符序列就是String類型的直接量。
? null類型的直接量:這種類型的直接量只有一個——null。
在上面的8種類型中,null類型是一種特殊類型,只有一個直接量null,而且這個直接量可以賦給任何引用類型的變量,用于表示這個引用類型的變量中保存的地址為空,即還未指向任何有效對象。
注意:有關數據類型的詳細知識,將在本章后面的內容中進行講解。
3.1.2 變量
在Java程序中,變量是指在程序運行過程中其值會隨時發生變化的量。在聲明變量時必須為其分配一種類型,在程序運行過程中,變量的內存空間中的值是發生變化的,這個內存空間就是變量的實體。為了操作方便,給這個內存空間取了個名字,稱為變量名。因為內存空間中的值就是變量值,所以即使申請了內存空間,變量也不一定有值。要讓變量有值,就必須先放入一個值。在申請變量的時候,無論是什么樣的數據類型,它們都會有默認值,例如int數據變量的默認值是“0”,char數據變量的默認值是null,byte數據變量的默認值是“0”。
在Java程序中,聲明變量的基本格式與聲明常量有所不同,具體格式如下所示。
typeSpencifier varName=value;
? typeSpencifier:可以是Java語言中所有合法的數據類型,這和常量是一樣的。
? varName:變量名,變量和常量的最大區別在于value的值可有可無,而且還可以對其進行動態初始化。
Java中的變量分為局部變量和全局變量兩種,具體說明如下所示。
1.局部變量
顧名思義,局部變量就是在一個方法塊或一個函數內起作用,超出這個范圍,局部變量將沒有任何作用。由此可以看出,變量在程序中是隨時可以改變的,隨時都在傳遞著數據。
實例3-2
用變量計算三角形、正方形和長方形的面積
源碼路徑:daima\3\PassTest.java
實例文件PassTest.java的主要實現代碼如下所示。
public static void main(String args[]){ //計算三角形面積 ① int a3=12, b3=34; //賦值a3和b3 ② int s3=a3*b3/2; //面積公式 //輸出結果 ③ System.out.println("三角形的面積為"+s3); //計算正方形面積 ④ double a1=12.2; //賦值a1 ⑤ double s1=a1*a1; //面積公式 //輸出結果 ⑥ System.out.println("正方形的面積為"+s1); //計算長方形面積 ⑦ double a2=388.1, b2=332.3; //賦值a2和b2 ⑧ double s2=a2*b2; //面積公式 ⑨ System.out.println("長方形的面積為"+s2); //輸出結果 }
拓展范例及視頻二維碼
范例3-2-01:計算長方形和三角形的面積
源碼路徑:演練范例\3-2-01\
范例3-2-02:從控制臺接收輸入字符
源碼路徑:演練范例\3-2-02\

行①②定義兩個int類型變量a3和b3并賦值,設置變量s3的值是a3乘以b3,然后除以2。
行③⑥⑨分別使用println()函數輸出變量s3、s1和s2的值。
行④⑤分別定義兩個double類型的變量a1和s1,設置a1的初始值是12.2,設置s1的值是a1的平方。
行⑦分別定義兩個double類型的變量a2和b2,設置a2的初始值是388.1,設置b2的初始值是332.3。
行⑧定義一個double類型的變量s2,并設置其初始值是a2乘以b2。
執行后的結果如圖3-1所示。

圖3-1 執行結果
2.全局變量
明白局部變量后就不難理解全局變量了,其實全局變量就是作用區域比局部變量的作用區域更大的變量,能在整個程序內起作用。
實例3-3
輸出設置的變量值
源碼路徑:daima\3\Quan.java
實例文件Quan.java的主要實現代碼如下所示。
public class Quan { //下面分別定義變量x、y、z、z1、a、b、c、d、e byte x; short y; //定義變量y int z; //定義變量z int z1; //定義變量z1 long a; //定義變量a float b; //定義變量b double c; //定義變量c char d; //定義變量d boolean e; //定義變量e //下面設置z1的值, 并分別輸出x、y、z、a、b、c、d、e的值 public static void main(String[] args){ int z1=111; //給z1賦值 System.out.println("打印數據z="+z1); //下面開始分別輸出數據 Quan m=new Quan(); //定義對象m System.out.println("打印數據x="+m.x); System.out.println("打印數據y="+m.y); System.out.println("打印數據z="+m.z); System.out.println("打印數據a="+m.a); System.out.println("打印數據b="+m.b); System.out.println("打印數據c="+m.c); System.out.println("打印數據d="+m.d); System.out.println("打印數據e="+m.e); } }
拓展范例及視頻二維碼
范例3-3-01:演示局部變量的影響
源碼路徑:演練范例\3-3-01\
范例3-3-02:重定向輸出流以實現程序日志
源碼路徑:演練范例\3-3-02\

在上述實例代碼中,全局變量將對整個程序產生作用,但是在局部可以隨時更改全局變量的值。在上面的程序里,定義了全局變量z1;在局部對這個變量重新賦值,這個變量的值將會發生改變。運行上面的程序,在這里定義了byte變量“x”、short變量y、int變量z和z1、float變量b、double變量c、char變量d、Boolean變量e,它們都未賦予初始值,但是在執行的時候它們都有了值。這說明不管什么類型的變量,都有默認值。如果未給變量定義初始值,系統將賦予默認值,執行后的結果如圖3-2所示。

圖3-2 執行結果
在面對變量的作用域問題時,一定要確保知道變量要先定義,然后才能使用,但也不是說,變量定義后的語句一直都能使用前面定義的變量。我們可以用大括號將多條語句包裹起來形成一條復合語句,變量只能在定義它的復合語句中使用。例如在下面的演示代碼中,前面定義變量x的值是12,而在后面的嵌套中又想重新對變量x進行定義并賦值,這在Java語言中是不允許的。
源碼路徑:daima\3\TestScope.java
public class TestScope{ public static void main(String[] args) { int x = 12; //{ int q = 96; // x和q都可用 int x = 3; //錯誤的定義, Java中不允許有這種嵌套定義,因為前面已經定義了變量x System.out.println("x is "+x); System.out.println("q is "+q); //} q = x; System.out.println("x is "+x); } }
要想解決上述問題,只需要刪除重復的對變量x的賦值定義,然后刪除嵌套的大括號即可。例如下面的代碼就是正確的:
public class TestScope{ public static void main(String[] args) { int x = 12; int q = 96; // x和q都可用 System.out.println("x is "+x); System.out.println("q is "+q); q = x; System.out.println("x is "+x); } }
- 軟件項目管理(第2版)
- 造個小程序:與微信一起干件正經事兒
- CentOS 7 Server Deployment Cookbook
- Python Data Analysis(Second Edition)
- PHP+MySQL網站開發項目式教程
- 精通網絡視頻核心開發技術
- Python數據分析從0到1
- Python數據結構與算法(視頻教學版)
- Clean Code in C#
- 深度探索Go語言:對象模型與runtime的原理特性及應用
- 深入理解BootLoader
- Mastering Concurrency Programming with Java 9(Second Edition)
- JavaWeb從入門到精通(視頻實戰版)
- Go語言高級編程(第2版)
- SQL Server 2014數據庫設計與開發教程(微課版)