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) 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

/*
 * 檔名: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() 的參數都需要用到字串,我們直接提供字串的字面常數。

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

相關教學影片

上一頁 單元 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. 布林型態只有 truefalse 兩種值。
問題與討論
1. 為什麼要把資料型態分成基本資料型態與參考?
2. 為什麼整數要分成四種?浮點數要分成兩種?
3. 什麼是物件之母?為什麼要有物件之母
4. 字串跟字元有何不同?
練習
1. 建立一個新專案 Exercise0301 ,裡頭宣告建立 int 型態的變數 a ,並將 a 設定為 1 ,繼續宣告建立 String 型態的變數 b ,將變數 b 設定為 "2" ,繼續宣告建立 double 型態的變數 c ,將變數 c 設定為 3.0 ,最後印出這三個變數。
2. 建立一個新專案 Exercise0302 ,裡頭建立一個變數 ab ,分別指派 truefalse ,然後印出來
3. 建立一個新專案 Exercise0303 ,用 '*' 印出一個三角形。