資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf ·...

34
2013/2/27 1 第二章 資料型別與運算子 本章投影片僅供本書上課教師使用非經同意請勿拷貝或轉載 2.1.1 識別字(Identifier) 設計程式時會對每個變數、類別、方法、物件 及套件命名以便在程式中識別。 這些變數、類別、物件等名稱稱為識別字 識別字是由一連串的字元組合而成。 程式編譯時,編譯器會將這些宣告的識別字 視為變數名稱、欄位資料名稱、方法、類別、 或是一個物件。

Upload: others

Post on 20-Aug-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

1

第二章

資料型別與運算子

本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載

2.1.1 識別字(Identifier)

設計程式時會對每個變數、類別、方法、物件

及套件命名以便在程式中識別。

這些變數、類別、物件等名稱稱為識別字。

識別字是由一連串的字元組合而成。

程式編譯時,編譯器會將這些宣告的識別字

視為變數名稱、欄位資料名稱、方法、類別、

或是一個物件。

Page 2: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

2

識別字命名時必須遵守下列規則:

識別字開頭字母

(a~z或A~Z)、底線(_)、或錢字號($) 。

識別字第二個後,只允許

大小寫字母(a~z或A~Z)、

數字(0~9)、底線(_)、錢字號($)等字元。

在Java中字母的大小寫視為不同的字元

識別字的長度不限。

Java 的保留字不允許當作識別字。

識別字中不可用特殊字元,如:+、-、*、/、’…等。

識別字儘量使用有意義單字,以提高程式可讀性。

2.1.2 保留字(Reserved word)

保留字又稱「關鍵字」。是指在程式語言中事先定義好

特別意義的識別字,設計時不可重複定義成不同用途。

Page 3: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

3

2.2 基本資料型別

2.2.1文字常值

Java 將文字常值分為:

1. 字元常值: 'A'、'b'、'5'、'中'

2. 字串常值: "GoodDay"、"1234"、"物件導向"

3. 逃逸字元:像單引號 (')、雙引號 (")及倒斜線 (\)

均已事先定義當做程式中的控制字元,將這些字元稱為逃逸字元。

Page 4: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

4

(1) System.out.println("八進制101的字元為:\101");

輸出結果:八進制101的字元為:A

(2) System.out.print("It\'s a Java.\n");

輸出結果:It's a Java.

(3) System.out.println("\'4\" is Four.");

輸出結果:'4" is Four.

Page 5: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

5

2.2.2 數值常值

數值常值包括整數及浮點數兩種資料。

Java 提供用來表示

整數常值資料型別:

byte、short、int、 long 四種。

浮點常值資料型別:

float、double 兩種。

一. 整數常值

Java 能處理的整數常值有三種進位:

十進位制(Decimal)

一般書寫方式

八進位制(Octal)

以數字0開頭,非字母O

十六進位制(Hexadecimal)

以 0x 或 0X 開頭

Page 6: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

6

二. 浮點常值 浮點常值又稱實數常值,需用小點數或科學符號來

作運算時使用。

浮點數兩種方式:

常用的小數點表示法,如3.14159;

可用標準 IEEE-754科學符號表示,如 1.23e+4 科學符號表示法。

合法的 double 常值表示方式:

3.1416、0.05、.3456、25.、25.0e-04 (值為0.0025)、

1.25e-3(值為0.00125)、25e+3(值為25000.0)

不合法的 double 常值表示方式:

-25e-0.5 、25.8e.3 、 .25E3 、 e-3

Page 7: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

7

2.2.3 布林(Boolean)常值

布林常值只有true(真)或false(假)兩種。

程式中可用此型別來代表條件值

使得程式能做決策。

關係運算式a > b,配合 if 或 for 敘述運算

傳回布林常值決定程式執行流程。

Java的布林值和C與C++語言不相同,

不允許使用 0 代表假,1 代表真。

2.3 變數(Variable)

變數是程式中用來儲存資料的地方。

變數內存放的值在程式執行過程中是可隨時改變。

常數(Constant)又稱常值(Literals)

整數常值 2,其值在程式執行過程中不能改變,永遠是 2,絕不可能變成 3。

Page 8: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

8

2.3.1 Variable

Java 使用變數前要先宣告。

宣告變數時須賦予變數名稱,告知編譯器該

變數屬於哪種資料型別,便可知記憶體配置

多少記憶空間來存放該變數內容。

變數名稱命名方式遵循識別字命名規則。

Java 變數宣告語法:

資料型別 變數名稱1[=初值1], [變數名稱2 [=初值2]…];

Java 兩種主要資料型別

1. 基本資料型別(Primitive Data Type)

Java 提供八種基本資料型別。此方式主要

是為提高效率,若把這些基本資料型別改成

物件,效率將大大地降低。

2. 參考資料型別(Reference Data Type)

是經由類別宣告,並用 new 保留字所產生的

物件實體變數,如物件的方法和資料宣告。

Page 9: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

9

int year;

int price=10,qty;

double height=178.8;

float weight=54.6F;

char continue=’y’;

bool yn=true;

2.3.2 指定變數的初值

宣告變數時,Java 允許同時指定初值

將此動作稱為「初始化」(Initialization) 。

int ages = 18;

上面敘述可如下面分成兩行敘述書寫

int ages;

ages = 18;

Page 10: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

10

2.4 運算子與運算式

「運算子」(Operator)是指可對運算元作特定運算符號 (像+、-、*、/)。

「運算元」(Operand)是指運算的對象,運算元可為 變數、常值或是運算式。

結合運算元與運算子所構成的計算式就是「運算式」(Expression)。

運算子若按照運算時所需要運算元數目分成:

1. 一元運算子(Unary Operator):如 -10、++k。

2. 二元運算子(Binary Operator):如 a + b

3. 三元運算子(Tenary Operator):如 max = a > b ? a : b;

Page 11: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

11

Java 按照運算子性質分七大類:

1. 指定運算子(Assignment Operator)

2. 算術運算子(Arithmetic Operator)

3. 關係運算子(Relational Operator)

4. 布林邏輯運算子(Boolean Logical Operator)

5. 位元邏輯運算子(Bit Logical Operator)

6. 遞增和遞減運算子 (Increment & Decrem

7. 移位運算子(Shift Operator)。

2.4.1 指定運算子

指定運算子表示符號用等號(=)

指定運算子會將等號右邊運算結果指定給

等號左邊的變數。

等號右邊可為運算式、常值或變數。

語法:

變數名稱 = [運算式|變數|常值] ;

Page 12: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

12

2.4.2 算術運算子

算術運算子是用來執行一般的數學運算

包括:加法(+)、減法(-)、乘法(*)、除法(/)、負數(-)、

取餘數(%)等:

Page 13: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

13

2.4.3 遞增和遞減運算子

屬一元運算子。

用來對目前的變數值作加1或減1。

若將運算子放在變數前如:++a或—a 稱為前置式,變數在運算式使用前先進行加1或減1動作。

若將運算子放在變數後,a++或a-- 稱為後置式

會先將變數值用於運算式中,後再對變數作加1

或減1動作。

Page 14: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

14

2.4.4 關係運算子(Relational Operator)

關係運算子又稱為比較運算子,可決定一個運算元與另外一個運算元間的關係,比較結果不是

true 或 false。

Page 15: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

15

2.4.5 邏輯運算子(Logical Operator)

條件判斷時可用邏輯運算子來連接兩個或以上

的關係運算式。

Page 16: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

16

2.4.6 位元運算子

位元(Bit)邏輯運算子是應用在整數資料型別和字元資料型別上,不是布林資料型別。

這些資料型別的資料都可用二進位數字來表示,再對

每個 Bit 做個別邏輯運算,每個 Bit 的運算結果不是0

就是1。

如:5210 轉成二進制 結果為 (00110100)2:

Page 17: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

17

Page 18: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

18

Page 19: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

19

Page 20: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

20

Page 21: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

21

2.4.7 移位運算子(Shift Operator)

移位運算子會把一個二進位數值向左或向右做位移。

Page 22: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

22

Page 23: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

23

2.5 Java Type Casting

資料型別轉換是指不同資料型別的資料必須

轉成相同資料型別才能運算,就是將一種資

料型別轉變成另一種資料型別。

在Java中,資料型別的轉換分成:

自動型資料型別轉換(Implicit cast)

強制型資料型別轉換 (Explicit cast)

2.5.1資料型別自動轉換

資料型別自動轉換的發生須符合兩種條件:

資料型別必須是相容

轉換後的目地資料型別所能儲存範圍

須大於轉換前的資料型別。

Page 24: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

24

2.5.2資料型別強制轉換

為讓兩個不相容資料型別能進行轉換,必須

使用資料強制轉換。

這類型的轉換稱為縮小轉換 。

語法:

(指定轉換的資類型別)變數或數值

Page 25: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

25

int num = 2147483648;

long num = 2147483648;

long num = 2147483648L;

例如:

double PI = 3.14;

float PI = 3.14;

float PI = 3.14F;

float PI = (float)3.14;

Page 26: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

26

2.6基本資料型別與參考資料型別

Java 物件變數 在記憶體內 Global、Stack、Heap各儲存空間的配置方式:

一. Global (全域資料)

使用 static 保留字宣告的資料成員變數都

存放在 Global 儲存空間稱為「靜態成員」

(或稱類別成員)。

靜態成員是類別中共用成員,並不是指特定

物件,不會因建立新物件實體再產生一個新

靜態成員,某一類別所產生的物件皆可共用

靜態成員的資料。

Page 27: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

27

二. Stack(堆疊)

宣告屬於基本資料型別的變數皆儲放在 Stack

記憶空間,如char、byte、short、int、long、float、double、boolean八種型別變數。

Stack 記憶空間是直接存放變數的內容,好處

是佔用記憶體空間小存取速度快。

下面三行敘述說明 Stack 儲存變數與配置方式:

Page 28: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

28

三. Heap(堆積)

Heap中存放參考資料型別的物件實體。

當宣告屬於參考資料型別物件變數時會在Stack堆疊

中配置一塊記憶空間用來存放該物件變數的參考值(並非資料本身,而是資料的位址)。

當用 new 建立新物件實體時會在Heap中配置一塊記憶

空間用來存放物件實體(指的是資料本身),此時Stack中的物件變數參考值會指向Heap中該物件實體

參考型別變數都以間接方式設定或取得資料,像陣列、類別、

字串…等都是屬於參考資料型別。

Page 29: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

29

2.7 主控台輸入與輸出

所有的 Java 程式都會自動載入 java.lang

這個基本package(套件)。

此套件定義一個叫 System 的類別。

此類別有許多執行時期環境方面方法,

如用它的方法可取得目前時間及與系統

有關一些設定。

Page 30: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

30

System 類別定義三個重要資料串流變數:

System.out(標準輸出資料串流) 預設為主控台(一般指的是螢幕),在之前的 程式中經常出現

System.in(標準輸入資料串流) 預設為鍵盤,也是本節所要介紹的重點所在。

System.err(標準錯誤資料串流) 預設也是主控台。

一. 輸出

System.out 物件提供

println()、print()、printf() 及 format()方法

皆可用來輸出資料。

println()方法輸出資料後會再進行換列。

System.out.println(要輸出的資料或變數);

System.out.print(要輸出的資料或變數);

System.out.printf(格式化字串,變數1,變數2…);

System.out.format(格式化字串,變數1,變數2…);

Page 31: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

31

二. 輸入

主控台輸入資料,可透過 Scanner 類別物件。

此類別在 java.util 套件下,使用前

在程式開頭撰寫import java.util.*; 載入此套件

或在程式開頭撰寫 import java.util.Scanner;

載 入Scanner類別

才可用較簡潔名稱來使用 Scanner 類別。

使用Scanner前要使用new新增一個 Scanner物件,

新增 Scanner 物件時需一個 System.in 物件

語法:

Scanner 物件名稱 = new Scanner(System.in);

Page 32: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

32

Page 33: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

33

2.8 認證實例演練

Page 34: 資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf · 程式中可用此型別來代表條件值 使得程式能做決策。 關係運算式a

2013/2/27

34