Java 中的變數 (variable) 有兩種,一種是基本資料型態 (primitive data type) ,另一種則是對物件 (object) 的參考 (reference)
基本資料型態共有八種,如下表
型態類型 | 關鍵字 | 位元數 | 範圍 |
---|---|---|---|
整數 | 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' |
依資料所佔位元數的不同,整數有四種,浮點數有兩種,另外布林值與字元各一種。一般來說,資料型態所佔據的位元數越多,可表示的數字範圍也越大。字面常數 (literal) 也就是程式中直接寫出來的數值 (value) ,以下表示布林值 (Boolean value) 、字元 (character) 、整數 (integer) 與浮點數 (floating-point number) 的字面常數
boolean a = true; | |
char b ='2'; | |
int c = 2; | |
double d = 2.0; |
宣告 (declare) 布林型態的變數 (variable) 使用關鍵字 (keyword) boolean , true 為布林值的字面常數,表示邏輯上的真,布林型態的另一個字面常數為 false ,表示邏輯上的假。
字元型態則使用關鍵字 char ,由於 Java 直接支援 Unicode 編碼,因此任何 Unicode 字元都可以當作字元型態的的字面常數。字元型態的字面常數為單引號圍起來的單一字元,或是單引號圍起來,反斜線加上四位的十六位元數字,例如
char e = '\u0061'; // 小寫英文字母 a | |
char f = '\u0032'; // 阿拉伯數字 2 | |
char g = '\u002E'; // 英文句點 . | |
char h = '\u0025'; // 百分比符號 % |
反斜線加上特定英文小寫字母表示跳脫字元,用來表示一些不可見字元,例如
char i = '\n'; // 新行符號 | |
char j = '\t'; // tab 鍵 | |
char k = '\a'; // 響鈴 | |
char l = '\"'; // 雙引號 |
整數型態共有四種,一般來講,最常使用的是 int 型態,沒有特別指定的整數字面常數也會是 int 型態,而 long 型態又被稱為長整數,字面常數須加上英文字母 L 或 l 的字尾,如
long m = 220L; // 長整數 220 | |
long n = 220l; // 長整數 220 |
浮點數型態有兩種,最常使用的是 double 型態,沒有特別指定的浮點數字面常數也會是 double 型態,若是需要使用 float 型態的浮點數,需要在字面常數加上 F 或 f 的字尾,如
float o = 22.0F; // 浮點數 22.0 | |
float p = 22.0f; // 浮點數 22.0 |
除了以上八種基本資料型態之外,其餘的變數都是指向物件的參考,可以想像變數本身就是容器,基本資料型態所含的數值大小可以直接裝進變數之中,但是物件太大,塞不進變數裡頭,因此物件變數裡所裝的是對物件的連結,也就是參考。
例如 Demo.java 中
001 | // 宣告類別名稱 |
002 | public class Demo { |
003 | // 宣告 main() 方法 |
004 | public static void main(String[] args) { |
005 | // 建立 Object 型態的物件 |
006 | Object o = new Object(); |
007 | |
008 | // 於命令列印出訊息 |
009 | System.out.println(); |
010 | System.out.println(o.toString()); |
011 | System.out.println("程式執行結束"); |
012 | System.out.println(); |
013 | } |
014 | } |
015 | |
016 | /* 檔名: Demo.java |
017 | 作者: Kaiching Chang |
018 | 時間: September, 2014 */ |
第 6 行,變數 o 為對 Object 型態物件的參考
006 | Object o = new Object(); |
建立物件須使用關鍵字 new ,以及物件的建構子 (constructor) 。建構子類似物件的方法 (method) ,用來專門建立物件之用。一旦物件建立之後,物件就會包含許多屬性 (field) 與方法。
Object 型態的物件為 Java 所有物件之母,這是說, Java 中所有物件都繼承 (inherit) 自 Object 。繼承 (inheritance) 是物件導向程式語言 (object-oriented programming language) 中的一項重要特性,使類別 (class) 可以衍生自其他類別,子類別 (subclass) 可以擁有父類別 (superclass) 的特性。
繼承的英文原文為 inherit ,中文意思泛指從什麼得到什麼,生物學上的遺傳也是用這個詞。
由於 Object 型態為物件之母,因此 Object 型態的方法,也都會被 Java 中所有物件所繼承
回傳型態 | 名稱 | 功能 |
---|---|---|
Object | o.clone() | 複製回傳 o 本身的拷貝 |
boolean | o.equals(Object obj) | 判斷 obj 是否與 o 相同 |
void | o.finalize() | 呼叫資源回收者檢查此物件是否應該被回收 |
Class<?> | o.getClass() | 回傳類別名稱 |
int | o.hashCode() | 回傳物件的雜湊碼 |
void | o.notify() | 喚醒等待中的單一執行緒 (thread) |
void | o.notifyAll() | 喚醒等待中的所有執行緒 |
String | o.toString() | 回傳物件的字串表達形式 |
void | o.wait() | 使 o 的執行緒進行等待 |
void | o.wait(long timeout) | 使 o 的執行緒進行等待 |
void | o.wait(long timeout, int nanos) | 使 o 的執行緒進行等待 |
有沒有看到,光是 Object 裡頭就有這麼多東東,所以變數裝的下對物件的參考,裝不了整個物件 :)
有一個特別的字面常數 null ,一旦物件的參考變數指向 null ,就表示參考變數失去對這個原本物件的連結,如果沒有其他的變數指向這個物件,這個物件就會被資源回收者 (garbage collector) 進行資源回收,好挪出記憶體空間,給其他程式利用。
另有一個特別的物件,說是特別其實也是太常使用了,就是字串 (string) 。程式中經常處理大量的字串工作,因此字串有專門的字面常數表示方法,也就是用雙引號圍起來的內容就是字串,例如
String q = "There is no spoon."; | |
String r = "偷得浮生半日閒"; |
Demo.java 中的 o.toString() ,就是回傳 o 的字串表達形式,也就是一個字串物件。其他 println() 的參數都需要用到字串,我們直接提供字串的字面常數。
從 a 到 r 都是變數,變數取名有一定的規範,接下來,我們來看看變數命名規則吧!
中英文術語對照
變數 | variable |
基本資料型態 | primitive data type |
物件 | object |
參考 | reference |
字面常數 | literal |
數值 | value |
布林值 | Boolean value |
字元 | character |
整數 | integer |
浮點數 | floating-point number |
宣告 | declare |
變數 | variable |
關鍵字 | keyword |
建構子 | constructor |
方法 | method |
屬性 | field |
繼承 | inherit |
繼承 | inheritance |
物件導向程式語言 | object-oriented programming language |
類別 | class |
子類別 | subclass |
父類別 | superclass |
執行緒 | thread |
資源回收者 | garbage collector |
字串 | string |
重點整理
- Java 的變數有兩種,基本資料型態直接存在變數之中,物件在變數裡儲存的是參考。
- 基本資料型態有八種,可分為整數、浮點數、布林值及字元等四大類。
- 整數型態使用關鍵字 byte 、 short 、 int 及 long ,依所佔位元數有不同的數字儲存範圍,程式中直接寫出來的數字為 int 型態。
- 浮點數型態使用關鍵字 float 及 double ,依所佔位元數有不同的數字儲存範圍,程式中直接寫出來帶有小數點的數字為 double 型態。
- 布林型態使用關鍵字 boolean ,字面常數為 true 及 false 。
- 字元型態使用關鍵字 char ,字面常數為單引號圍起來的單一字母或符號。
- 跳脫字元為一些不可見字元,由反斜線開始加上特定的英文字母或符號。
- 物件有屬性及方法,屬性為物件專屬的變數,方法則是執行特定的工作, Java 中所有物件都繼承自 Object 型態。
- null 是種特別的字面常數,表示什麼都沒有。
- 字串是處理文字符號的物件,字面常數為雙引號圍起來的內容。
問題與討論
- 為什麼變數要分成基本資料型態與參考兩種?不能都是物件嗎?
- 基本資料型態有哪八種?
- 字元跟字串有什麼不同?
- 為什麼要有 null ? null 在程式中的用途為何?
the end
1 則留言:
-----------------------引用自本文----------------
回傳型態 名稱 功能
Object o.clone() 複製回傳 o 本身的拷貝
boolean o.equals(Object obj) 判斷 obj 是否與 o 相同
void o.finalize() 呼叫資源回收者檢查此物件是否應該被回收
Class o.getClass() 回傳類別名稱
int o.hashCode() 回傳物件的雜湊碼
void o.notify() 喚醒等待中的單一執行緒 (thread)
void o.notifyAll() 喚醒等待中的所有執行緒
String o.toString() 回傳物件的字串表達形式
void o.wait() 使 o 的執行緒進行等待
void o.wait(long timeout) 使 o 的執行緒進行等待
void o.wait(long timeout, int nanos) 使 o 的執行緒進行等待
-------------------------------------------------------
作者您好,我是初學者,我測試了一下用其他物件執行上述的fialize()方法。
但JVM顯示說這是protected,所以無法使用
那到底可以做甚麼樣的應用?
張貼留言