官术网_书友最值得收藏!

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);
            }
        }
主站蜘蛛池模板: 饶平县| 西贡区| 彭阳县| 芦溪县| 电白县| 营山县| 苏尼特右旗| 古交市| 闻喜县| 常州市| 长岛县| 林周县| 张掖市| 玛多县| 承德市| 高州市| 富阳市| 志丹县| 明光市| 中阳县| 东兴市| 封丘县| 揭西县| 思茅市| 浪卡子县| 肃宁县| 利辛县| 德格县| 淮南市| 日土县| 镇巴县| 石河子市| 屯门区| 元氏县| 庆元县| 张掖市| 南昌市| 成武县| 靖宇县| 成都市| 大名县|