程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA基礎之二:變量和數據類型

JAVA基礎之二:變量和數據類型

編輯:JAVA綜合教程

JAVA基礎之二:變量和數據類型


\

 

本文主要介紹了Java中基本的數據類型,以及如何在程序中正確的使用。

1. 變量

計算機處理數據,變量被用來存儲處理的數據,之所以叫做變量因為你可以改變存儲的值。更確切的說,一個變量指向著一塊存儲特定類型值的地址,換句話說,一個變量有名稱、類型和值。一個變量有一個名稱,例如radius、area、age和height,每個變量的名稱都是唯一的,這邊可以方便我們設置和獲取變量的值。

一個變量有一種類型,下面是Java類型的列子:

  • int: 表示整數例如123和-456
  • double: 表示浮點數例如3.1416、-55.66、1.2e3和-4.5E-6
  • String: 表示文本例如"Hello"、"Good Morning!",文本通常嵌入在雙引號裡面
  • char: 表示單個字符例如'a','8',單個字符通常嵌入在單引號裡面。

    變量存儲特定類型的值,編程中要特別注意變量類型,舉例:一個int變量存儲整數123,但是不能存儲浮點數12.34,同樣也不能存儲文本"Hello"。
    早期的編程語言中引入了類型的概念來解釋二進制01數據,類型定義了數據的結構、大小、范圍以及針對該類型的一系列操作。

    variable

    2. 名稱

    需要唯一的標識來命名變量,Java遵循以下標識的命名方式:

    • 標識由大小寫字母、數字、下劃線和$的任意長度的字符序列組成。
    • 空白 (空格、制表符、換行符)和其他特殊字符 (如+ - * / @ &, 等)是不允許的,錯誤的命名方式:max value和max-value。
    • 標識符不能以數字(0-9)開頭必須以字母(a-z, A-Z)、下劃線(_)和$開頭,系統保留以$開頭的標識。
    • 標識符不能使用關鍵字和預留字段 (例如:class,int,double,if,else,for,true,false,null)。
    • 標識符是區分大小寫的,rose、Rose和ROSE是3個不同的變量。

      使用駝峰給變量命名:theFontSize、roomNumber、xMax、yMin、xTopLeft和thisIsAVeryLongVariableName, 可以參考下面的建議:

      • 選擇一個有意義的變量名是非常重要的,建議使用numberOfStudents和numStudents來表示學生人數,而不是n或x。
      • 這些變量名a, b, c, d, i, j, k, i1, j99毫無意義
      • x通常用作異常,y、z用來表示坐標,i表示循環索引。
      • 對單復數變量加以區分,row表示單行,rows表示多行。

        3. 定義變量

        你需要定義變量的名稱和類型才能在程序中使用變量,你可以使用下面的其中一種語法:

        // 定義特定類型的變量, type identifier
        int option;
        
        // 定義多個同類型變量,變量之間用逗號分隔,type identifier1, identifier2, ..., identifierN
        double sum, difference, product, quotient;
        
        // 定義變量並初始化, type identifier = initialValue
        int magicNumber = 88;
        
        // 定義多個同類型變量並初始化, type identifier1 = initValue1, ..., identifierN = initValueN
        String greetingMsg = "Hi!", quitMsg = "Bye!";
        

        注意:

        • Java是強類型的語言,一個變量對應著一種類型,變量聲明後不能存儲其它類型的數據。
        • 每個變量只能聲明一次。
        • 使用前你可以在程序的任意位置進行聲明。
        • 變量聲明之後它的類型不能更改。
        • 一個變量聲明的語句以類型開始,變量自始自終都為這種類型服務,一個變量聲明的語句只能使用單一的類型。

          4. 常量

          常量的命名規范:使用大寫的單詞,多個單詞使用下劃線連接,例如:MIN_VALUE,MAX_SIZE。
          常量是不可變的,使用關鍵字final進行聲明,常量聲明後需要初始化

          final double PI = 3.1415926; 

          5. 表達式

          表達式是由運算符和操作數組合而成,通過計算可以輸出單個類型的值,例如

          1 + 2 * 3                        // 計算得到7
          
          int sum, number;
          sum + number                     // 計算得到一個int值
          
          double principal, interestRate;
          principal * (1 + interestRate)   // 計算得到一個double值   
          

          6. 賦值

          指派一個右操作數賦值給左操作數,例如:x=1。
          計算表達式的值並賦值給左操作數,例如:x=(y + z) / 2。

          賦值語句的語法:

          // 直接賦值, variable = literalValue
          number = 88;
          
          // 計算表達式之後賦值, variable = expression
          number = number + 1;  // 計算表達式number+1,最後將結果賦值給number
          
          8 = number;           // 錯誤的使用
          number + 1 = sum;     // 錯誤的使用
          
          

          7. 基本類型

          在Java中有兩種類型:基本類型 (int、double等)和引用類型 (類和數組)。

          • byte:8位有符號整型取值范圍:[-2^7, 2^7-1] = [-128, 127]。
          • short:16位有符號整型取值范圍:[-2^15, 2^15-1] = [-32768, 32767]。
          • int:32位有符號整型取值范圍:[-2^31, 2^31-1] = [-2147483648, 2147483647](≈9 digits)。
          • long:64位有符號整型取值范圍:[-2^63, 2^63-1] = [-9223372036854775808, +9223372036854775807](≈19 digits)。
          • float:32位單精度浮點數(≈6-7位小數, 取值范圍:±[≈10^-45, ≈10^38])。
          • double:64位雙精度浮點數(≈精確到14-15位小樹, 取值范圍:±[≈10^-324, ≈10^308])。
          • char:表示16位Unicode編碼,取值范圍:'\u0000'到'\uFFFF', 可以理解成16位無符號整型,取值范圍:[0, 65535]。
          • boolean:布爾取值只能是true或false,布爾數據類型的大小在Java雖然沒有定義, 但是至少需要1比特。

            內建的基本類型

            primitive types

            基本類型內建在程序語言中,從上面的圖中我們可以看出Java有8種基本類型。

            有4種有符號的整型:8位byte,16位short,32位int,64位long。

            32位單精度類型float,float近似的取值范圍±1.4023p846×10^-45到±3.40282347×10^38。

            64位雙精度類型double, double近似的取值范圍±4.p4065645841246544×10^-324到±1.7p76p313486231570×10^308。

            char表示單個字符,例如p;0p;,p;Ap;,p;ap;,在Java中,char采用16位Unicode(UCS-2格式)來支持國際化(i18n)。

            Java中引入了二進制的布爾類型,它只能包含true和false兩個值。

            例子:下面的程序用來輸出打印基本類型的最大值、最小值和比特長度。

            /*
             * 輸出基本類型的最大值、最小值和比特長度
             */
            public class PrimitiveTypesMinMax {
               public static void main(String[] args) {
                  // int (32位有符號整型)
                  System.out.println("int(min) = " + Integer.MIN_VALUE);
                  System.out.println("int(max) = " + Integer.MAX_VALUE);
                  System.out.println("int(bit-length) = " + Integer.SIZE);
                  // byte (8位有符號整型)
                  System.out.println("byte(min) = " + Byte.MIN_VALUE);
                  System.out.println("byte(max) = " + Byte.MAX_VALUE);
                  System.out.println("byte(bit-length)=" + Byte.SIZE);
                  // short (16位有符號整型)
                  System.out.println("short(min) = " + Short.MIN_VALUE);
                  System.out.println("short(max) = " + Short.MAX_VALUE);
                  System.out.println("short(bit-length) = " + Short.SIZE);
                  // long (64位有符號整型)
                  System.out.println("long(min) = " + Long.MIN_VALUE);
                  System.out.println("long(max) = " + Long.MAX_VALUE);
                  System.out.println("long(bit-length) = " + Long.SIZE);
                  // char (16位字符或者16位無符號整型)
                  System.out.println("char(min) = " + (int)Character.MIN_VALUE);
                  System.out.println("char(max) = " + (int)Character.MAX_VALUE);
                  System.out.println("char(bit-length) = " + Character.SIZE);
                  // float (32位浮點數)
                  System.out.println("float(min) = " + Float.MIN_VALUE);
                  System.out.println("float(max) = " + Float.MAX_VALUE);
                  System.out.println("float(bit-length) = " + Float.SIZE);
                  // double (64位浮點數)
                  System.out.println("double(min) = " + Double.MIN_VALUE);
                  System.out.println("double(max) = " + Double.MAX_VALUE);
                  System.out.println("double(bit-length) = " + Double.SIZE);
               }
            }
            
            int(min) = -2147483648
            int(max) = 2147483647
            int(bit-length) = 32
            
            byte(min) = -128
            byte(max) = 127
            byte(bit-length)=8
            
            short(min) = -32768
            short(max) = 32767
            short(bit-length) = 16
            
            long(min) = -9223372036854775808
            long(max) = 9223372036854775807
            long(bit-length) = 64
            
            char(min) = 0
            char(max) = 65535
            char(bit-length) = 16
            
            float(min) = 1.4E-45
            float(max) = 3.4028235E38
            float(bit-length) = 32
            
            double(min) = 4.9E-324
            double(max) = 1.7976931348623157E308
            double(bit-length) = 64
            

            String

            String不是基本類型,是另外一種常用的類型,它表示文本內容,在Java中字符串使用雙引號。

            String message = "Hello, world!"; // 字符串使用雙引號
            char gender = 'm';                // 字符使用單引號
            

            為變量選擇數據類型

            開發中需要設計合適的變量類型,多數時我們不難選擇,你可以用int來存儲整型,用float來存儲有小數的數值,用String來存儲文本,用char來存儲單個字符和用boolean來存儲二元結果。

              經驗法則

              由於int類型非常精確、運行效率高,因此常被用作計數和索引。

              盡可能的使用int類型。

              數據表示

              值得注意的是char '1'與int 1、byte 1、short 1、float 1.0、double 1.0、String "1"是不相同的,它們在計算機的內存中有著不同的精度和說明,舉例說明:

              byte 1表示00000001

              short 1表示00000000 00000001

              int 1表示00000000 00000000 00000000 00000001

              long 1表示00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

              float 1.0表示0 01111111 0000000 00000000 00000000

              double 1.0表示0 01111111111 0000 00000000 00000000 00000000 00000000 00000000 00000000

              char '1'表示00000000 00110001

              String "1"表示復雜的對象

              下面我們來看一個變量名稱和類型的例子:

              Paul買了一台abc品牌的筆記本電腦,3.2GHZ高速處理器、4GB內存、500GB硬盤、15英寸顯示器,總價為$1650.45,在現場從服務計劃A、B、C中選擇了B計劃,定義涉及的相關變量和類型。

            String name = "Paul";
            String brand = "abc";
            double processorSpeedInGHz = 3.2;  // 或者 float
            double ramSizeInGB = 4;            // 或者 float
            int harddiskSizeInGB = 500;        // 或者 short
            int monitorInInch = 15;            // 或者 byte
            double price = 1650.45;
            char servicePlan = 'B';
            boolean onSiteService = true;
            

            練習:

            假設你正在為學校開發一款收集學生信息的軟件,學生的信息包括年齡、地址、電話、性別、生日、身高、體重、年級、入學時間等,每個學生被分配一個8位數字標識,下面來使用變量定義它們吧。

            8. 用於基本類型和String類型的字面值

            編程中使用的文字、字面值都是特定的常量,例如123,-456,3.14,-1.2e3,'a',"Hello", 可以用做賦值或表達式。

            Integer(int,long,short,byte)字面值

            // 整數默認的都被視作int類型,例如123和-456,在Java中32位的int取值范圍從-2,147,483,628(-2^31)到2,147,483,627(2^31-1)
            int number = -123;
            int sum = 1234567890;            // 這個值在int取值范圍內
            int bigSum = 8234567890;         // 錯誤: 這個值超出了int取值范圍
            
            // int字面值沒有特殊說明都表示10進制,以0開頭的數字表示8進制,以'0x'開頭的數字表示16進制。
            int number = 1234;               // 10進制1234
            int number = 01234;              // 8進制1234, 10進制668
            int number = 0x1abc;             // 16進制1ABC, 10進制6844
            
            // 從JDK1.7開始,你可以使用'0b'或者'0B'為前綴來表示二進制,你也可以使用下劃線_對數字進行分組來提高可讀性,但是開頭和結尾必須使用數字。
            int number1 = 0b01010000101000101101000010100010;
            int number2 = 0b0101_0000_1010_0010_1101_0000_1010_0010;
            int number3 = 2_123_456;
            
            // long字面值用數字加上後綴'L'或'l'來表示
            long bigNumber = 1234567890123L;
            long sum = 123;                   // int類型123會被自動轉換成long類型123L
            
            // byte和short字面值不需要添加後綴,你可以直接使用整數初始化
            byte smallNumber = 12345;         // 錯誤: 超出了byte取值范圍
            byte smallNumber = 123;
            short midSizeNumber = -12345;
            
            // 有小數點的數值例如55.66和-33.44默認的被視作double類型,同樣你可以用科學計數法表示,例如1.2e3,-5.5E-6, 大寫E小寫e表示10的指數,你可以用數字加上後綴'd'或'D'表示。
            float average = 55.66;            // 錯誤! 右操作是double類型, 需要後綴'f'來表示
            float average = 55.66f;
            

            字符字面值和轉義序列

            // 字符嵌入在單引號裡面表示char類型,char類型使用16位的Unicode編碼,算術運算上等同於16位無符號整型
            char letter = 'a';                 // 等同於97
            char anotherLetter = 98;           // 等同於'b'
            System.out.println(letter);        // 輸出'a'
            System.out.println(anotherLetter); // 輸出'b'代替數字
            anotherLetter += 2;                // 100或'd'
            System.out.println(anotherLetter); // 輸出'd'
            

            非打印的控制字符通常被稱為轉義序列,通常以反斜線\開始,下面是常用的轉義序列:

            • 換行符: \n等同於000AH (10D)
            • 回車符: \r等同於000DH (13D)
            • 制表符: \t等同於0009H (9D)
            • 雙引號: \"等同於0022H (34D)
            • 單引號: \'等同於0027H (39D)
            • 反斜線: \\等同於005CH (92D)

              說明:

              • 用轉義序列\n和\r分別表示換行符(000AH)和回車符(000DH),值得注意的是在Unix和Mac中使用\n(0AH)表示換行,而Windows使用\r\n(0D0AH)表示。
              • 用轉義序列\t表示制表符(0009H)。
              • 為了解決歧義,反斜線(\),單引號('),雙引號("),分別用轉義序列\\,\'和\"來表示。
              • 其它不太常用的轉義序列:\a警報, \b退格, \f換頁, \v垂直標簽,某些控制台可能無法支持。

                String字面值

                長度不定的字符串嵌入在雙引號裡面表示字符串字面值,例如"Hello, world!","The sum is: ",舉例說明:

                String directionMsg = "Turn Right";
                String greetingMsg = "Hello";
                String statusMsg = "";   // 空字符串
                
                // 字符串字面值可能包含轉義序列,在字符串你裡面,你需要使用 \"來表示雙引號,單引號不需要轉義,舉例說明:
                System.out.println("Use \\\" to place\n a \" within\ta\tstring");
                
                Use \" to place
                 a " within	a	string
                

                練習:編寫程序打印輸出下面的字符。

                    '__'
                          (oo)
                  +========\/
                 / || %%% ||
                *  ||-----||
                   ""     ""    
                

                boolean字面值

                // boolean字面值緊包含兩個值:true和false
                boolean done = true;
                boolean gameOver = false;
                

                字面值的例子

                public class LiteralTest {
                   public static void main(String[] args) {
                      String name = "Tan Ah Teck"; // String使用雙引號
                      char gender = 'm';           // char使用單引號
                      boolean isMarried = true;    // true或者false
                      byte numChildren = 8;        // byte取值范圍[-127, 128]
                      short yearOfBirth = 1945;    // short取值范圍[-32767, 32768]
                      int salary = 88000;
                      long netAsset = 8234567890L;
                      double weight = 88.88;
                      float gpa = 3.88f;
                
                      // 輸出
                      System.out.println("Name is " + name);
                      System.out.println("Gender is " + gender);
                      System.out.println("Is married is " + isMarried);
                      System.out.println("Number of children is " + numChildren);
                      System.out.println("Year of birth is " + yearOfBirth);
                      System.out.println("Salary is " + salary);
                      System.out.println("Net Asset is " + netAsset);
                      System.out.println("Weight is " + weight);
                      System.out.println("GPA is " + gpa);
                   }
                }
                
                Name is Tan Ah Teck
                Gender is m
                Is married is true
                Number of children is 8
                Year of birth is 1945
                Salary is 88000
                Net Asset is 1234567890
                Weight is 88.88
                Height is 188.8
                 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved