Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java 語言基礎三 Java 運算元、 Pass by value 、 jar 的應用. 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)

Similar presentations


Presentation on theme: "Java 語言基礎三 Java 運算元、 Pass by value 、 jar 的應用. 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)"— Presentation transcript:

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

2 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

3 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

4 一、 Java 的運算元 在 Java 程式當中運算元可分為以下三種: – 單元 ( 一元 ) 運算元 例如: +2 , -2 。 – 雙元運算元 例如: 2-1 , 3*2 。 – 三元運算元 例如: (2>1)? true : false(? :) 。

5 一、 Java 的運算元 各運算元在實作上依不同的運用方式可再分為以 下幾類型: – 算數運算元 (Arithmatic Operator) – 關係運算元 (Relational Operator) – 邏輯運算元 (Logic Operator) – 位元運算元 (Bitwise Operator) - SCJP 5.0 不考 – 位移運算元 (Shift Operator) - SCJP 5.0 不考 – 指定運算元 (Assignment Operator) – 三元運算元 (Ternary Operator)

6 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

7 二、算數運算元 (Arithmatic Operator) 算數運算元如下表所示: 運算元說明範例 運算元 類別 + 正號 +2  取得正數 2 單元 加法 2 + 1 = 3 雙元 - 負號 -2  取得負數 2 單元 減法 2 – 1 = 1 雙元 * 乘法 2 * 3 = 6 雙元 / 除法 4 / 2 = 2 雙元 % 餘數 3 % 2 = 1 ,求得 3 除以 2 的餘數雙元

8 二、算數運算元 (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 。

9 二、算數運算元 (Arithmatic Operator) 值域在 int( 含 ) 以下的四則運算: – 例如: byte, short, char 在做四則運算的時候, 其當下運算時的資料型別會被轉成 int ,所以要 適時地做型別轉換! – 範例: byte x = 1, y = 2, z; z = x + y; – 編譯時會發生精度錯誤 (possible loss of precision) ,所以必須要轉型。

10 二、算數運算元 (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);

11 二、算數運算元 (Arithmatic Operator) 遞增運算範例: int a = 0, b = 0; b = a++ + ++a - a++; 求 a, b ? 答案: a = 3, b = 0

12 二、算數運算元 (Arithmatic Operator) 速算法: Step 1 :先將有 ++ 的部份用 ( ) 括起來。 int a = 0, b = 0; b = a++ + ++a - a++; b = a(++) + (++)a – a(++);

13 二、算數運算元 (Arithmatic Operator) 速算法: Step 2 :遇到 ++ 時將所指定之變數做加 1 的動作。 int a = 0, b = 0; b = a(++) + (++)a – a(++); b =0 (1)(1) + –(2)(2)22(3)(3) ; 123

14 二、算數運算元 (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

15 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

16 三、關係運算元 (Relational Operator) 關係運算元如下表所示: 運算元說明範例運算元類別 == 等於 a == b 雙元 != 不等於 a != b 雙元 > 大於 a > b 雙元 < 小於 a < b 雙元 >= 大於等於 a >= b 雙元 <= 小於等於 a <= b 雙元

17 三、關係運算元 (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

18 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

19 四、邏輯運算元 (Logic Operator) 邏輯運算元如下表所示: 運算元說明範例運算元類別 &ANDa & b 雙元 |ORa | b 雙元 !NOT! a 單元 ( 短路 )Short-circuit Operator &&ANDa && b 雙元 ||ORa || b 雙元

20 四、邏輯運算元 (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) 。

21 四、邏輯運算元 (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) 。

22 四、邏輯運算元 (Logic Operator) 從以上的經驗,撰寫一個 | 範例程式: int a = 1, b = 2; if ((a 0)) { } System.out.println( “ a= ” + a); 利用 | 運算元先執行 (a 0) 的運算,因此最後 a 將會等於 2 。

23 四、邏輯運算元 (Logic Operator) 從以上的經驗,撰寫一個 || 範例程式: int a = 1, b = 2; if ((a 0)) { } System.out.println( “ a= ” + a); 利用 || 運算元先執行 (a < b) 傳回 true ,之後整 個 || 將結束,因此最後 a 還是 1 。

24 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

25 五、指定運算元 (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 雙元

26 五、指定運算元 (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 雙元

27 五、指定運算元 (Assignment Operator) 指定算元範例: – 範例一: – int a = 2; a = a * 2 - 3; // 先乘除後加減 – 答案: a = 1 – 範例二: – int a = 2; a *= 2 - 3; – a = 2 * (-1) // 會先做 2 – 3 – 答案: a = -2

28 五、指定運算元 (Assignment Operator) 賦值( = )沒有比較功能 – 賦值( = )沒有比較功能,有比較功能的是比較 運算子( == )。 – 範例一: int a = 1; – 表示將 1 的整數值賦予(指派)給 a 。 – 範例二: if (a == 1) ? – 判斷 a 的內容值是否等於整數 1 ,是的話回傳 true ,反之則回傳 false 。

29 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

30 六、三元運算元 (Ternary Operator) 三元運算子 (Ternary Operator) 其概念和一般 if-else 條件敘述差不多,其表示方法如下: – X = ( 布林運算式 ) ? true-value : false-value – 其運算式是表示當 ( 布林運算式 ) 的回傳值為 true 的時候, 會進行冒號 “ : ” 左邊的敘述 (true-value) ,反之則進行冒 號右邊的敘述 (false-value) 給 X ,問號 “ ? ” 則表示 if 的判 斷 。

31 六、三元運算元 (Ternary Operator) 三元運算子 (Ternary Operator) 範例程式: – String s = ""; int i = 0, j = 1; s = (i < j) ? " 正確 " : " 錯誤 "; System.out.println("s=" + s); – 執行結果:正確 true

32 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

33 七、 Java 運算元的優先順序 Java 運算元本身也有自己的運算優先順序, 首先舉一個簡單的例子: – x = 1 + 2 * 3 求 x = ? – 得出的 x 值為 7 ,而不是 9 。這是因為我們都 知道先乘除後加減的關係。

34 七、 Java 運算元的優先順序 若將題目變得複雜一點... – x = 5 * 3 9 – 1 || 20 >= 20 – 30 && false – 這要如何計算呢??

35 七、 Java 運算元的優先順序 因此我們必須了解在 Java 語言中不同運算元間的運算優先順序: 優先順序運算符 1() []. 2 ! +( 正 ) -( 負 ) ~ ++ -- 3* / % 4 +( 加 ) -( 減 ) 5 > >>> 6 >= instanceof 7== != 8& 9^ 10| 11&& 12|| 13?: 14= += -= *= /= %= &= |= ^= ~= >= >>>=

36 七、 Java 運算元的優先順序 解析: x = 5 * 3 9 – 1 || 20 >= 20 – 30 && false 先算 5*3 、 3+7 、 9-1 、 20-30 的結果 15 8 || 20 >= -10 && false 再算 15 8 、 20 >= -10 的結果 true & true || true && false 再算 true & true 的結果 true || true && false 再算 true && false 的結果 true || false x = true

37 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

38 八、 Pass by value ( 傳值 ) Java 中參數的指派都是傳遞目前 primitive type 的內容值或 reference type 的參照值。 其實說穿了就是傳遞 stack 的內容。 因此,這樣的方式稱之為 pass by value 。

39 八、 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 將參照同一個物件

40 八、 Pass by value ( 傳值 ) 根據 pass by value ,當呼叫 aMethod(obj) 時, 表示將 obj 物件變數的 stack 的內容值 傳給 aMethod() 方法參數列中的 o 物件變數 0xabc objo JavaSCJP 5.0 0xabc

41 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)  指定運算元 (Assignment Operator)  三元運算元 (Ternary Operator) 七. Java 運算元的優先順序  Pass by value ( 傳值 )  JAR file 的應用

42 九、 JAR file 的應用 JAR ( Java Archive ) 就是負責管理 Java classes 檔案的壓縮工具, 將多個不同 package 下的多個 java classes 壓 縮成一個.jar 檔,以便於攜帶與部署。 在 \bin 目錄下提供了 jar.exe 工具來負責包 裝與壓製。 在壓制的過程中預設使用 ZIP 壓縮格式。

43 九、 JAR file 的應用 META-INF 目錄 – 大多數 JAR 文件包含一個 META-INF 目錄,它用 於說明部署時的相關數據與信息,如安全性和 版本信息。 – JavaSE 平台識別並解釋 META-INF 目錄中的文件, 以便部署與配置應用程式,其文件包含: MANIFEST.MF :清單檔 INDEX.LIST :索引資訊檔 xxx.SF : JAR 文件的簽名文件。 xxx.DSA :與簽名文件相關聯的簽名程序塊文件,它 存儲了用於簽名 JAR 文件的公共簽名。

44 九、 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: 類別路徑

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

46 九、 JAR file 的應用 jar 範例一: – 若要將 A.class 與 B.class 這二個類別檔案保存 在名稱為 foo.jar 的歸檔中: – jar -cvf foo.jar A.class B.class – c :建立新的歸檔。 – v :在標準輸出中產生 verbose 輸出。 – f :指定歸檔檔名  foo.jar 。

47 九、 JAR file 的應用 jar 範例二: – 將 event 目錄下所產生的 classes 包裝成一個可 以直接執行的 MemberForm.jar 檔,並且使用自 定的 MANIFEST.MF 檔案內容。 – jar –cvfm MemberForm.jar MANIFEST.MF event/*.* – m :包含來自指定 manifest 檔案也就是 MANIFEST.MF 的顯示資訊。

48 九、 JAR file 的應用 MANIFEST.MF 檔案內容 – 注意在 : 後面要有半形空白: 執行 jar 命令 + 相關參數! 執行 MemberForm.jar (雙擊) Manifest-Version: 1.0 Ant-Version: Created-By: Vincent Main-Class: event.MemberForm Class-Path:

49 九、 JAR file 的應用


Download ppt "Java 語言基礎三 Java 運算元、 Pass by value 、 jar 的應用. 課程大綱 一. Java 的運算元  算數運算元 (Arithmatic Operator) 三.關係運算元 (Relational Operator)  邏輯運算元 (Logic Operator)"

Similar presentations


Ads by Google