java 語言基礎三 java 運算元、 pass by value 、 jar 的應用

49
Java 語語語語語 Java 語語語Pass by value jar 語語語

Upload: malise

Post on 07-Jan-2016

93 views

Category:

Documents


0 download

DESCRIPTION

Java 語言基礎三 Java 運算元、 Pass by value 、 jar 的應用. 課程大綱. Java 的運算元 算數運算元 (Arithmatic Operator) 關係運算元 (Relational Operator) 邏輯運算元 (Logic Operator) 指定運算元 (Assignment Operator) 三元運算元 (Ternary Operator) Java 運算元的優先順序 Pass by value (傳值) JAR file 的應用. 課程大綱. Java 的運算元 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

Java 語言基礎三Java 運算元、 Pass by value 、 jar 的應用

Page 2: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 3: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 4: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

一、 Java 的運算元• 在 Java 程式當中運算元可分為以下三種:– 單元 ( 一元 ) 運算元

例如: +2 , -2 。– 雙元運算元

例如: 2-1 , 3*2 。– 三元運算元

例如: (2>1)? true : false(? :) 。

Page 5: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

一、 Java 的運算元• 各運算元在實作上依不同的運用方式可再分為以

下幾類型:– 算數運算元 (Arithmatic Operator)– 關係運算元 (Relational Operator)– 邏輯運算元 (Logic Operator)– 位元運算元 (Bitwise Operator) - SCJP 5.0 不考– 位移運算元 (Shift Operator) - SCJP 5.0 不考– 指定運算元 (Assignment Operator)– 三元運算元 (Ternary Operator)

Page 6: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 7: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 算數運算元如下表所示:

運算元 說明 範例 運算元類別

+ 正號 +2 取得正數 2 單元

加法 2 + 1 = 3 雙元- 負號 -2 取得負數 2 單元

減法 2 – 1 = 1 雙元* 乘法 2 * 3 = 6 雙元/ 除法 4 / 2 = 2 雙元% 餘數 3 % 2 = 1 ,求得 3 除以 2 的餘數 雙元

Page 8: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 算數運算元如下表所示(續):

運算元 說明 範例 運算元類別

++ 遞增 前序遞增: int A = 0 ; A = ++A ;表示 A 先加上 1 之後再指派給 A 所以 A=1 。

雙元

後序遞增: int A = 0 ; A = A++ ;表示 A (此時的 A=0 )會先指派給 A 之後才會執行 ++ 的動作但 A 仍然是 0 。

-- 遞減 前序遞減: int A = 0 ; A = - -A ;表示 A 先減 1 之後再指派給 A 所以 A = - 1

雙元

後序遞減: int A = 0 ; A = A- - ;表示 A (此時的 A=0 )會先指派給 A 之後才會執行 -- 的動作但 A 仍然是 0 。

Page 9: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 值域在 int( 含 ) 以下的四則運算:– 例如: byte, short, char 在做四則運算的時候,

其當下運算時的資料型別會被轉成 int ,所以要適時地做型別轉換!

– 範例:byte x = 1, y = 2, z;z = x + y;

– 編譯時會發生精度錯誤 (possible loss of precision) ,所以必須要轉型。

Page 10: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 值域在 int( 含 ) 以下的四則運算(續):– 範例:

byte x = 1, y = 2, z;z = x + y;

– (x+y) 都要括起來,因為要將 x+y 的 int 運算結果轉成 byte 。

– 但不要寫成這樣:z = (byte)x + y; ,因為運算 +y 型別還是 int ,仍然會發生精度錯誤!

z = (byte)(x + y);

Page 11: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 遞增運算範例:• int a = 0, b = 0;

b = a++ + ++a - a++;求 a , b ?

• 答案: a = 3, b = 0

Page 12: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 速算法:• Step 1 :先將有 ++ 的部份用 ( ) 括起來。 • int a = 0, b = 0;

b = a++ + ++a - a++;b = a(++) + (++)a – a(++);

Page 13: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 速算法:• Step 2 :遇到 ++ 時將所指定之變數做加 1

的動作。 • int a = 0 , b = 0;

b = a(++) + (++)a – a(++);

b =

0 (1)

+ – (2)

2 2 (3)

;

123

Page 14: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

二、算數運算元 (Arithmatic Operator)

• 速算法:• Step 3 :去括號求 b 值。 • int a = 3 , b = 0;

b = 0(1) + (2)2 – 2(3);b = 0 + 2 – 2 b = 0最後得出的結果 a = 3, b = 0

Page 15: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 16: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

三、關係運算元 (Relational Operator)

• 關係運算元如下表所示:

運算元 說明 範例 運算元類別

== 等於 a == b 雙元

!= 不等於 a != b 雙元

> 大於 a > b 雙元

< 小於 a < b 雙元

>= 大於等於 a >= b 雙元

<= 小於等於 a <= b 雙元

Page 17: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

三、關係運算元 (Relational Operator)

• 關係運算元的傳回值為布林值 (true 或 false)• 關係運算元使用範例:– 假設: int a = 1, b = 2;– a == b return false– a > b return false– a < b return true– a >= b return false– a <= b return true

Page 18: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 19: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

四、邏輯運算元 (Logic Operator)• 邏輯運算元如下表所示:

運算元 說明 範例 運算元類別& AND a & b 雙元

| OR a | b 雙元

! NOT ! a 單元

( 短路 )Short-circuit Operator

&& AND a && b 雙元

|| OR a || b 雙元

Page 20: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

四、邏輯運算元 (Logic Operator)

• | 與 || 運算範例:– 假設: int a = 1, b = 2;– (b > a) | (a < 0)– 在 | 的運算上會先運算 (b > a) ,不論傳回值是

true 或者是 false 皆會執行下一組運算 (a < 0) 。

– (b > a) || (a < 0)– 在 || 的運算上同樣也會先運算 (b > a) 若傳回

值為 true 則不會執行下一組運算 (a < 0) 。

Page 21: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

四、邏輯運算元 (Logic Operator)

• & 與 && 運算範例:– 假設: int a = 1, b = 2;– (a > b) & (a < 0)– 在 & 的運算上會先運算 (a > b) ,不論傳回值

是 true 或者是 false 皆會執行下一組運算 (a < 0) 。

– (a > b) && (a < 0)– 在 && 的運算上會先運算 (a > b) ,因為其傳回

值為 false 所以不執行下一組運算 (a < 0) 。

Page 22: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

四、邏輯運算元 (Logic Operator)

• 從以上的經驗,撰寫一個 | 範例程式:• int a = 1, b = 2;

if ((a < b) | (++a > 0)) { }System.out.println(“a=” + a);

• 利用 | 運算元先執行 (a < b) 傳回 true 之後再執行 (++a > 0) 的運算,因此最後 a 將會等於 2 。

Page 23: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

四、邏輯運算元 (Logic Operator)

• 從以上的經驗,撰寫一個 || 範例程式:• int a = 1, b = 2;

if ((a < b) || (++a > 0)) { }System.out.println(“a=” + a);

• 利用 || 運算元先執行 (a < b) 傳回 true ,之後整個 || 將結束,因此最後 a 還是 1 。

Page 24: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 25: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

五、指定運算元 (Assignment Operator)

• 指定運算元如下表所示:運算元 說明 範例 類別= 基本指定 a = b 單元+= 加法指定 a += b a = a + b 雙元-= 減法指定 a - = b a = a - b 雙元*= 乘法指定 a *= b a = a * b 雙元/= 除法指定 a /= b a = a / b 雙元%= 餘數指定 a %= b a = a % b 雙元

Page 26: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

五、指定運算元 (Assignment Operator)

• 指定運算元如下表所示(續):運算元 說明 範例 類別&= AND 指定 a &= b a = a & b 雙元|= OR 指定 a |= b a = a | b 雙元^= XOR 指定 a ^= b a = a ^ b 雙元>>= 算數右移指定 a >>= b a = a >> b 雙元<<= 算數左移指定 a <<= b a = a << b 雙元>>>= 邏輯右移指定 a >>>= b a = a >>> b 雙元

Page 27: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

五、指定運算元 (Assignment Operator)

• 指定算元範例:– 範例一:– int a = 2;

a = a * 2 - 3; // 先乘除後加減– 答案: a = 1– 範例二:– int a = 2;

a *= 2 - 3; – a = 2 * (-1) // 會先做 2 – 3– 答案: a = -2

Page 28: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

五、指定運算元 (Assignment Operator)

• 賦值( = )沒有比較功能– 賦值( = )沒有比較功能,有比較功能的是比

較運算子( == )。– 範例一: int a = 1;– 表示將 1 的整數值賦予(指派)給 a 。– 範例二: if (a == 1) ?– 判斷 a 的內容值是否等於整數 1 ,是的話回

傳 true ,反之則回傳 false 。

Page 29: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 30: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

六、三元運算元 (Ternary Operator)

• 三元運算子 (Ternary Operator) 其概念和一般if-else 條件敘述差不多,其表示方法如下:– X = ( 布林運算式 ) ? true-value: false-value– 其運算式是表示當 ( 布林運算式 ) 的回傳值為 true 的時

候,會進行冒號“:”左邊的敘述 (true-value) ,反之則進行冒號右邊的敘述 (false-value) 給 X ,問號 “ ?” 則表示 if 的判斷。

Page 31: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

六、三元運算元 (Ternary Operator)

• 三元運算子 (Ternary Operator) 範例程式:– String s = "";

int i = 0, j = 1;s = (i < j) ? " 正確 " : " 錯誤 ";

System.out.println("s=" + s);

– 執行結果:正確

true

Page 32: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 33: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

七、 Java 運算元的優先順序• Java 運算元本身也有自己的運算優先順序,

首先舉一個簡單的例子:– x = 1 + 2 * 3 求 x = ?– 得出的 x 值為 7 ,而不是 9 。這是因為我們

都知道先乘除後加減的關係。

Page 34: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

七、 Java 運算元的優先順序• 若將題目變得複雜一點 ...– x = 5 * 3 < 20 & 3 + 7 > 9 – 1 || 20 >= 20 – 30

&& false

– 這要如何計算呢??

Page 35: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

七、 Java 運算元的優先順序• 因此我們必須了解在 Java 語言中不同運算元間的運算優先順序:

優先權值越小表示越先被運算

若碰到相同的優先權值

則看原運算式先碰到誰,誰就先做

優先順序 運算符

1 () [] .

2 ! +(正 )  -(負 ) ~ ++ --

3 * / %

4 +(加 ) -(減 )

5 << >> >>>

6 < <= > >= instanceof

7 ==   !=

8 &

9 ^

10 |

11 &&

12 ||

13 ?:

14 = += -= *= /= %= &= |= ^=  ~=  <<= >>=   >>>=

Page 36: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

七、 Java 運算元的優先順序

• 解析:• x = 5 * 3 < 20 & 3 + 7 > 9 – 1 || 20 >= 20 – 30 && false• 先算 5*3 、 3+7 、 9-1 、 20-30 的結果• 15 < 20 & 10 > 8 || 20 >= -10 && false• 再算 15 < 20 、 10 > 8 、 20 >= -10 的結果• true & true || true && false• 再算 true & true 的結果• true || true && false• 再算 true && false 的結果• true || false• x = true

Page 37: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 38: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

八、 Pass by value ( 傳值 )

• Java 中參數的指派都是傳遞目前 primitive type 的內容值或 reference type 的參照值。

• 其實說穿了就是傳遞 stack 的內容。• 因此,這樣的方式稱之為 pass by value 。

Page 39: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

八、 Pass by value ( 傳值 )

• Pass by value 範例:

public static void main(String[] args) { String[] obj = {“Java”, “SCJP 5.0”}; aMethod(obj);}public static void aMethod(String[] o) { // block of code System.out.println(o);}

傳遞 obj 物件的參考值

此時的 o 與 obj 將參照同一個物件

Page 40: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

八、 Pass by value ( 傳值 )

• 根據 pass by value ,當呼叫 aMethod(obj) 時,表示將 obj 物件變數的 stack 的內容值 傳給 aMethod() 方法參數列中的 o 物件變數

0xabcobj

o Java SCJP 5.0

0xabc0xabc

Page 41: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

課程大綱.壹 Java 的運算元

貳. 算數運算元 (Arithmatic Operator)參. 關係運算元 (Relational Operator)肆. 邏輯運算元 (Logic Operator)伍. 指定運算元 (Assignment Operator)陸. 三元運算元 (Ternary Operator)

.柒 Java 運算元的優先順序

.捌 Pass by value ( 傳值 )

.玖 JAR file 的應用

Page 42: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用 • JAR ( Java Archive )• 就是負責管理 Java classes 檔案的壓縮工具,

將多個不同 package 下的多個 java classes 壓縮成一個 .jar 檔,以便於攜帶與部署。

• 在 \bin 目錄下提供了 jar.exe 工具來負責包裝與壓製。

• 在壓制的過程中預設使用 ZIP 壓縮格式。

Page 43: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• META-INF 目錄– 大多數 JAR 文件包含一個 META-INF 目錄,它

用於說明部署時的相關數據與信息,如安全性和版本信息。

– JavaSE 平台識別並解釋 META-INF 目錄中的文件,以便部署與配置應用程式,其文件包含:MANIFEST.MF :清單檔INDEX.LIST :索引資訊檔xxx.SF : JAR 文件的簽名文件。 xxx.DSA :與簽名文件相關聯的簽名程序塊文件,它存儲了用於簽名 JAR 文件的公共簽名。

Page 44: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• MANIFEST.MF 文件檔 • 這個 文件定義了以下常用的設定值:

Manifest-Version: 1.0 Manifest 的版本

Ant-Version: Apache Ant 1.6.1 Ant 的版本

Created-By: Vincent 創始人

Main-Class: com.MyForm 主程式

Class-Path: 類別路徑

Page 45: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• 常見的 jar 工具用法、功能及命令:

-c 建立新的歸檔(歸檔指的就是 jar 檔)-t 列出歸檔的目錄-x 從歸檔擷取以命名的 ( 或全部 ) 檔案-u 更先現有的歸檔-v 在標準輸出中產生 verbose 輸出-f 指定歸檔檔名-m 包含來自指定 manifest 檔案的顯示資訊-0 不使用 ZIP 壓縮-M 不建立項目的 manifest 檔案-i 為指定的 jar 檔產生索引資訊-C 變更為指定的目錄並包含下列檔案

Page 46: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• jar 範例一:– 若要將 A.class 與 B.class 這二個類別檔案保存在名稱為 foo.jar 的歸檔中:

– jar -cvf foo.jar A.class B.class– c:建立新的歸檔。– v:在標準輸出中產生 verbose 輸出。– f:指定歸檔檔名 foo.jar 。

Page 47: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• jar 範例二:– 將 event 目錄下所產生的 classes 包裝成一個

可以直接執行的 MemberForm.jar 檔,並且使用自定的 MANIFEST.MF 檔案內容。

– jar –cvfm MemberForm.jar MANIFEST.MF event/*.*

– m:包含來自指定 manifest 檔案也就是 MANIFEST.MF 的顯示資訊。

Page 48: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用• MANIFEST.MF 檔案內容

–注意在 : 後面要有半形空白:• 執行 jar 命令 + 相關參數!• 執行 MemberForm.jar (雙擊)

Manifest-Version: 1.0Ant-Version: Created-By: VincentMain-Class: event.MemberFormClass-Path:

Page 49: Java  語言基礎三 Java 運算元、 Pass by value 、 jar 的應用

九、 JAR file 的應用