Java 快速導覽 - 基本資料型態和參考變數

Java 有八種基本資料型態 (primitive data type) ,分別使用以下關鍵字 (keyword) 來宣告 (declare)

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char


其中前四種,也就是 byteshortintlong 為帶正負號的 2 的補數整數資料型態 (signed two's complement integer), 四者的不同在於所需的記憶體空間不同。 floatdouble 為依據 IEEE 754 標準的浮點數, boolean 為布林值, char 則為 Unicode 字元,全部如下表
型態類型關鍵字位元數範圍
整數byte8-128 ~ 127
整數short16-32768 ~ 32767
整數int32-2147483648 ~ 2147483647
整數long64-9223372036854775808 ~ 9223372036854775807
浮點數float32依據 IEEE 754 標準
浮點數double64依據 IEEE 754 標準
布林值boolean1true, flase
字元char16'\u0000' - '\uffff'


使用變數 (variable) 前需要先宣告, Java 中的變數不是對物件的參考 (reference) ,就是屬於上述八種基本資料型態之一。屬性 (field) 或方法 (method) 中的區域變數 (local variable) 宣告後需要給值,不然會發生編譯錯誤 (compile error) ,如以下程式使用了沒有給初值 (initial value) 的屬性
class ErrorDemo {
    int number;
    
    public static void main(String[] args) {
        System.out.println("^_^, number = " + number);
    }
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:ErrorDemo1.java
   功能:宣告屬性未給值會發生編譯錯誤 
   作者:張凱慶
   時間:西元 2010 年 10 月 */


編譯會發生如下的錯誤



這意思是說第 5 行有一個沒有給初值的 number ,因為這是非 static 的屬性。同樣的,方法中所宣告的區域變數若是沒有給值,編譯時也會發生錯誤,例如以下程式使用了沒有給初值的區域變數
class ErrorDemo {
    public static void main(String[] args) {
        int number;
        System.out.println("^_^, number = " + number);
    }
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:ErrorDemo2.java
   功能:宣告變數未給值會發生編譯錯誤 
   作者:張凱慶
   時間:西元 2010 年 10 月 */


編譯結果如下



這意思是說變數 number 應該要被初始化 (initialized) ,也就是宣告區域變數後,需要先給值區域變數,該區域變數才可使用。事實上,若是屬性加上 static 修飾詞 (modifier) ,就指定該屬性屬於類別 (class) ,也就是說 static 屬性為利用該類別所建立的物件 (object) 所共有,同時編譯器 (compiler) 會自動給 static 屬性初始值。


以下程式會印出八種基本資料型態及參考變數 (reference variable) 的初始值
class initialDemo {
        static byte a1;
        static short a2;
        static int a3;
        static long a4;
        static float a5;
        static double a6;
        static boolean a7;
        static char a8;
        static String a9;

    public static void main(String[] args) {
        System.out.println("byte 的預設值為 " + a1);
        System.out.println("short 的預設值為 " + a2);
        System.out.println("int 的預設值為 " + a3);
        System.out.println("long 的預設值為 " + a4);
        System.out.println("float 的預設值為 " + a5);
        System.out.println("double 的預設值為 " + a6);
        System.out.println("boolean 的預設值為 " + a7);
        System.out.println("char 的預設值為 " + a8);
        System.out.println("String 的預設值為 " + a9);
    }
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:initialDemo.java
   功能:印出 static 屬性的初始值 
   作者:張凱慶
   時間:西元 2010 年 10 月 */


編譯後執行,結果如下



中英文術語對照
八種基本資料型態primitive data type
關鍵字keyword
宣告declare
帶正負號 2 的補數整數signed two's complement integer
變數variable
參考reference
屬性field
方法method
區域變數local variable
編譯錯誤compile error
初值initial value
初始化initialized
修飾詞modifier
類別class
物件object
編譯器compiler
參考變數reference variable




1 則留言:

Unknown 提到...

關於 "宣告屬性未給值會發生編譯錯誤"
這段解釋有誤哦~
int number會有初始值0,編譯錯誤是因為被放在靜態的main中的關係,
java: non-static variable number cannot be referenced from a static context

感謝您的教程,受益良多^^