Java 入門指南

單元 3 - 基本資料型態與參考

~~學習進度表~~

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

variable → primitive data type
         ↘
          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;

宣告布林型態的變數使用關鍵字 (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 中

/*
 * 檔名:Demo.java
 * 作者:張凱慶
 * 網站:http://kaiching.org
 */
package demo;

// 宣告類別名稱
public class Demo {

    // 宣告 main() 方法
    public static void main(String[] args) {
        // 建立 Object 型態的物件
        Object o = new Object();
        
        // 於命令列印出訊息
        System.out.println();
        System.out.println(o.toString());
        System.out.println("程式執行結束");
        System.out.println();
    }
}

變數 o 為對 Object 型態物件的參考

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 中所有物件所繼承

回傳型態名稱功能
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() 的參數都需要用到字串,我們直接提供字串的字面常數。

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

相關教學影片

上一頁 單元 2 - 在 NetBeans 8.2 建立專案並執行
回 Java 入門指南首頁
下一頁 單元 4 - 變數命名規則
回 Java 教材首頁
回程式語言教材首頁
中英文術語對照
Boolean value布林值
character字元
class類別
constructor建構子
field屬性
floating-point number浮點數
garbage collector資源回收者
inherit, inheritance繼承
integer整數
keyword關鍵字
literal字面常數
method方法
object物件
object-oriented programming language物件導向程式語言
primitive data type基本資料型態
reference參考
string字串
subclass子類別
superclass父類別
value數值
variable變數
參考資料
1. The Java™ Tutorials: Variables
2. The Java™ Tutorials: Primitive Data Types
重點整理
1. Java 的資料型態分成兩大類型,基本資料型態與參考。
2. 使用變數前要先宣告,宣告後的變數可以用等號用字面常數指派數值,或是用關鍵字 new 建立物件。
3. 基本資料型態包括整數、浮點數、字元及布林,參考型態主要由類別定義。
4. 整數依據範圍及正負號有四種。
5. 浮點數依據範圍及精確度有兩種。
6. 字元為 16 位元的整數。
7. 布林型態只有 true 及 false 兩種值。
問題與討論
1. 為什麼要把資料型態分成基本資料型態與參考?
2. 為什麼整數要分成四種?浮點數要分成兩種?
3. 什麼是物件之母?為什麼要有物件之母
4. 字串跟字元有何不同?
練習
1. 建立一個新專案 Exercise0301 ,裡頭宣告建立 int 型態的變數 a ,並將 a 設定為 1 ,繼續宣告建立 String 型態的變數 b ,將變數 b 設定為 "2" ,繼續宣告建立 double 型態的變數 c ,將變數 c 設定為 3.0 ,最後印出這三個變數。
2. 建立一個新專案 Exercise0302 ,裡頭建立一個變數 a 、 b ,分別指派 true 及 false ,然後印出來
3. 建立一個新專案 Exercise0303 ,用 '*' 印出一個三角形。