資料型別與運算子 - 南華大學csie2.nhu.edu.tw/files/personal_subject//64_62cd42e1.pdf ·...
TRANSCRIPT
2013/2/27
1
第二章
資料型別與運算子
本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
2.1.1 識別字(Identifier)
設計程式時會對每個變數、類別、方法、物件
及套件命名以便在程式中識別。
這些變數、類別、物件等名稱稱為識別字。
識別字是由一連串的字元組合而成。
程式編譯時,編譯器會將這些宣告的識別字
視為變數名稱、欄位資料名稱、方法、類別、
或是一個物件。
2013/2/27
2
識別字命名時必須遵守下列規則:
識別字開頭字母
(a~z或A~Z)、底線(_)、或錢字號($) 。
識別字第二個後,只允許
大小寫字母(a~z或A~Z)、
數字(0~9)、底線(_)、錢字號($)等字元。
在Java中字母的大小寫視為不同的字元
識別字的長度不限。
Java 的保留字不允許當作識別字。
識別字中不可用特殊字元,如:+、-、*、/、’…等。
識別字儘量使用有意義單字,以提高程式可讀性。
2.1.2 保留字(Reserved word)
保留字又稱「關鍵字」。是指在程式語言中事先定義好
特別意義的識別字,設計時不可重複定義成不同用途。
2013/2/27
3
2.2 基本資料型別
2.2.1文字常值
Java 將文字常值分為:
1. 字元常值: 'A'、'b'、'5'、'中'
2. 字串常值: "GoodDay"、"1234"、"物件導向"
3. 逃逸字元:像單引號 (')、雙引號 (")及倒斜線 (\)
均已事先定義當做程式中的控制字元,將這些字元稱為逃逸字元。
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.
2013/2/27
5
2.2.2 數值常值
數值常值包括整數及浮點數兩種資料。
Java 提供用來表示
整數常值資料型別:
byte、short、int、 long 四種。
浮點常值資料型別:
float、double 兩種。
一. 整數常值
Java 能處理的整數常值有三種進位:
十進位制(Decimal)
一般書寫方式
八進位制(Octal)
以數字0開頭,非字母O
十六進位制(Hexadecimal)
以 0x 或 0X 開頭
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
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。
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 保留字所產生的
物件實體變數,如物件的方法和資料宣告。
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;
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;
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 指定運算子
指定運算子表示符號用等號(=)
指定運算子會將等號右邊運算結果指定給
等號左邊的變數。
等號右邊可為運算式、常值或變數。
語法:
變數名稱 = [運算式|變數|常值] ;
2013/2/27
12
2.4.2 算術運算子
算術運算子是用來執行一般的數學運算
包括:加法(+)、減法(-)、乘法(*)、除法(/)、負數(-)、
取餘數(%)等:
2013/2/27
13
2.4.3 遞增和遞減運算子
屬一元運算子。
用來對目前的變數值作加1或減1。
若將運算子放在變數前如:++a或—a 稱為前置式,變數在運算式使用前先進行加1或減1動作。
若將運算子放在變數後,a++或a-- 稱為後置式
會先將變數值用於運算式中,後再對變數作加1
或減1動作。
2013/2/27
14
2.4.4 關係運算子(Relational Operator)
關係運算子又稱為比較運算子,可決定一個運算元與另外一個運算元間的關係,比較結果不是
true 或 false。
2013/2/27
15
2.4.5 邏輯運算子(Logical Operator)
條件判斷時可用邏輯運算子來連接兩個或以上
的關係運算式。
2013/2/27
16
2.4.6 位元運算子
位元(Bit)邏輯運算子是應用在整數資料型別和字元資料型別上,不是布林資料型別。
這些資料型別的資料都可用二進位數字來表示,再對
每個 Bit 做個別邏輯運算,每個 Bit 的運算結果不是0
就是1。
如:5210 轉成二進制 結果為 (00110100)2:
2013/2/27
17
2013/2/27
18
2013/2/27
19
2013/2/27
20
2013/2/27
21
2.4.7 移位運算子(Shift Operator)
移位運算子會把一個二進位數值向左或向右做位移。
2013/2/27
22
2013/2/27
23
2.5 Java Type Casting
資料型別轉換是指不同資料型別的資料必須
轉成相同資料型別才能運算,就是將一種資
料型別轉變成另一種資料型別。
在Java中,資料型別的轉換分成:
自動型資料型別轉換(Implicit cast)
強制型資料型別轉換 (Explicit cast)
2.5.1資料型別自動轉換
資料型別自動轉換的發生須符合兩種條件:
資料型別必須是相容
轉換後的目地資料型別所能儲存範圍
須大於轉換前的資料型別。
2013/2/27
24
2.5.2資料型別強制轉換
為讓兩個不相容資料型別能進行轉換,必須
使用資料強制轉換。
這類型的轉換稱為縮小轉換 。
語法:
(指定轉換的資類型別)變數或數值
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;
2013/2/27
26
2.6基本資料型別與參考資料型別
Java 物件變數 在記憶體內 Global、Stack、Heap各儲存空間的配置方式:
一. Global (全域資料)
使用 static 保留字宣告的資料成員變數都
存放在 Global 儲存空間稱為「靜態成員」
(或稱類別成員)。
靜態成員是類別中共用成員,並不是指特定
物件,不會因建立新物件實體再產生一個新
靜態成員,某一類別所產生的物件皆可共用
靜態成員的資料。
2013/2/27
27
二. Stack(堆疊)
宣告屬於基本資料型別的變數皆儲放在 Stack
記憶空間,如char、byte、short、int、long、float、double、boolean八種型別變數。
Stack 記憶空間是直接存放變數的內容,好處
是佔用記憶體空間小存取速度快。
下面三行敘述說明 Stack 儲存變數與配置方式:
2013/2/27
28
三. Heap(堆積)
Heap中存放參考資料型別的物件實體。
當宣告屬於參考資料型別物件變數時會在Stack堆疊
中配置一塊記憶空間用來存放該物件變數的參考值(並非資料本身,而是資料的位址)。
當用 new 建立新物件實體時會在Heap中配置一塊記憶
空間用來存放物件實體(指的是資料本身),此時Stack中的物件變數參考值會指向Heap中該物件實體
參考型別變數都以間接方式設定或取得資料,像陣列、類別、
字串…等都是屬於參考資料型別。
2013/2/27
29
2.7 主控台輸入與輸出
所有的 Java 程式都會自動載入 java.lang
這個基本package(套件)。
此套件定義一個叫 System 的類別。
此類別有許多執行時期環境方面方法,
如用它的方法可取得目前時間及與系統
有關一些設定。
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…);
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);
2013/2/27
32
2013/2/27
33
2.8 認證實例演練
2013/2/27
34