490 likes | 671 Views
Java 語言基礎三 Java 運算元、 Pass by value 、 jar 的應用. 課程大綱. Java 的運算元 算數運算元 (Arithmatic Operator) 關係運算元 (Relational Operator) 邏輯運算元 (Logic Operator) 指定運算元 (Assignment Operator) 三元運算元 (Ternary Operator) Java 運算元的優先順序 Pass by value (傳值) JAR file 的應用. 課程大綱. Java 的運算元
E N D
Java 語言基礎三Java運算元、Pass by value、jar的應用
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
一、Java 的運算元 • 在Java程式當中運算元可分為以下三種: • 單元(一元)運算元例如:+2,-2。 • 雙元運算元例如:2-1,3*2。 • 三元運算元例如:(2>1)? true : false(? :)。
一、Java 的運算元 • 各運算元在實作上依不同的運用方式可再分為以下幾類型: • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 位元運算元(Bitwise Operator) - SCJP 5.0 不考 • 位移運算元(Shift Operator) - SCJP 5.0 不考 • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator)
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
二、算數運算元(Arithmatic Operator) • 算數運算元如下表所示:
二、算數運算元(Arithmatic Operator) • 算數運算元如下表所示(續):
二、算數運算元(Arithmatic Operator) • 值域在 int(含) 以下的四則運算: • 例如:byte, short, char 在做四則運算的時候,其當下運算時的資料型別會被轉成 int,所以要適時地做型別轉換! • 範例:byte x = 1, y = 2, z;z = x + y; • 編譯時會發生精度錯誤(possible loss of precision),所以必須要轉型。
二、算數運算元(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);
二、算數運算元(Arithmatic Operator) • 遞增運算範例: • int a = 0, b = 0;b = a+++++a - a++;求 a , b? • 答案:a = 3, b = 0
二、算數運算元(Arithmatic Operator) • 速算法: • Step 1:先將有 ++的部份用 ( )括起來。 • int a = 0, b = 0;b = a+++++a - a++; b = a(++)+(++)a – a(++);
二、算數運算元(Arithmatic Operator) • 速算法: • Step 2:遇到 ++時將所指定之變數做加 1的動作。 • int a = 0 , b = 0;b = a(++)+(++)a – a(++); 1 2 3 ; (1) (2) 2 – 2 (3) b = 0 +
二、算數運算元(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
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
三、關係運算元(Relational Operator) • 關係運算元如下表所示:
三、關係運算元(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
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
四、邏輯運算元(Logic Operator) • 邏輯運算元如下表所示:
四、邏輯運算元(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)。
四、邏輯運算元(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)。
四、邏輯運算元(Logic Operator) • 從以上的經驗,撰寫一個 |範例程式: • int a = 1, b = 2;if ((a < b) | (++a > 0)) { }System.out.println(“a=” + a); • 利用 |運算元先執行 (a < b) 傳回 true 之後再執行 (++a > 0) 的運算,因此最後 a 將會等於 2。
四、邏輯運算元(Logic Operator) • 從以上的經驗,撰寫一個 ||範例程式: • int a = 1, b = 2;if ((a < b) || (++a > 0)) { }System.out.println(“a=” + a); • 利用 ||運算元先執行 (a < b) 傳回 true,之後整個 ||將結束,因此最後 a 還是 1。
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
五、指定運算元(Assignment Operator) • 指定運算元如下表所示:
五、指定運算元(Assignment Operator) • 指定運算元如下表所示(續):
五、指定運算元(Assignment Operator) • 指定算元範例: • 範例一: • int a = 2;a = a * 2 - 3; // 先乘除後加減 • 答案:a = 1 • 範例二: • int a = 2;a *= 2 - 3; • a = 2 * (-1) // 會先做 2 – 3 • 答案:a = -2
五、指定運算元(Assignment Operator) • 賦值(=)沒有比較功能 • 賦值(=)沒有比較功能,有比較功能的是比較運算子(==)。 • 範例一:int a = 1; • 表示將 1 的整數值賦予(指派)給 a。 • 範例二:if (a == 1) ? • 判斷 a 的內容值是否等於整數 1,是的話回傳 true,反之則回傳 false。
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
六、三元運算元(Ternary Operator) • 三元運算子(Ternary Operator)其概念和一般if-else 條件敘述差不多,其表示方法如下: • X = (布林運算式) ? true-value:false-value • 其運算式是表示當(布林運算式)的回傳值為 true的時候,會進行冒號“:”左邊的敘述(true-value),反之則進行冒號右邊的敘述(false-value)給 X,問號 “?”則表示 if 的判斷。
六、三元運算元(Ternary Operator) • 三元運算子(Ternary Operator)範例程式: • String s = "";int i = 0, j = 1;s = (i < j) ? "正確" : "錯誤";System.out.println("s=" + s); • 執行結果:正確 true
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
七、Java 運算元的優先順序 • Java 運算元本身也有自己的運算優先順序,首先舉一個簡單的例子: • x = 1 + 2 * 3 求 x = ? • 得出的 x 值為7,而不是 9。這是因為我們都知道先乘除後加減的關係。
七、Java 運算元的優先順序 • 若將題目變得複雜一點... • x = 5 * 3 < 20 & 3 + 7 > 9 – 1 || 20 >= 20 – 30 && false • 這要如何計算呢??
七、Java 運算元的優先順序 • 因此我們必須了解在 Java 語言中不同運算元間的運算優先順序: 優先權值越小表示越先被運算 若碰到相同的優先權值 則看原運算式先碰到誰,誰就先做
七、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
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
八、Pass by value (傳值) • Java 中參數的指派都是傳遞目前 primitive type 的內容值或 reference type 的參照值。 • 其實說穿了就是傳遞 stack 的內容。 • 因此,這樣的方式稱之為 pass by value。
八、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將參照同一個物件
0xabc Java SCJP 5.0 o 0xabc obj 八、Pass by value (傳值) • 根據 pass by value,當呼叫 aMethod(obj) 時,表示將 obj 物件變數的 stack 的內容值 傳給 aMethod() 方法參數列中的 o 物件變數 0xabc
課程大綱 • Java 的運算元 • 算數運算元(Arithmatic Operator) • 關係運算元(Relational Operator) • 邏輯運算元(Logic Operator) • 指定運算元(Assignment Operator) • 三元運算元(Ternary Operator) • Java 運算元的優先順序 • Pass by value (傳值) • JAR file 的應用
九、JAR file 的應用 • JAR( Java Archive ) • 就是負責管理 Java classes 檔案的壓縮工具,將多個不同 package 下的多個 java classes 壓縮成一個 .jar 檔,以便於攜帶與部署。 • 在 \bin 目錄下提供了 jar.exe 工具來負責包裝與壓製。 • 在壓制的過程中預設使用 ZIP 壓縮格式。
九、JAR file 的應用 • META-INF 目錄 • 大多數 JAR 文件包含一個 META-INF 目錄,它用於說明部署時的相關數據與信息,如安全性和版本信息。 • JavaSE 平台識別並解釋 META-INF 目錄中的文件,以便部署與配置應用程式,其文件包含: • MANIFEST.MF:清單檔 • INDEX.LIST:索引資訊檔 • xxx.SF:JAR文件的簽名文件。 • xxx.DSA:與簽名文件相關聯的簽名程序塊文件,它存儲了用於簽名 JAR文件的公共簽名。
九、JAR file 的應用 • MANIFEST.MF 文件檔 • 這個 文件定義了以下常用的設定值:
九、JAR file 的應用 • 常見的 jar 工具用法、功能及命令:
九、JAR file 的應用 • jar 範例一: • 若要將 A.class 與 B.class 這二個類別檔案保存在名稱為 foo.jar 的歸檔中: • jar -cvf foo.jar A.class B.class • c:建立新的歸檔。 • v:在標準輸出中產生 verbose輸出。 • f:指定歸檔檔名 foo.jar。
九、JAR file 的應用 • jar 範例二: • 將 event 目錄下所產生的 classes 包裝成一個可以直接執行的 MemberForm.jar 檔,並且使用自定的 MANIFEST.MF 檔案內容。 • jar –cvfm MemberForm.jar MANIFEST.MF event/*.* • m:包含來自指定 manifest檔案也就是 MANIFEST.MF 的顯示資訊。
九、JAR file 的應用 • MANIFEST.MF檔案內容 • 注意在 : 後面要有半形空白: • 執行 jar命令 + 相關參數! • 執行 MemberForm.jar(雙擊) Manifest-Version: 1.0 Ant-Version: Created-By: Vincent Main-Class: event.MemberForm Class-Path: