Java 入門指南 V2.00 - 單元 3 - 基本資料型態、物件與參考




Java 中的變數 (variable) 有兩種,一種是基本資料型態 (primitive data type) ,另一種則是對物件 (object) 的參考 (reference)



基本資料型態共有八種,如下表


型態類型關鍵字位元數範圍
整數byte8-128 ~ 127
整數short16-32768 ~ 32767
整數int32-2147483648 ~ 2147483647
整數long64-9223372036854775808 ~ 9223372036854775807
浮點數float32依據 IEEE 754 標準
浮點數double64依據 IEEE 754 標準
布林值boolean1true, flase
字元char16'\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) booleantrue 為布林值的字面常數,表示邏輯上的真,布林型態的另一個字面常數為 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 型態又被稱為長整數,字面常數須加上英文字母 Ll 的字尾,如


   long m = 220L; // 長整數 220
   long n = 220l; // 長整數 220

浮點數型態有兩種,最常使用的是 double 型態,沒有特別指定的浮點數字面常數也會是 double 型態,若是需要使用 float 型態的浮點數,需要在字面常數加上 Ff 的字尾,如


   float o = 22.0F; // 浮點數 22.0
   float p = 22.0f; // 浮點數 22.0

除了以上八種基本資料型態之外,其餘的變數都是指向物件的參考,可以想像變數本身就是容器,基本資料型態所含的數值大小可以直接裝進變數之中,但是物件太大,塞不進變數裡頭,因此物件變數裡所裝的是對物件的連結,也就是參考。


例如 Demo.java


001// 宣告類別名稱
002public 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 型態物件的參考


006Object o = new Object()

建立物件須使用關鍵字 new ,以及物件的建構子 (constructor) 。建構子類似物件的方法 (method) ,用來專門建立物件之用。一旦物件建立之後,物件就會包含許多屬性 (field) 與方法。


Object 型態的物件為 Java 所有物件之母,這是說, Java 中所有物件都繼承 (inherit) 自 Object 。繼承 (inheritance) 是物件導向程式語言 (object-oriented programming language) 中的一項重要特性,使類別 (class) 可以衍生自其他類別,子類別 (subclass) 可以擁有父類別 (superclass) 的特性。


繼承的英文原文為 inherit ,中文意思泛指從什麼得到什麼,生物學上的遺傳也是用這個詞。

由於 Object 型態為物件之母,因此 Object 型態的方法,也都會被 Java 中所有物件所繼承


回傳型態名稱功能
Objecto.clone()複製回傳 o 本身的拷貝
booleano.equals(Object obj)判斷 obj 是否與 o 相同
voido.finalize()呼叫資源回收者檢查此物件是否應該被回收
Class<?>o.getClass()回傳類別名稱
into.hashCode()回傳物件的雜湊碼
voido.notify()喚醒等待中的單一執行緒 (thread)
voido.notifyAll()喚醒等待中的所有執行緒
Stringo.toString()回傳物件的字串表達形式
voido.wait()使 o 的執行緒進行等待
voido.wait(long timeout)使 o 的執行緒進行等待
voido.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() 的參數都需要用到字串,我們直接提供字串的字面常數。


ar 都是變數,變數取名有一定的規範,接下來,我們來看看變數命名規則吧!


中英文術語對照


變數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

重點整理


  1. Java 的變數有兩種,基本資料型態直接存在變數之中,物件在變數裡儲存的是參考。
  2. 基本資料型態有八種,可分為整數、浮點數、布林值及字元等四大類。
  3. 整數型態使用關鍵字 byteshortintlong ,依所佔位元數有不同的數字儲存範圍,程式中直接寫出來的數字為 int 型態。
  4. 浮點數型態使用關鍵字 floatdouble ,依所佔位元數有不同的數字儲存範圍,程式中直接寫出來帶有小數點的數字為 double 型態。
  5. 布林型態使用關鍵字 boolean ,字面常數為 truefalse
  6. 字元型態使用關鍵字 char ,字面常數為單引號圍起來的單一字母或符號。
  7. 跳脫字元為一些不可見字元,由反斜線開始加上特定的英文字母或符號。
  8. 物件有屬性及方法,屬性為物件專屬的變數,方法則是執行特定的工作, Java 中所有物件都繼承自 Object 型態。
  9. null 是種特別的字面常數,表示什麼都沒有。
  10. 字串是處理文字符號的物件,字面常數為雙引號圍起來的內容。

問題與討論


  1. 為什麼變數要分成基本資料型態與參考兩種?不能都是物件嗎?
  2. 基本資料型態有哪八種?
  3. 字元跟字串有什麼不同?
  4. 為什麼要有 nullnull 在程式中的用途為何?

the end

1 則留言:

Unknown 提到...

-----------------------引用自本文----------------

回傳型態 名稱 功能
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,所以無法使用

那到底可以做甚麼樣的應用?