- byte
- short
- int
- long
- float
- double
- boolean
- char
其中前四種,也就是 byte 、 short 、 int 、 long 為帶正負號的 2 的補數整數資料型態 (signed two's complement integer), 四者的不同在於所需的記憶體空間不同。 float 、 double 為依據 IEEE 754 標準的浮點數, boolean 為布林值, char 則為 Unicode 字元,全部如下表
型態類型 | 關鍵字 | 位元數 | 範圍 |
---|---|---|---|
整數 | byte | 8 | -128 ~ 127 |
整數 | short | 16 | -32768 ~ 32767 |
整數 | int | 32 | -2147483648 ~ 2147483647 |
整數 | long | 64 | -9223372036854775808 ~ 9223372036854775807 |
浮點數 | float | 32 | 依據 IEEE 754 標準 |
浮點數 | double | 64 | 依據 IEEE 754 標準 |
布林值 | boolean | 1 | true, flase |
字元 | char | 16 | '\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 |
參考資料
http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html
1 則留言:
關於 "宣告屬性未給值會發生編譯錯誤"
這段解釋有誤哦~
int number會有初始值0,編譯錯誤是因為被放在靜態的main中的關係,
java: non-static variable number cannot be referenced from a static context
感謝您的教程,受益良多^^
張貼留言