(Microsoft Word \265{\246\241\263]\255p_\244G_\255\253\302I\276\343\262z.doc)

Size: px
Start display at page:

Download "(Microsoft Word \265{\246\241\263]\255p_\244G_\255\253\302I\276\343\262z.doc)"

Transcription

1 2/22 1. 類別與物件 物件必屬於某種類別, 產生某類別 ( 例如 Car 類別 ) 的物件實體是呼叫 new Car(), 為了指稱 ( 參照 ) 所產生的物件, 須宣告該類別型態的變數, 例如 Car x; x = new Car(); 類別的定義 : 類別內基本上包含兩種東西 :(1) 屬性 (2) 方法 屬性或稱為欄位 (field): 描述類別或物件的特徵或狀態, 例如 Car 的速度 (speed) 顏色 (color) 方法 (method): 有關類別或物件的操作動作, 例如煞車 brake() 以下為 Car 之範例 : class Car { int color; // 預設值為 0 double speed; // 預設值為 0.0 void brake(){ speed = speed * 0.5; int getspeed(){ return speed; Car(){ // 建構方法 System.out.println(" 產生一部車 "); // 測試 建構方法在呼叫 new Car() 時被叫用, 用以初始化物件 建構方法有兩個要點要注意 :(1) 方法名稱即類別名稱 (2) 不可以寫回傳值型態或 void, 否則會視為一般的方法 相反地, 也有解構方法 void finalize() 解構方法是在物件死亡要被回收時被呼叫, 通常並不需要寫解 構方法 物件何時被回收很難說, 但至少是在不再被參照到之後才會被回收 2. 隱涵繼承 Object 類別的屬性方法 Object 類別是所有類別的始祖, 所有類別都會至少具有 Object 所定義的屬性與方法, 例如下列的 Dog 類別 class Dog {

2 雖然什麼屬性與方法都沒有定義, 但會擁有 Object 類別的屬性方法 ( 有關 Object 的屬性和方法, 請參 考 Java API), 也有建構方法與解構方法 class Test { public static void main(string[] args){ Dog y = new Dog(); System.out.println(y); Dog z = new Dog(); System.out.println(z); 會印出 Dog 物件的參照位址 事實上是使用 y 和 z 的 tostring() 方法印出的 因此, 上面的程式碼相當於 : class Dog extends Object { class Test { public static void main(string[] args){ Dog y = new Dog(); System.out.println(y.toString()); Dog z = new Dog(); System.out.println(z.toString()); tostring() 方法是來自 Object 在 Dog 類別大括號內加入屬性或方法可能有兩種意義 :(1) 新增加的 (2) 改寫繼承自 Object 的, 例如重新定義 Dog 類別如下 :( 加入了 count 和 age 屬性, 以及 tostring() 方法 bark() 方法和 getcount() 方法 ) class Dog { static int count; // 類別屬性 int age; // 物件屬性 public String tostring(){ // 物件方法 return "Dog"+ (count++); void bark(){ // 物件方法 System.out.println(" 旺旺!"); static int getcount(){ // 類別方法 return count;

3 則再次執行 Test, 會印出 Dog0 Dog1 本例的 tostring() 方法改寫 (override) 了來自 Object 的 tostring() 方法 注意 : 類別屬性 int count 前要寫 static,static 屬性或方法是屬於類別, 而不是屬於個別的 Dog 物件, 用以計數共有多少隻 Dog; 如果是個別 Dog 的年齡, 則是物件屬性, 不寫 static 3. 執行多個 class 的程式 java 檔中至少要有一個 class 含有 public static void main(string[] args) 方法, 若有多個 class 具有 main 方 法, 則須選擇其中一個 class 為主要 class, 程式從其中的 main 方法開始執行 2/24 1. 類別欄位與類別方法 : 有 static 關鍵字的, 是屬於類別的, 例如狗的總數 count ( 嚴格而言, 應該說 狗類物件的總數 ); 物件欄位與物件方法 : 沒有寫 static 關鍵字的, 是屬於物件個別擁有的, 例如狗的 年紀 age, 吠叫方法 bark(); 建構方法算是物件方法, 因為它用以建構物件, 且沒有 ( 不能寫 )static public class Dog { static int count; // 類別欄位 int age; // 物件欄位 void bark(){ // 物件方法 System.out.println(" 旺旺, 我 "+age+" 歲 "); System.out.println(" 共 "+ count + " 隻 "); // 建構方法, 物件方法 Dog(){ count++; public static void main(string[] args){ // 類別方法 Dog[] a = new Dog[10]; for (int i = 0; i < 10; i++){ a[i]= new Dog(); System.out.println(" 共有 " + count + " 隻狗 "); for (int i = 0; i < 10; i++) {

4 a[i].bark(); 2. 正常而言, 物件方法或欄位的引用, 應寫 物件. 物件方法 ( 如 a[i].bark()) 和 物件. 物件欄位 ( 如 a[i].age) 這樣的寫法, 而類別方法或欄位的引用, 應寫 類別名. 類別方法 (Dog.main(...)) 和 類 別名. 類別欄位 ( 如 Dog.count) 這樣的寫法 若是 類別名. 物件方法 ( 如 Dog.bark()) 與 類別名. 物件欄位 ( 如 Dog.age) 這種寫法是不可以的 理由是物件方法或欄位是屬於個別物件 ( 如某隻狗 a[i]) 所有, 不是類別 ( 如 Dog 類 ) 所有, 例如年紀 (age) 是狗 (a[i]) 個別的欄位, 不是狗類 (Dog) 的欄位 然而, 物件. 類別方法 與 物件. 類別欄位 ( 如 a[i].count) 這種寫法是可以的 理由是個別的物 件 ( 某隻狗 a[i]) 一定是狗類 (Dog) 的實例, 引用其類別欄位是合理的 3. 在類別方法中, 不可直接引用物件欄位或叫用物件方法, 除非是透過物件 例如,main 方法是 static, 所以是類別方法 ; 在 main 方法中, 就不能直接引用 age, 或呼叫 bark(), 而必須透過某隻狗 ( 物件 ), 寫成像 a[i].age 或 a[i].bark() 這樣才行 理由是物件方法或欄位是個別物件所擁有, 不是類別所擁有, 程式在 static 方法環境中, 是以類別 ( 狗類 ) 的觀點來看東西, 而不是以物件 ( 某隻狗 ) 的觀點來看東西 反過來, 如果在建構方法 ( 如 Dog()) 或是物件方法 ( 如 bark()) 中, 則可以直接引用其 class 中所定義的物件方法與物件欄位 ( 如 age), 也可以直接引用其 class 中所定義的類別方法與類別欄位, 因為在非 static 方法環境中, 是以個別物件 ( 某隻狗 ) 的觀點來看東西, 當然可以引用該物件的物件方法或欄位, 也可以引用其所屬類別的類別方法與欄位 4. 在建構方法或物件方法中, 可以使用 this. 物件方法 和 this. 物件欄位 這種寫法, 其中 this 表 示 物件本身 當然, 通常 this. 是可以省略的 注意, 在類別方法中, 不可以使用 this, 因為在此 環境中, 是以類別的觀點來看, 而不是以物件的觀點來看 因此, 在建構方法或物件方法中, 引用物件欄位, 通常可以有兩種不同的寫法, this. 物件欄位 ( 如 this.age) 或直接寫 物件欄位 ( 如 age) 同理, 在建構方法或物件方法中, 引用物件方法, 通常可以 有兩種不同的寫法, this. 物件方法 ( 如 this.bark()) 或直接寫 物件方法 ( 如 bark()) 在建構方法或物件方法中, 引用類別欄位, 通常可以有三種不同的寫法, 類別名. 類別欄位 ( 如 Dog.count), 或 this. 類別欄位 ( 如 this.count), 或直接寫 類別欄位 ( 如 count) 上述只針對欄位討 論, 此規則同樣可以適用於方法 5. 繼承關係 : 學生類是崑大學生類的父類別, 反之, 崑大學生類是學生類的子類別 因此, 崑大學生具有學生的所有欄位與方法 繼承的好處是可以省去重複開發的成本, 而只要將基礎類別加以擴充 (extend) 即可得到更高級的功能 Java API 即提供給我們許多有用的基礎類別, 如以下的 JFrame 類別, 可以用來建構視窗物件 6. 建構視窗畫面, 使用 JFrame 或 Frame 以下為範例程式碼 ( 使用 eclipse 自動產生基本的程式碼架 構 )

5 import java.awt.*; import javax.swing.*; public class TX extends JFrame { // 本類別繼承 JFrame public TX() throws HeadlessException { setsize(800, 600); // 設定大小 settitle("xxxxxxx"); // 設定標題 setdefaultcloseoperation(exit_on_close); // 關閉視窗時結束 JLabel lab = new JLabel(" 請輸入 :"); // 產生標籤文字 setlayout(new FlowLayout()); // 設定流水版面 add(lab); // 將上述產生的標籤文字加入版面中 JButton b = new JButton(" 按我 "); // 產生按鈕 JTextField t = new JTextField(40); // 產生文字盒 add(t); // 將上述產生的文字盒加入版面中 add(b); // 將上述產生的按鈕加入版面中 JTextArea ta = new JTextArea(25, 70); // 產生文字區塊 add(ta); // 將上述產生的文字區塊加入版面中 setvisible(true); // 設定顯示 public static void main(string[] args) { new TX(); // 產生本類別的物件 6. 在 eclipse 中, 可以使用按鍵 Ctrl+Shift+O 自動加入必要的 import 指令 然而, 當有多個套件有同樣的類別時, 有可能誤判, 例如第八題用到 import java.util.date 會誤植為 import java.sql.date 3/1 1. 產生會考第一題視窗畫面 : (1) 新建專案 (2) 新增類別 T1,SuperClass 瀏覽加入 JFrame, 將三個核取方塊都打勾 (3) 保留第一個建構方法, 其餘三個刪掉 (4)main 方法中, 寫 new T1();

6 (5) 在建構方法 T1() 中, 設定標題 :this.settitle("..."); 設定大小 :this.setsize(...,...); 設定版面 : this.setlayout(...); 設定關閉方式 this.setdefaultcloseoperation(...); 設定顯示 :this.setvisible(true); 並在 this.setvisible(true) 之前加入 (add) 元件 ( 依序為 : 標籤 文字欄位 按鈕 標籤 ) ( 利用 ctrl+shift+o 自動 import FlowLayout, JLabel, JTextField, JButton) 參考程式碼 : import java.awt.flowlayout; import java.awt.headlessexception; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jtextfield; public class T1 extends JFrame { JTextField t = new JTextField("", 40); JLabel r = new JLabel(" 結果 "); public T1() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 數學算式之求解 "); this.setsize(800, 600); this.setlayout(new FlowLayout()); this.setdefaultcloseoperation(exit_on_close); add(new JLabel(" 輸入數學運算式 ")); add(t); add(new JButton(" 執行 ")); add(r); this.setvisible(true); public static void main(string[] args) { new T1(); 注意 : 因為文字欄位 t 與結果標籤 r 會在其他方法引用到, 不可宣告在建構方法中, 必須宣告在建 構方法外面 2. 套件 (package):

7 (1) 若程式第一行有寫 package xxx; 則此程式 java 檔必須在 xxx 目錄中, 並稱此程式中所定義的類別 為屬於套件 xxx 的類別, 而 xxx 目錄之所在目錄為其所定義類別的 根目錄 例如 : 在 C:\ctlin\petter 目錄中, 撰寫一個 Y.java 檔, 內容如下 : package petter; // 須為第一行 public class Y { public int x = 5; public static void main(string[] args){ new petter.y(); 則 Y 類別是屬於 petter 套件中的類別 ( 以 petter.y 指稱之 ), 而 petter.y 類別的根目錄為 c:\ctlin (2) 如何編譯 : 如果沒有引用到任何類別, 則在什麼目錄底下打 javac 檔案所在路徑不會有什麼問題 但如果有引用到某個類別 ( 包括自身類別 ), 例如 new petter.y() 是引用到 petter 套件的 Y 類別, 則須確 保能找到被引用類別的根目錄 情況一 : 在被引用類別的根目錄下編譯 : 例如 C:\ctlin, 則不需要加 -classpath 選項 ( 或簡寫為 -cp), 如下 : C:\ctlin> javac petter\y.java 情況二 : 目前的所在目錄不是在被引用類別的根目錄, 例如 C:\, 則必須加 -classpath 選項告訴編譯器 有關被引用類別的根目錄, 如下 : C:\> javac -cp "C:\ctlin" C:\ctlin\petter\Y.java (3) 如何執行 : 同樣視被引用的類別而定 ( 包括欲執行的類別 ) 例如 : 假設在 c:\joyce 目錄中有一個 Test.java 檔, 具有做為主程式的 main 方法, 且其中用到上述定義的 petter.y 類別, 程式碼如下 : class Test{ public static void main(string[] args){ petter.y y1 = new petter.y(); System.out.println(y1.x); 則 Test 類別的根目錄是在 C:\joyce 編譯 Test.java 檔方式為 ( 注意 : 在 Test.java 檔之程式碼中, 只引用到 petter.y 類別 ): 情況一 : 在 C:\joyce 目錄下 : C:\joyce> javac -cp "C:\ctlin" Test.java

8 情況二 : 在 C:\ctlin 目錄下 : C:\ctlin> javac C:\joyce\Test.java 情況三 : 在其他目錄下, 例如 C:\: C:\> javac -cp "C:\ctlin" C:\joyce\Test.java 執行 Test 類別方式為 ( 注意 : 此時除了引用到 petter.y 類別之外, 還引用到 Test 類別 因為執行時 的 java 命令參數是 Test 類別 ): 情況一 : 在 C:\joyce 目錄下 : C:\joyce> java -cp ".;C:\ctlin" Test 情況二 : 在 C:\ctlin 目錄下 : C:\ctlin> java -cp ".;C:\joyce" Test 情況三 : 在其他目錄下, 例如 C:\: C:\> java -cp "C:\ctlin;C:\joyce" Test 附錄 : 想執行 petter.y 的 main 方法, 如何進行? 情況一 : 在 C:\ctlin 目錄 ( 此為 petter.y 的根目錄 ) 下 : C:\ctlin> java petter.y 注意 : 不能只打 java Y 情況二 : 在其他目錄下, 例如 C:\ 或是在 C:\ctlin\petter 目錄下 : C:\> java -cp "C:\ctlin" petter.y C:\ctlin\petter> java -cp "C:\ctlin" petter.y 附錄 : 不使用 -classpath 或 -cp 選項, 而改用設定 CLASSPATH 環境變數來做編譯與執行 : (1) 設定環境變數 C:\> set CLASSPATH=.;C:\ctlin;C:\joyce (2) 編譯 C:\> javac C:\joyce\Test.java

9 上列指令會順便將 C:\ctlin\petter\Y.java 編譯好, 因為在 Test.java 中有引用到 petter.y (3) 執行 C:\> java Test C\:> java petter.y 3/4 1. 套件編譯與執行 c:\ 有兩個目錄 : ctlin 和 joyce ctlin 目錄下有 petter 目錄 petter 目錄下有 animal 目錄和 Y. java 檔 animal 目錄下有 Dog.java 檔 joyce 目錄下有 Test.java 檔 Y.java 檔內容 : package petter; // 須為第一行 public class Y { public int x = 5; public static void main(string[] args){ new petter.y(); 備註 :petter.y 類別的根目錄為 C:\ctlin Dog.java 檔內容 : package petter.animal; public class Dog { public int age; // 年紀 public static int count; // 狗數 public void bark(){ // 狗吠方法 System.out.println(" 旺旺 ");

10 public Dog(){ // 建構方法 count++; 備註 :petter.animal.dog 類別的根目錄也是 C:\ctlin Test.java 檔內容 : class Test{ public static void main(string[] args){ petter.y y1 = new petter.y(); System.out.println(y1.x); petter.animal.dog d1 = new petter.animal.dog(); // 產生一隻狗, 稱為 d1 System.out.println(petter.animal.Dog.count); System.out.println(d1.count); System.out.println(d1.age); d1.bark(); // 叫用 d1 這隻狗的 bark() 方法 備註 :Test 類別的根目錄為 C:\joyce 編譯 : 由於 class Test 中使用到 petter.y 類別和 petter.animal.dog 類別, 所以必須以 -classpath 選項 ( 簡 寫為 -cp) 指出這兩個類別的根目錄 (C:\ctlin) ( 除非在 C:\ctlin 目錄下進行編譯才能省略 -classpath 選項 ) javac -cp c:\ctlin C:\joyce\Test.java 執行 : 此時除了使用到 petter.y 和 petter.animal.dog 之外,Dos 命令也用到 Test 類別, 因此必須用 -classpath 選項指出這三個類別的根目錄 (C:\ctlin 和 C:\joyce, 以分號隔開 ) java -cp C:\ctlin;C:\joyce Test 2. 將.class 檔壓縮成.jar 檔 例如 : 將 petter.y 類別與 petter.animal.dog 類別的.class 壓縮成.jar 檔 ( 先進入這些類別的根目錄 ) cd \ctlin ( 使用 jar 指令壓縮, 選項 -cf 表示 create file, 其後為欲建立之檔名, 然後接各個被壓縮的.class 檔路 徑 )

11 C:\ctlin> jar -cf petter.jar petter\y.class petter\animal\dog.class 因為.jar 檔已含有這些.class 檔, 因此, 這時可以將 C:\ctlin\petter\Y.class 和 C:\ctlin\petter\animal\Dog.class 檔刪掉, 以後只需以 -classpath 選項指出.jar 檔即可引用到這兩個類別 再次執行 : java -cp C:\ctlin\petter.jar;C:\joyce Test 3. 使用 import 指令 使用 import 指令之後, 以後便可以省略類別名稱前面所冠上的套件名 修改 Test.java 檔, 使用 import 指令如下 : import petter.y; import petter.animal.dog; class Test{ public static void main(string[] args){ Y y1 = new Y(); System.out.println(y1.x); Dog d1 = new Dog(); // 產生一隻狗, 稱為 d1 System.out.println(Dog.count); System.out.println(d1.count); System.out.println(d1.age); d1.bark(); // 叫用 d1 這隻狗的 bark() 方法 注意 :petter 套件和 petter.animal 套件是不同的套件 注意 : 被引用套件中的類別 屬性 以及方法, 必須 public ( 公開 ) 才能在其他套件的程式碼中引用 3/8 1. 繼承 : 子類別 (subclass) 繼承 (extends) 父類別 (superclass) 例如 : class A { /*... */ class B extends A { /*... */

12 則類別 B 是 A 的子類別 ; 而 A 是 B 的父類別 除了 private 屬性與方法以外, 所有 A 的屬性與方法 都會被 B 繼承 ( 但建構方法的繼承方式稍有不同 ) 2. 建構方法的繼承關係 : 子類別的建構方法首先一定會先呼叫父類別的建構方法 情況一 : 有寫明呼叫 super(...); 例如 : class A { /* 隱含有建構方法 : A(){ */ /*... */ class B extends A { B(){ // B 的建構方法 super(); // 呼叫父類別的建構方法 /*... */ /*... */ 清況二 : 沒有寫明呼叫 super(...);: 則隱含呼叫 super(); 這個沒有參數的建構方法 這時要小心, 例如下例會出現錯誤 : class A { /* 有定義建構方法則以所定義的為準 */ A(int x){ /*... */ /* 並沒有定義 A(){ */ class B extends A { B(){ // B 的建構方法 /* 沒有明白寫出呼叫父類別的建構方法則隱含呼叫 super(); */ /*... */

13 由於沒有寫出呼叫父類別的建構方法, 所以會隱含呼叫沒有參數的父類別建構方法 但是在 A 類別 中只有定義一個建構方法而這個方法是需要一個整數參數的, 並沒有定義那種沒有參數的建構方法, 因此, 當要建構 B 類別的物件時, 會找不到 A 類別中對應的建構方法而發生錯誤 3. 方法覆寫 (override): 子類別雖然繼承了父類別的方法與屬性, 但也可以另造同名的新方法與屬性 若方法名相同, 參數列的型態順序也都相同, 則算是覆寫父類別的該方法 父類別被覆寫的方法便被 壓下, 而以子類別所定義的為準, 除非用 super. 調出父類別的方法 例如 : class A { void f(int x){ /*... */ class B extends A void f(int y){ // 覆寫了父類別 (A) 的 f 方法 /*... */ super.f(y*2); // 叫用父類別的 f 方法 /*... */ 覆寫父類別方法時要小心的一點是 : 回傳值型態必須至少等於父類別方法回傳值的型態, 或是更特殊 ( 子類別 ), 否則會發生錯誤, 例如 : class A { void f(int x){ /*... */ class B extends A int f(int y){ // 錯誤 : 覆寫了父類別 (A) 的 f 方法, 但回傳值型態不符 /*... */ 然而, 如果方法名稱相同, 但參數列型態順序並不相同, 則不算是覆寫, 而算是多加了一個新的 同名 方法, 應視為多載 (overload), 也就是說並列多個同名但參數稍有不同的的方法 例如: class A { void f(int x){ /*... */

14 class B extends A { void f(int y, int z){ // 與繼承自父類別 (A) 的 f 方法並列 /*... */ 本例, 在 B 類別中就有兩個 f 方法並列, 一個為繼承自父類別的 f (int x){..., 另一個為自己新定義的 f (int y, int z){... 注意 : 請不要將方法的覆寫 (override) 與多載 (overload) 搞混 備註 : 屬性的覆寫就沒有什麼限制 4. 存取修飾字 :public protected 空白 private (1) public: 開放給不同套件的 class 使用, 所有 class 都可以用 (2) protected: 開放給同套件的 class 以及後代子孫 ( 包括屬於不同套件的子孫 ) 的 class 使用 ; 其他不同套件的 class 都不能用 (3) 預設 ( 空白不寫 ): 只給同套件的 class 使用 (4) private: 只允許 class 內部使用 存取範圍是 public 最大, 其次是 protected, 再其次是 空白, 最小的是 private 附註 : 方法的覆寫, 也必須符合存取範圍的規則 : 子類別中覆寫的方法的存取修飾必至少等於父類別 被覆寫方法的的存取修飾, 不可以縮小 例如下例會錯誤 : class A { public void f(int x){ /*... */ class B extends A void f(int y){ // 錯誤 : 覆寫了父類別 (A) 的 f 方法, 但存取修飾由 public 縮小為 空白 /*... */ 5. final 關鍵字 ( 最終的意思 ): (1) 加在 class 之前 : 表示此 class 不可被繼承 例如 String ( 字串類別 ) 就是一個 final class, 不可以寫 class X extends String {...

15 (2) 加在方法之前 : 表示此方法不可被覆寫 (3) 加在變數宣告之前 : 表示此變數不可以再次給值 6. 父類別型態與子類別型態的轉換 子類別的物件也算是父類別的物件, 例如 車輛 是 交通工具 的子類別, 稱一部車為一部交通工 具並沒有錯, 但反過來不一定成立, 例如稱一部交通工具為車輛就會有疑問, 因為它可能是飛機 instanceof 關鍵字用來判斷一個物件是否屬於某個類別 例如 : class Vehicle{ /*...*/ // 交通工具類別 class Car extends Vehicle { /*...*/ // 車輛類別, 為交通工具的子類別 class Test { public static void main(string[] args){ Car c1 = new Car(); // 產生一部車, 以車輛 c1 指稱之,OK Vehicle v1 = new Car(); // 產生一部車, 以交通工具 v1 指稱之,OK Vehicle v2 = new Vehicle(); // 產生一部交通工具, 以交通工具 v2 指稱之,OK // Car c2 = new Vehicle(); // 產生一部交通工具, 以車輛 c2 指稱之, 不可以, 錯誤 if (c1 instanceof Car) System.out.println("c1 是車輛的實例 "); // 成立 if (c1 instanceof Vehicle) System.out.println("c1 是交通工具的實例 "); // 成立 if (v1 instanceof Car) System.out.println("v1 是車輛的實例 "); // 成立 if (v1 instanceof Vehicle) System.out.println("v1 是交通工具的實例 "); // 成立 if (v2 instanceof Vehicle) System.out.println("v2 是交通工具的實例 "); // 成立 if (v2 instanceof Car) System.out.println("v2 是車輛的實例 "); // 不成立, 故不會印出此行 7. super 與 this 關鍵字 :super 表示 父 ( 母 ) 之意,this 表 自己, 都是以 物件 的觀點而言 super(...); 表示呼叫父類別的建構方法 this(...); 表示呼叫自己的另一個建構方法 super. 方法 或 super. 屬性 表示引用父類別的物件方法或屬性 this. 方法 或 this. 屬性 表示引用自己的物件方法或屬性 備註 :super(...) 和 this(...) 只能在建構方法中使用, 而且必須寫在建構方法中的第一行, 並且不能並用 8. 抽象類別 抽象方法

16 * 抽象 的相反是 具體, 不夠具體就是抽象 * 當方法定義不具有本體部分 ( 即大括號部分 ) 而直接寫 ; 時, 則此方法為抽象方法, 其前面必須加 abstract 關鍵字 例如 : abstrace void f(); * 當類別中含有抽象方法時, 則此類別必為抽象類別, 其 class 前面必須加上 abstract 關鍵字 例如 : abstract class A { abstract void f(); // 抽象方法 int g(){ return 1; // 具體方法 * 一個不含抽象方法的類別, 也可以故意宣告其為抽象類別 ( 在其前面加上 abstract 關鍵字 ) 例如: abstract class B{ // 故意說 B 為抽象類別 void h(){ // 具體方法 int g(){ return 1; // 具體方法 * 抽象類別不能直接用來產生 (new) 物件, 而必須先造一個具體的子類別, 然後用子類別來產生物件 例如 : 承上例 : class C extends A { void f(){ class D extends B{ class Test { public static void main(string[] args){ new A(); // 錯誤 new B(); // 錯誤 new C(); // OK new D(); // OK new A(){void f(){; // 造一個繼承 A 的無名內部類別, 並將 f() 方法具體化,OK 3/11 1. 多重繼承 : 理論上, 一個類別可以繼承多個類別, 亦即有多個 superclass, 繼承這些 class 的屬性與 方法 ( 聯集 ), 這種繼承方式, 稱為 多重繼承 (multiple inheritances) 然而,Java 並不允許一個類別繼 承多個類別 幸好,Java 提供介面 (interface) 的觀念, 可達到類似多重繼承的效果

17 2. 介面 (interface) 介面 (interface) 和類別 (class), 以及列舉 (enum) 都是屬於 Java 程式的最外層結構, 其定義格式為 interface 介面名 extends 其他介面 { 一些方法或屬性 其中 extends 其他介面 表示此介面繼承了其他的介面, 若沒有, 則不用寫 其他介面 是一串以逗號分隔的介面名 ( 後面有範例 ) 介面內的方法是公開 (public) 且抽象 (abstract) 的 ; 儘管不寫出 public abstract, 其所含的所有方法都是隱含前面有寫 public abstract 介面內的屬性都是公開的固定常數( 其值不能更改 ), 並且都是 static ( 不屬於個別物件 ); 儘管不寫出 public final static, 其前都隱含有寫 public final static 例如, 如下的介面定義 ( 介面名為 Shape, 內含一個屬性 PI, 和一個方法 area()): interface Shape { double PI = ; double area(); 相當於 abstract interface Shape { public final static double PI = ; public abstract double area(); 至於 interface 前面的存取修飾 ( 如 public, 或不寫 ), 則依照一般的規則 備註 : 在程式結構最外層的 class interface 和 enum 之前的存取修飾, 只有兩種選擇 :public 或是 ( 空 白 ) 不寫 內部類別 屬性 和方法才有四種存取修飾 :public protected ( 空白 ) 不寫 和 private 由於 interface 是抽象的, 因此, 與抽象類別相似, 不能直接使用 new 來產生物件, 而必須造一個子類 別 implements 介面, 才能產生物件, 或者 new 該介面並且附帶實作其所有抽象方法 ( 亦即使用 無 名的內部類別 ), 例如 : import java.awt.event.actionlistener; import java.awt.event.actionevent; class Test { public static void main(string[] args){ ActionListener a1 = new ActionListener(){ public void actionperformed(actionevent e){ /*... */

18 ; 或者 : import java.awt.event.actionlistener; import java.awt.event.actionevent; class AL implements ActionListener { public void actionperformed(actionevent e){ /*... */ class Test2 { public static void main(string[] args){ ActionListener a1 = new AL(); 3. 一個類別只能 extends 一個類別, 但可以 implments 多個介面 : class A { /*... */ interface X { /*... */ interface Y { /*... */ class B extends A implements X, Y { /*... */ 4. 一個介面可以 extends 多個介面 : interface X { /*... */ interface Y { /*... */ interface Z { /*... */ interface W extends X, Y, Z { /*... */ 注意 : 不可以寫為 interface W implements X, Y, Z { /*... */ 也不可以寫 : class A extends X, Y, Z { /*... */ 5. 會考第一題的部份程式碼 : import javax.swing.*;

19 import java.awt.*; import java.awt.event.*; class T1 extends JFrame implements ActionListener { T1(){ public void actionperformed(actionevent e){ public static void main(string[] args){ 6. 會考第六題的部份程式碼 ( 由 Eclipse 自動產生, 刪掉了三個無用的建構方法 ): import java.awt.graphicsconfiguration; import java.awt.headlessexception; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; import javax.swing.jframe; public class T6 extends JFrame implements MouseListener, MouseMotionListener { public T6() throws HeadlessException { // TODO Auto-generated constructor stub public void mouseclicked(mouseevent arg0) { public void mouseentered(mouseevent arg0) { public void mouseexited(mouseevent arg0) {

20 public void mousepressed(mouseevent arg0) { public void mousereleased(mouseevent arg0) { public void mousedragged(mouseevent arg0) { public void mousemoved(mouseevent arg0) { public static void main(string[] args) { 註 : 儘可能利用 Eclipse 幫您自動產生這些程式架構, 比較不會寫錯 3/15 1. 事件處理模型 : 事件來源 發出 XXX 事件, 會送給 事件來源 所註冊的 XXXListener 物件, 呼叫 XXXListener 物件中對應的 處理方法

21 以會考第一題的按按鈕的事件為例 : 事件來源 ( 即按鈕 ) 發出 XXX 事件 ( 即 ActionEvent 物件 ), 會送給 事件來源 所註冊 ( 透過 addactionlistener 方法註冊 ) 的 XXXListener 物件( 視窗物件自己 ;this), 呼叫 XXXListener 物件中對應的 處理方法 (actionperformed 方法 ) (1) 建構一個 ActionListener 物件 class T1 extends JFrame implements ActionListener { T1(){ /*... */ public void actionperformed(actionevent arg0){ public static void main(string[] args){ new T1(); // 產生一個 JFrame 兼 ActionListener 物件 (2) 建構一個 事件來源 ( 按鈕 ) class T1 extends JFrame implements ActionListener { JButton b1 = new JButton(" 執行 "); // 產生一個按鈕 T1(){ /*... */ add(b1); // 將按鈕加到版面 setvisible(true); public void actionperformed(actionevent arg0){ public static void main(string[] args){ new T1(); // 產生一個 JFrame 兼 ActionListener 物件 (3) 事件來源 (b1 按鈕 ) 註冊 Action 事件 (ActionEvent) 的 ActionListener 物件 class T1 extends JFrame implements ActionListener { JButton b1 = new JButton(" 執行 "); // 產生一個按鈕 T1(){ /*... */ add(b1); // 將按鈕加到版面 setvisible(true);

22 b1.addactionlistener(this); // 按鈕註冊 ActionListener 物件 ( 自己擔任 ) public void actionperformed(actionevent arg0){ public static void main(string[] args){ new T1(); // 產生一個 JFrame 兼 ActionListener 物件 如此, 則當按鈕被點按時, 便會呼叫 actionperformed 方法, 事件是 arg0 2. 簡單的加法器 程式碼 : import java.awt.*; import java.awt.event.*; import javax.swing.*; class Adder extends JFrame implements ActionListener { JTextField t1 = new JTextField(18); JLabel la = new JLabel("+"); JTextField t2 = new JTextField(18); JButton b1 = new JButton("="); JLabel lb = new JLabel(" 答案 "); Adder(){ this.settitle(" 加法器 "); // 設定標題 this.setsize(600, 100); // 設定視窗大小 this.setdefaultcloseoperation(exit_on_close); this.setlayout(new FlowLayout()); // 設定版面 this.add(t1); this.add(la); this.add(t2); this.add(b1); this.add(lb); this.setvisible(true); // 設定可見 b1.addactionlistener(this); // 為按鈕註冊 Listener public void actionperformed(actionevent arg0){ int a = Integer.parseInt(t1.getText()); // 取得文字欄文字, 並轉成整數 int b = Integer.parseInt(t2.getText()); // 取得文字欄文字, 並轉成整數 lb.settext(""+(a+b)); // 設定答案標籤文字為加法結果

23 public static void main(string[] args){ new Adder(); 3. 會考第一題解答 (1) 取得文字欄位之文字, 以及設定標籤之文字 : class T1 extends JFrame implements ActionListener { JTextField t1 = new JTextField(40); JButton b1 = new JButton(" 執行 "); // 產生一個按鈕 JLabel lb = new JLabel(" 答案 "); T1(){ /*... */ add(t1); // 將文字欄位加到版面中 add(b1); // 將按鈕加到版面 add(lb); // 將標籤加到版面 setvisible(true); b1.addactionlistener(this); // 按鈕註冊 ActionListener 物件 ( 自己擔任 ) public void actionperformed(actionevent arg0){ String s = t1.gettext(); // 取得文字欄位的文字 int sum = 0; /*... */ lb.settext(" 答案是 :"+sum); // 設定標籤文字 public static void main(string[] args){ new T1(); // 產生一個 JFrame 兼 ActionListener 物件 (2) 數學算式之求解, 邏輯 : sum 記錄總和,val 記錄單項值, 初值均設為 0 遇到 + 號, 則將單項值累加入 sum 中, 並將單項值重設為 0 if (s.charat(i) == '+') { sum = sum + val; val = 0;

24 否則, 遇到數字, 將單項值乘以 10 倍, 再加上此數字的值 else { val = val * 10 + s.charat(i) - '0'; 記得到最後, 最後一項之單項值也要加進 sum, 在 for 迴圈之後 for (int i = 0; i < s.length(); i++){ /*... */ sum = sum + val; (3) 範圍錯誤之判斷, 數學式長度超過 30: if (s.length() > 30){ lb.settext(" 範圍錯誤, 請重新輸入 ( 字元總個數 :"+s.length()+" 個 ) "); return; 單項值超過 10000: if (val > 10000) { lb.settext(" 範圍錯誤, 請重新輸入 "); return; 注意 : 範圍錯誤立即 return 3/18 會考第 6 題 : 拖曳三角形, 製作步驟如附檔 程式碼如下 :( 只要注意藍色字部份 ) import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*;

25 public class T6 extends JFrame implements MouseInputListener { int[] x = {50, 150, 250; // 三角形三頂點 ( 由左而右 ) 的 x 座標 int[] y = {300, 100, 300; // 三角形三頂點 ( 由左而右 ) 的 y 座標 int p = -1; // 被選取拖曳的頂點,-1 表未選取 public T6() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 拖曳三角形 "); this.setsize(400, 400); this.setvisible(true); this.addmouselistener(this); // 註冊滑鼠事件 this.addmousemotionlistener(this); // 註冊滑鼠事件 public void mouseclicked(mouseevent arg0) { public void mouseentered(mouseevent arg0) { public void mouseexited(mouseevent arg0) { public void mousepressed(mouseevent arg0) { // 壓下 for(int i = 0; i < 3; i++){ // 掃描三個頂點 if ((x[i]-arg0.getx())*(x[i]-arg0.getx()) + (y[i]-arg0.gety())*(y[i]-arg0.gety()) < 25) { // 若距離點按位置夠近, 則

26 p = i; // 選取該頂點 break; public void mousereleased(mouseevent arg0) { // 放開 p = -1; // 恢復為未選取頂點 public void mousedragged(mouseevent arg0) { // 拖曳 if (p == -1) return; // 若未選取頂點, 則立即返回 x[p] = arg0.getx(); // 否則, 被選取頂點之座標設成與滑鼠座標一致 y[p] = arg0.gety(); repaint(); // 重新顯示一次 public void mousemoved(mouseevent arg0) { public void paint(graphics g){ super.paint(g); // 呼叫父類別的繪圖方法 g.drawpolygon(x, y, 3); // 根據 x, y 座標, 繪出三角形 /** args */ public static void main(string[] args) { new T6(); // 建構 T6 物件 注意 : 共有七個 mousexxx 方法, 都不能刪省

27 3/22 會考第 2 題 : 楊暉三角塔 ( 附檔為製作過程示範 ) 1. 文字區 (JTextArea) 元件與捲軸 (JScrollPane) 的用法 2. 文字區 ( 假設是 a1) 內容的改變 : (1) a1. settext(" 文字 "): 設定文字區內容為 文字, 若是空字串, 則相當於清空文字區 (2) a1.append(" 文字 "): 在現有的文字區內容後, 繼續附加新的 文字 ; 若要換行, 則需要利用控制 字元 '\n' 例如 :a1.append("\n"); 3. 會考第 2 題解答程式碼 :( 只要注意藍字部分 ) import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T2 extends JFrame implements ActionListener { JButton b1=new JButton(" 計算 "); // 按鈕 JTextField t1=new JTextField(18); // 文字欄位 JTextField t2=new JTextField(18); // 文字欄位 JLabel l1=new JLabel(" 階段 a"); // 標籤 JLabel l2=new JLabel(" 階段 b"); // 標籤 JLabel l3=new JLabel(" 結果 "); // 標籤 JTextArea a1=new JTextArea(11, 80); // 文字區 JScrollPane s1 = new JScrollPane(a1); // 捲軸, 包含了文字區 public T2() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 楊暉三角塔 "); this.setsize(900, 300); this.setlayout(new FlowLayout()); this.setdefaultcloseoperation(exit_on_close); add(l1); add(t1); add(l2); add(t2); add(b1); add(s1); this.setvisible(true); b1.addactionlistener(this); // 註冊按鈕事件

28 public void actionperformed(actionevent arg0) { int a = Integer.parseInt(t1.getText()); // 將第一個文字欄位內容轉成整數, 記在變數 a 中 int b = Integer.parseInt(t2.getText()); // 將第二個文字欄位內容轉成整數, 記在變數 b 中 if (a < 0 a > 10 b < 0 b > 10){ a1.settext(" 範圍錯誤, 請重新輸入 "); return; if (a > b){ // 若先大後小, 則交換 int t = a; a = b; b = t; a1.settext(""); // 清空文字區 for (int i = a; i <= b; i++){ // 從第 a 階到第 b 階 int item = 1; // 第一項固定為 1 a1.append(item+ "\t"); // 顯示在文字區 for (int j = 1; j <=i; j++){ // 後續項 item = item * (i -j +1)/j; // 後項是前項乘以 (i-j+1)/j a1.append(item+ "\t"); // 顯示在文字區 a1.append("\n"); // 換行 /** args */ public static void main(string[] args) { new T2(); 3/25

29 例外處理 : 1. try... catch... finally... 結構和執行流程 public static void main(string[] args) { f(); static void f() { /*... */ try { 指令 1; 指令 2; // 有可能發生例外的指令指令 3; // 一旦發生例外時, 則被略過 catch ( 例外類型 1 e){ 指令 4; catch( 例外類型 2 e){ 指令 5; finally { // finally 的部分不一定要寫指令 6; // try... catch... finally... 結構結束指令 7; // f() 方法結束 (1) 若沒有寫 try... catch... 包住 有可能發生例外的指令, 發生例外時, 例外會往呼叫此方法的方法 ( 本例為 main 方法 ) 拋, 跳到該 (main) 方法做 同理, 若 main 方法也沒有寫 try... catch... 包住此方法 f() 的呼叫, 則會往呼叫 main 的地方 ( 即 DOS 命令列 ) 拋, 這時在螢幕上就會看到例外的錯誤訊息 (2) 若有寫 try... catch..., 但發生例外, 沒被 catch 到, 則先跳到做 finally 區塊中的指令, 例如指令 6 (finally 區塊總是會做 ), 之後跳到 main 方法 執行序列 : 指令 1, 指令 2, 指令 6, main ( 在 f(); 處有例外發生 ) (3) 發生例外, 被例外類型 1 所 catch, 則跳到所 catch 之區塊指令, 接著做 finally 區塊中的指令 (finally 區塊總是會做 ), 然後做 try... catch... 之後的指令 執行序列 : 指令 1, 指令 2, 指令 4, 指令 6, 指令 7, main ( 正常, 沒收到例外 ) (4) 發生例外, 被例外類型 2 所 catch, 則跳到所 catch 之區塊指令, 接著做 finally 區塊中的指令 (finally 區塊總是會做 ), 然後做 try... catch... 之後的指令 執行序列 : 指令 1, 指令 2, 指令 5, 指令 6, 指令 7, main( 正常, 沒收到例外 )

30 (5) 若未發生例外, 則走正常的執行過程 (finally 區塊總是會做 ) 執行序列 : 指令 1, 指令 2, 指令 3, 指令 6, 指令 7, main( 正常, 沒收到例外 ) 注意事項 : 若有多個 catch, 而且其中某個例外類型是另一個例外類型的子類別, 則先寫子類別的 catch, 再寫父類別的 catch, 例如 : try {... catch (IOException e){ // IOException 是 Exception 的子類別 catch(exception e){ 是合法的 ( IOException 是 Exception 的子類別 ; 先 catch 較特殊的例外類型, 再 catch 較廣泛的例外類型 ) 反之, 若寫成 try... catch (Exception e){ catch(ioexception e){ 則編譯會錯 ( 不可以先 catch 較廣泛的例外類型, 再 catch 較特殊的類型 ) 2. 方法宣告有寫 thows XXXException 之寫法, 例如 : public static void main(string[] args) throws IOException { g(); // 呼叫方法 g static void g() throws XXXException { /*... */ (1) XXXException 是屬於 RuntimeException, 則 main 可以不用 try catch 此 g 方法 (2) XXXException 不屬於 RuntimeException, 則 main 須 try cath 此 g 方法, 或在 main 方法參數後寫 throws XXXException 或其父類別 例如如下之程式碼編譯會錯 :

31 import java.io.*; class Test { public static void main(string[] args){ g(); // 呼叫 g 方法 static void g() throws IOException { 因為 IOException 不屬於 RuntimeException 而如下之程式碼編譯會過關: class Test { public static void main(string[] args){ g(); // 呼叫 g 方法 static void g() throws NullPointerException { 因為 NullPointerException 屬於 RuntimeException 上述編譯錯誤的例子可以做如下之修正 : (1) 用 try... catch... 包住, 並使能捕獲被呼叫之方法 g() 會拋出的例外 import java.io.*; class Test { public static void main(string[] args){ try { g(); // 呼叫 g 方法 catch (IOException e){ static void g() throws IOException { 或 (2) 方法宣告中加上 throws XXXException, 涵蓋可能發生的例外 : import java.io.*; class Test {

32 public static void main(string[] args) throws IOException { g(); // 呼叫 g 方法 static void g() throws IOException { 3. 自訂例外類別 : 用 extends XXXException 的方式定義新的 class ( 請參考下例的 MyException) 4. 故意拋出例外 : 利用 throw 關鍵字 ( 參考下例的 g() 方法中, 注意 :throw 和 throws 是不同的關鍵字 ) 測試您的理解範例 : import java.io.ioexception; public class Test { public static void main(string[] args){ try{ System.out.println("A"); g(); System.out.println("B"); catch(ioexception e){ System.out.println("C"); catch(exception e){ System.out.println("D"); finally { System.out.println("E"); System.out.println("F"); static void g() throws MyException { System.out.println("G"); throw new MyException(); // System.out.println("H"); class MyException extends IOException { 5. 與例外有關的方法覆寫 (method override)

33 若要覆寫父類別的某個方法, 而這個方法的宣告中有寫 throws XXXException( 例如下例的 class B 為 class A 的子類別, 並欲覆寫 f(), 而 class A 中的 f() 方法有寫 throws Exception), 則在子類別中覆寫該方法時, 可以不寫 throws XXXException 這一部分, 若要寫 throws YYYExceptoin, 則只能寫相同的例外類別或是其子類別, 亦即 YYYException 即為 XXXException, 或者 YYYException 是 XXXException 的子類別 import java.io.ioexception; class A { void f() throws Exception { class B extends A { void f() throws IOException { // 覆寫 class A 的 f 方法 本例正確, 因為可以覆寫為 throws 更特殊的例外類型 下例錯誤 : import java.io.ioexception; class A { void f() throws IOException { class B extends A { void f() throws Exception { // 覆寫 f 方法, 錯誤, 不可以 throws 更廣泛的例外 自行研究 : 下例是否合法 : import java.io.ioexception; class A { void f() { class B extends A { void f() throws IOException { // 覆寫 f 方法, 並 throws 例外

34 備註 :try... catch... 結構是區塊型式, 當變數宣告在區塊中時, 其使用範例僅限於區塊內 因此, 若 有變數在 try... catch... 結構之後還需要使用, 則必須宣告在 try... catch... 結構的外面, 不可以宣告在 try catch 結構裡面 4/8 會考第九題 : 填圖 ( 製作過程如附檔 ) 程式碼 : ( 只要注意藍色字部份 ) import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T9 extends b1pre implements MouseListener { int newc = 1; // 新顏色 = 綠色 ( 紅 :0 綠 :1 藍 :2 白 :3) int oldc; // 舊顏色 public T9() { // TODO Auto-generated constructor stub this.setsize(max_x, max_y); // 設定視窗大小 this.setvisible(true); // 顯示 this.addmouselistener(this); // 註冊滑鼠事件 public void mouseclicked(mouseevent arg0) { public void mouseentered(mouseevent arg0) {

35 public void mouseexited(mouseevent arg0) { 色 public void mousepressed(mouseevent arg0) { // 點按滑鼠事件處理 oldc = getb_xy(arg0.getx(), arg0.gety()); // 取得滑鼠點到位置的原來 ( 舊 ) 顏 if (newc == oldc) return; // 若要塗的新顏色即本來的顏色, 就不用塗了 // 否則, 開始塗色 f(arg0.getx(), arg0.gety()); repaint(); // 重新顯示一次 public void mousereleased(mouseevent arg0) { 來畫畫 public void paint(graphics g){ super.paint(g); for (int x = 0; x < max_x; x++){ for (int y = 0; y < max_y; y++){ g.setcolor(pencolor[getb_xy( x, y)]); // 取得顏色, 以該色 g.drawline(x, y, x, y); // 在 (x, y) 位置描一個點 // 塗色方法 f void f(int x, int y){ if (getb_xy(x, y) == oldc) { //(x, y) 位置是舊顏色, 才換成新顏色 { setb_xy(newc, x, y); // 將 (x, y) 位置設定為新的顏色 // 看看周圍, 若未超出範圍, 則繼續塗 if (x - 1 >= 0) f(x - 1, y); // 左 if (x + 1 < max_x) f(x + 1, y); // 右

36 if (y - 1 >= 0) f(x, y - 1); // 上 if (y + 1 < max_y) f(x, y + 1); // 下 public static void main(string[] args) { new T9(); 4/12 1. InputStream 與 OutputStream 是以位元組為單位做 I/O 動作 ;Reader 與 Writer 是以字元為單位做 I/O 動作 對佔用兩個位元組碼以上的文字而言, 應使用 Reader 與 Writer 處理, 才不會產生亂碼 InputStream 與 Reader 的差異範例 : /* 使用 Reader */ import java.io.*; class DemoFileReader { public static void main(string[] args) { try { FileReader fr = new FileReader(new File("data.txt")); while (fr.ready()){ int a = fr.read(); System.out.print((char) a); catch(filenotfoundexception e){ System.out.println("data.txt 不存在 "); catch (IOException e){ System.out.println("IO 錯誤 "); /* 使用 InputStream */ import java.io.*; class DemoFileInputStream {

37 public static void main(string[] args) { try { FileInputStream fis = new FileInputStream(new File("data.txt")); while (fis.available() > 0){ int a = fis.read(); System.out.print((char) a); catch(filenotfoundexception e){ System.out.println("data.txt 不存在 "); catch (IOException e){ System.out.println("IO 錯誤 "); 您可以造一個文字檔 data.txt 內含中英文字, 測試一下 2. 會考第 3 題 ( 尚未完成 ) Step1: 製作視窗畫面 Step 2: 撰寫 actionperformed() 2.1 建構 BufferedReader 物件 : BufferedReader br; try { FileReader fr = new FileReader(t1.getText()); br = new BufferedReader(fr); /*... */... br.readline()... catch (IOException e) { 2.2 輸入轉整數, 記入陣列 2.3 計算方陣乘積 2.4 顯示在文字區中 : 換行用 "\n", 定位空白用 "\t"

38 2.5 是否繼續 if (br.readline().equals("0")) return; 程式碼 ( 只要注意藍字部分 ): import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T3 extends JFrame implements ActionListener { JButton b1=new JButton(" 計算 "); // 按鈕 JTextField t1=new JTextField("number.txt", 18); // 文字方塊 JLabel l1=new JLabel(" 請輸入檔名 :"); // 標籤 JLabel l2=new JLabel(" 答案 "); // 標籤 JTextArea a1=new JTextArea(20, 40); // 文字區 JScrollPane s1 = new JScrollPane(a1); // 捲軸 public T3() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle("3*3 的方陣相乘 "); this.setsize(600, 500); this.setlayout(new FlowLayout()); add(l1);add(t1);add(b1);add(l2);add(s1); this.setvisible(true); b1.addactionlistener(this); public void actionperformed(actionevent arg0) { // 宣告與配置陣列 int[] a = new int[10]; int[] b = new int[10]; int[] c = new int[10]; try { FileReader fr=new FileReader(t1.getText());// 檔案讀取 BufferedReader buf=new BufferedReader(fr); for(;;){ // 讀取陣列元素 for (int i = 1; i < 10; i++)

39 a[i]=integer.parseint(buf.readline()); for (int i = 1; i < 10; i++) b[i]=integer.parseint(buf.readline()); // 計算乘積 c[1]=a[1]*b[1]+a[2]*b[4]+a[3]*b[7]; c[2]=a[1]*b[2]+a[2]*b[5]+a[3]*b[8]; c[3]=a[1]*b[3]+a[2]*b[6]+a[3]*b[9]; c[4]=a[4]*b[1]+a[5]*b[4]+a[6]*b[7]; c[5]=a[4]*b[2]+a[5]*b[5]+a[6]*b[8]; c[6]=a[4]*b[3]+a[5]*b[6]+a[6]*b[9]; c[7]=a[7]*b[1]+a[8]*b[4]+a[9]*b[7]; c[8]=a[7]*b[2]+a[8]*b[5]+a[9]*b[8]; c[9]=a[7]*b[3]+a[8]*b[6]+a[9]*b[9]; // 印出結果 a1.append(" 第一個方陣 " + "\n"); a1.append(a[1] + "\t" + a[2] + "\t" + a[3] + "\n"); a1.append(a[4] + "\t" + a[5] + "\t" + a[6] + "\n"); a1.append(a[7] + "\t" + a[8] + "\t" + a[9] + "\n"); a1.append("\n"+" 第二個方陣 " + "\n"); a1.append(b[1] + "\t" + b[2] + "\t" + b[3] + "\n"); a1.append(b[4] + "\t" + b[5] + "\t" + b[6] + "\n"); a1.append(b[7] + "\t" + b[8] + "\t" + b[9] + "\n"); a1.append("\n"+" 方陣乘積 " + "\n"); a1.append(c[1] + "\t" + c[2] + "\t" + c[3] + "\n"); a1.append(c[4] + "\t" + c[5] + "\t" + c[6] + "\n"); a1.append(c[7] + "\t" + c[8] + "\t" + c[9] + "\n"); // 是否繼續 if (buf.readline().equals("0")) return; catch(ioexception e){ System.out.println("IO 錯誤 "); return; /** args */

40 public static void main(string[] args) { new T3(); 4/15 1. 文字檔案輸入 FileReader fr=new FileReader(); BufferedReader buf=new BufferedReader(fr); // 建構 Buffered 物件, 從檔案讀取 str=buf.readline() // 讀取一行文字 2. 分斷句元 StringTokenizer st=new StringTokenizer( 要段分的字串, 分界字元 ); st.nexttoken(); // 讀 st 下一個字串 ( 直到分界字元, 如空白或逗號 ) 3. 計數排序法 成績比自己高的人數再加一 ( 自己一人 ) 即為自己的名次 4. 檔案輸出 FileWriter fw=new FileWriter(" 檔案路徑 ");// 檔案寫入 PrintWriter pw=new PrintWriter(fw); pw.println(" 要輸出的文字 "); // 印出並換行 pw.print(" 要輸出的文字 "); // 印出但不換行 pw.flush(); // 將積在輸出管線中的資料沖入檔案 pw.close(); // 關閉 PrintWriter, 積在輸出管線中的資料沖入檔案注意 : 檔案輸入輸出需做例外處理, 使用 : try{ // 例外處理要檢查的程式 ; catch(ioexception e1){ // 處理輸入 / 輸出 5. 實作範例 : 計算成績並排名 輸入檔格式 : 學號, 姓名, 國文, 英文, 數學

41 A123, AAA, 95, 80, 77 A234, BBB, 90, 93, 65 B543, CCC, 87, 89, 78 輸出檔格式 : 學號, 姓名, 國文, 英文, 數學, 總分, 排名 A123, AAA, 95, 80, 77, 252, 2 A234, BBB, 90, 93, 65, 248, 3 B543, CCC, 87, 89, 78, 254, 1 程式碼 : import java.io.bufferedreader; import java.io.filereader; import java.io.filewriter; import java.io.ioexception; import java.io.printwriter; import java.util.stringtokenizer; public class Score { public static void main(string[] args){ try { int[] sum = new int[100]; // 總分 int[] rank = new int[100]; // 排名 String[] orig = new String[100]; // 原輸入 FileReader fr = new FileReader("input.txt"); BufferedReader buf=new BufferedReader(fr); String s = buf.readline(); // 讀取標題列 int n = 0; while(buf.ready()){ StringTokenizer st= new StringTokenizer(orig[n]=buf.readLine(), ", "); String id = st.nexttoken(); // 學號 System.out.println(" 學號 ="+id); // Debug String name = st.nexttoken(); // 姓名 System.out.println(" 姓名 ="+name); // Debug int ch = Integer.parseInt(st.nextToken()); // 國文 System.out.println(" 國文 ="+ch); // Debug int en = Integer.parseInt(st.nextToken()); // 英文 System.out.println(" 英文 ="+en); // Debug int ma = Integer.parseInt(st.nextToken()); // 數學

42 之用, 附加 System.out.println(" 數學 ="+ma); // Debug sum[n++] = ch+en+ma; // 排名次 for (int i = 0; i < n ; i++){ // 主角 for (int j = 0; j < n; j++){ // 所有的人 if (sum[j] > sum[i] i == j) rank[i]++; // 輸出至檔案 FileWriter fw=new FileWriter("output.txt", true); // 開檔做為寫出 PrintWriter pw=new PrintWriter(fw); // 轉成 PrintWirter 物件 pw.println(s+", 總分, 名次 "); // 印出標題列 for (int i = 0; i < n; i++){ pw.println(orig[i] + ", " + sum[i]+ ", "+ rank[i]); pw.close(); // 關閉輸出檔 catch(ioexception e){ System.out.println("IO 錯誤 "); 4/19 1. 多形 (polymorphism): 意義為 : 雖然都以父類別變數來指稱其子 ( 孫 ) 類別的物件, 但這些物件仍可 會顯露其本質的不同 我們並不需要使用 instanceof() 函數來判別其究竟是屬於哪種子 ( 孫 ) 類別 若在子類別中覆寫 (override) 父類別的 non-static 方法, 雖然建造子類別的物件時, 是以父類別物件 變數來指稱之, 但呼叫這些物件的 non-static 方法時, 仍然呼叫物件的實際類別的 non-static 方法 注意 : 覆寫 物件屬性 或者是覆寫 static 方法 或 static 屬性 並不會有多形的效果 class Student { int id; // 屬性, 學號 int x = 3; // 物件屬性 static int count; // 學生人數 Student(int id){ this.id = id;

43 count++; void show(){ System.out.println(" 學號 :" + id); static void showcount(){ System.out.println(" 學生人數 :"+ count); class KSU_Student extends Student { int x = 100; // 物件屬性 KSU_Student(int id){ super(id); count++; static int count; //KSU_Student 人數 static void showcount(){ System.out.println(" 崑大學生人數 :" + count); void show(){ System.out.println(" 崑大學號 :" + id); class Test { public static void main(string[] args){ Student s1 = new Student(122); s1.show(); s1.showcount(); Student s2 = new KSU_Student(33333); s2.show(); s2.showcount(); System.out.println("s2.count=" + s2.count); ((KSU_Student)s2).showCount(); System.out.println("s1.x=" + s1.x); System.out.println("s2.x=" + s2.x); 2. 會考第 4 題 : 魔術方陣 ( 只需注意藍字部分 )

44 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T4 extends JFrame implements ActionListener { JButton b1=new JButton(" 計算 "); // 按鈕 JTextField t1=new JTextField(18); // 文字方塊 JLabel l1=new JLabel(" 輸入階數 :"); // 標籤 JLabel l2=new JLabel(" 結果 "); // 標籤 JTextArea a1=new JTextArea(16, 90); // 文字區 JScrollPane s1 = new JScrollPane(a1); // 讓元件有捲軸 public T4() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 魔方陣 "); // 設定標題 this.setsize(1024, 400); // 設定大小 this.setlayout(new FlowLayout()); // 設定版面 add(l1);add(t1);add(b1);add(l2);add(s1); // 加入元件 this.setvisible(true); // 顯示 b1.addactionlistener(this); // 註冊按鈕事件 public void actionperformed(actionevent arg0) { int n; try { n = Integer.parseInt(t1.getText()); catch(numberformatexception e) { a1.settext(" 範圍錯誤 "); return; if ( n < 0 n > 15 n % 2 == 0){ a1.settext(" 範圍錯誤 "); return; a1.settext(""); // 清空文字區 int[][] a = new int[n][n];

45 int i = 0; // 最上列 int j = n/2; // 中間格 for (int number = 1; number <= n*n; number++){ a[i][j] = number; if (a[(i-1+n)%n][(j+1)%n] == 0) { // 若右上格是空白 i = (i-1+n)%n; // 上 j = (j+1)%n; // 右 else i++; // 正下格 for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ a1.append(a[i][j]+"\t"); a1.append("\n"); // 換列 /** args */ public static void main(string[] args) { new T4(); 製作過程如附檔 4/26 1. 會考第七題 : 使用者登入程式碼 : import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T7 extends JFrame implements ActionListener { JButton b1=new JButton(" 登入 "); // 按鈕

46 JButton b2=new JButton(" 結束 "); // 按鈕 JTextField t1=new JTextField(18); // 文字欄位 JPasswordField p1=new JPasswordField(18); // 密碼欄位 JLabel l1=new JLabel(" 使用者 :"); // 標籤 JLabel l2=new JLabel(" 密碼 :"); // 標籤 public T7() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 使用者登入 "); // 設定標題 this.setsize(550, 300); // 設定視窗大小 this.setlayout(new FlowLayout()); // 設定版面, 用流水版面 this.setdefaultcloseoperation(exit_on_close); // 關閉視窗即結束執行 p1.setechochar('*'); // 密碼盒的顯示字元設為 * 號 add(l1);add(t1);add(l2);add(p1);add(b1);add(b2); // 加入元件 this.setvisible(true); // 設定視窗可見 b1.addactionlistener(this); // 註冊按鈕事件, 對第一個按鈕 b2.addactionlistener(this); // 註冊按鈕事件, 對第二個按鈕 public void actionperformed(actionevent arg0) { if (arg0.getsource()==b2) System.exit(0); // 若事件來源為按鈕 2, 則結束程式 try{ // 例外處理 FileReader fr=new FileReader("user.txt"); // 從 user.txt 檔案讀取 BufferedReader buf=new BufferedReader(fr); // 建構 BufferedReader 物件 while(buf.ready()){ // 當還有資料可讀 StringTokenizer st=new StringTokenizer(buf.readLine()); // 讀取一行文字, 並做斷句 if (st.nexttoken().equals(t1.gettext()) && // 若第一欄與文字欄位 ( 帳號 ) 相同且 st.nexttoken().equals(new String(p1.getPassword())) ){ // 第二欄與密碼欄位相同 // 顯示成功訊息 JOptionPane.showMessageDialog(null," 成功登入!!"," 登入訊息!",JOptionPane.PLAIN_MESSAGE); return; // 立即返回

47 // 顯示失敗訊息 JOptionPane.showMessageDialog(null," 帳號或密碼錯誤!! 請重新登入!"," 登入訊息!",JOptionPane.ERROR_MESSAGE); catch(ioexception e1){ System.out.println("IO 錯誤 "); /** args */ public static void main(string[] args) { new T7(); 2. 製作動畫 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class AAA extends JFrame implements ActionListener { Container c; // 宣告指稱 容器物件 的變數 ImageIcon i1 = new ImageIcon("01.GIF"); // 記得複製 01.GIF 檔到工作目錄 JLabel l1 = new JLabel(i1); // 含圖片的標籤 public AAA() throws HeadlessException { // TODO Auto-generated constructor stub this.setsize(800, 600); // 設定視窗大小 c = this.getcontentpane(); // 取得容器 c.setlayout(null); // 設定容器版面, 用 null 版面 l1.setsize(71, 96); // 設定標籤元件大小 l1.setlocation(400-36, ); // 設定標籤左上角的座標 c.add(l1); // 將標籤元件加入容器

48 this.setvisible(true); // 設定視窗為可見 public void actionperformed(actionevent arg0) { /** args */ public static void main(string[] args) { new AAA(); 4/29 1. 移動的撲克牌 import java.awt.container; import java.awt.headlessexception; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.imageicon; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.timer; public class AAA extends JFrame implements ActionListener { Container c; // 宣告指稱 容器物件 的變數 ImageIcon i1 = new ImageIcon("13.GIF"); // 記得複製 01.GIF 檔到工作目錄 JLabel l1 = new JLabel(i1); // 含圖片的標籤 int dx = 5; // 每次位移量 int dy = 3; // 每次位移量 public AAA() throws HeadlessException { // TODO Auto-generated constructor stub this.setsize(800, 600); // 設定視窗大小 c = this.getcontentpane(); // 取得容器 c.setlayout(null); // 設定容器版面, 用 null 版面

49 l1.setsize(71, 96); // 設定標籤元件大小 l1.setlocation(400-36, ); // 設定標籤左上角的座標 c.add(l1); // 將標籤元件加入容器 this.setvisible(true); // 設定視窗為可見 new Timer(10, this).start(); // 啟動定時器, 每千分之十秒叫一次 public void actionperformed(actionevent arg0) { int x = l1.getlocation().x; // 取得原來的座標 int y = l1.getlocation().y; // 取得原來的座標 l1.setlocation(x + dx, y + dy); // 改變到新的座標 ( 加上偏移量 ) if (dx > 0 && x + l1.getsize().width + dx > this.getwidth() dx < 0 && x < 0) dx = -dx; // 若超過邊界, 則變換方向 if (dy > 0 && y + l1.getsize().height + dy > this.getheight()-30 dy < 0 && y < 0) dy = -dy; // 若超過邊界, 則變換方向 /** args */ public static void main(string[] args) { new AAA(); 2. 會考第 5 題 : 字串處理 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T5 extends JFrame implements ActionListener { JButton b1=new JButton(" 執行 "); // 按鈕 JTextField t1=new JTextField(18); // 文字欄位 JLabel l1=new JLabel(" 數字字串 "); // 標籤 public T5() throws HeadlessException {

50 // TODO Auto-generated constructor stub this.settitle(" 字串處理 "); // 設定視窗標題 this.setsize(600, 200); // 設定視窗大小 this.setlayout(new FlowLayout()); // 設定版面 this.setdefaultcloseoperation(exit_on_close); // 設定關閉視窗即結束 add(l1);add(t1);add(b1); // 依序加入元件至版面 this.setvisible(true); // 設定視窗可見 b1.addactionlistener(this); // 註冊按鈕事件 public void actionperformed(actionevent arg0) { try{ // 例外處理 String s = t1.gettext(); // 取得文字欄位的文字 FileWriter fw=new FileWriter("OUTPUT.txt", true);// 開檔案供寫入 PrintWriter pw=new PrintWriter(fw); // 建構 PrintWriter if (s.length() > 10){ // 若字串長度超過 10 pw.println(" 範圍錯誤, 請重新輸入 "); pw.close(); // 關閉檔案 return; // 立即返回 // 位名表 String[] table = {" 個 ", " 十 "," 百 "," 千 "," 萬 ", " 十萬 "," 百萬 "," 千萬 "," 億 "," 十億 "; // 正向掃描字串 char max = '0'; // 順便求最大 for (int i = 0; i < s.length(); i++){ if (s.charat(i)!= '0'){ pw.println(table[s.length()-1-i]+" 位為 "+s.charat(i)); if (s.charat(i)> max) max = s.charat(i); pw.println(" 最大為 " + max); // 反轉輸出, 逆向掃描字串 pw.print(" 反轉輸出 "); boolean nz = false; // 是否已遇到非 '0', 最初為 false for (int i = s.length()-1; i >=0; i--){ if (s.charat(i)!= '0') nz = true; // 若遇到非 '0' 則設 nz 為 true

51 印出字元 if (nz) pw.print(s.charat(i)); // 若已遇到過非 '0', 即可以 pw.println(); // 換行 pw.close(); // 關閉檔案 catch(ioexception e1){ System.out.println("IO 錯誤 "); return; /** args */ public static void main(string[] args) { new T5(); ( 示範過程請參閱 程式設計 ( 二 ) 課程的 開始上課 ) 5/3 1. 會考第一題算數式求解, 精簡答案 : import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T1 extends JFrame implements ActionListener { JButton b1=new JButton(" 執行 "); // 按鈕 JTextField t1=new JTextField(40); // 文字欄位 JLabel la=new JLabel(" 請輸入數學運算式 :"); // 提示輸入的標籤 JLabel lb=new JLabel(" 答案 "); // 顯示答案的標籤 public T1() throws HeadlessException { // TODO Auto-generated constructor stub

52 this.settitle(" 數學算式之求解 "); // 設定視窗標題 this.setsize(650, 100); // 設定視窗大小 this.setlayout(new FlowLayout()); // 設定版面 add(la); add(t1); add(b1); add(lb); // 加入元件 this.setvisible(true); // 設定視窗為可見的 b1.addactionlistener(this); // 註冊按鈕事件 "); public void actionperformed(actionevent arg0) { String s = t1.gettext(); // 取得文字欄位內容 if (s.length() > 30){ lb.settext(" 範圍錯誤, 請重新輸入 ( 字元總個數 :"+s.length()+" 個 ) return; // 立即返回 StringTokenizer st = new StringTokenizer(s, "+"); int sum = 0; // 總和 while(st.hasmoretokens()){ int val = Integer.parseInt(st.nextToken()); if (val > 10000){ lb.settext(" 範圍錯誤, 請重新輸入 "); return; // 立即返回 sum = sum + val; lb.settext(" 答案是 :" + sum); // 顯示答案 /** args */ public static void main(string[] args) { new T1(); 2. 製作 jar 檔, 以上次的移動撲克牌為例 (1) 引用資源 ( 如圖檔 ) 必須改寫程式碼, 如藍字部分 :

53 import java.awt.container; import java.awt.headlessexception; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.imageicon; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.timer; public class AAA extends JFrame implements ActionListener { Container c; // 宣告指稱 容器物件 的變數 ImageIcon i1 = new ImageIcon( this.getclass().getclassloader().getresource("13.gif")); // 記得複製 01.GIF 檔到工作目錄 JLabel l1 = new JLabel(i1); // 含圖片的標籤 int dx = 5; // 每次位移量 int dy = 3; // 每次位移量 public AAA() throws HeadlessException { // TODO Auto-generated constructor stub this.setsize(800, 600); // 設定視窗大小 c = this.getcontentpane(); // 取得容器 c.setlayout(null); // 設定容器版面, 用 null 版面 l1.setsize(71, 96); // 設定標籤元件大小 l1.setlocation(400-36, ); // 設定標籤左上角的座標 c.add(l1); // 將標籤元件加入容器 this.setvisible(true); // 設定視窗為可見 new Timer(10, this).start(); // 啟動定時器, 每千分之十秒叫一次 public void actionperformed(actionevent arg0) { int x = l1.getlocation().x; // 取得原來的座標 int y = l1.getlocation().y; // 取得原來的座標 l1.setlocation(x + dx, y + dy); // 改變到新的座標 ( 加上偏移量 ) if (dx > 0 && x + l1.getsize().width + dx > this.getwidth() dx < 0 && x < 0) dx = -dx; // 若超過邊界, 則變換方向 if (dy > 0 && y + l1.getsize().height + dy > this.getheight()-30 dy < 0 && y < 0) dy = -dy; // 若超過邊界, 則變換方向 /** args

54 */ public static void main(string[] args) { new AAA(); (2) 將圖檔 13.GIF 放在與 AAA.class 檔相同的目錄, 假設是 A 目錄 (3)cd 到 A 目錄, 在此目錄中建一個子資料夾, 名稱為 META-INF 並且在 META-INF 資料夾中建立 一個純文字檔, 檔名為 MANIFEST.MF, 內容如下 : Manifest-Version: 1.0 Main-Class: AAA (4) 將 AAA.class 檔 13.GIF 檔 以及 META-INF 資料夾, 用 WinRAR 壓成 ZIP 格式檔案, 取名為 A.jar 則此 A.jar 不論放在哪個目錄, 都可以直接執行 如果沒有 WinRAR, 也可以用如下指令壓 : jar -cvfm A.jar AAA.class 13.GIF META-INF 3. 會考第八題部分 : 一開始 ( 在建構方法中 ) 即開啟 g_book.txt 檔案 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.event.*; public class T8 extends JFrame implements ActionListener { JButton b1=new JButton(" 輸入 "); JButton b2=new JButton(" 結束 "); JLabel l1=new JLabel(" 顯示模式 "); // 標籤 JTextArea a1=new JTextArea(30,70); JScrollPane s1 = new JScrollPane(a1); int mode; // 0: 顯示模式 public T8() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 留言版 "); this.setsize(800,640); this.setlayout(new FlowLayout()); this.setdefaultcloseoperation(exit_on_close);

55 add(l1);add(s1);add(b1);add(b2); a1.seteditable(false); this.setvisible(true); b1.addactionlistener(this); b2.addactionlistener(this); try { FileReader fr=new FileReader("g_book.txt ");// 檔案讀取 BufferedReader buf=new BufferedReader(fr); while(buf.ready()){ a1.append(buf.readline() + "\n"); buf.close(); catch(ioexception e2){ System.out.println("IO 錯誤 "); public void actionperformed(actionevent arg0) { /** args */ public static void main(string[] args) { new T8(); 5/6 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*;

56 import javax.swing.event.*; public class T8 extends JFrame implements ActionListener { JButton b1=new JButton(" 輸入 "); JButton b2=new JButton(" 結束 "); JLabel l1=new JLabel(" 顯示模式 "); // 標籤 JTextArea a1=new JTextArea(30,70); JScrollPane s1 = new JScrollPane(a1); int mode; // 0: 顯示模式 String oldt; // 舊的留言 public T8() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 留言版 "); this.setsize(800,640); this.setlayout(new FlowLayout()); this.setdefaultcloseoperation(exit_on_close); add(l1);add(s1);add(b1);add(b2); a1.seteditable(false); this.setvisible(true); b1.addactionlistener(this); b2.addactionlistener(this); try { FileReader fr=new FileReader("g_book.txt ");// 檔案讀取 BufferedReader buf=new BufferedReader(fr); while(buf.ready()){ a1.append(buf.readline() + "\n"); buf.close(); catch(ioexception e2){ System.out.println("IO 錯誤 "); public void actionperformed(actionevent arg0) { if (arg0.getsource()== b2) System.exit(0); if (mode==0){

57 else { // 顯示模式換成輸入模式 mode = 1; // 改變模式 a1.seteditable(true); // 變成可編輯 oldt = a1.gettext(); // 備份舊的留言 a1.settext(""); // 文字區清為空白 l1.settext(" 輸入模式 "); // 改變標籤文字 b1.settext(" 新增 "); // 改變按鈕文字 // 輸入模式換成顯示模式 String newt = new Date() + "\n======================================\n" + a1.gettext()+"\n\n" + oldt; a1.settext(newt); mode = 0; // 改變模式 a1.seteditable(false); // 變成不可編輯 l1.settext(" 顯示模式 "); // 改變標籤文字 b1.settext(" 輸入 "); // 改變按鈕文字 // 寫檔 /** args */ public static void main(string[] args) { new T8(); 5/10 HitMouse.java import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*;

58 import javax.swing.event.*; public class HitMouse extends JFrame implements MouseInputListener { ImageIcon[] mp = new ImageIcon[4]; JLabel[] m = new JLabel[9]; Mouse[] mice = new Mouse[9]; Image hammer_up, hammer_down; // 槌 int hx, hy; boolean down; // 槌的控制 public HitMouse() throws HeadlessException { // TODO Auto-generated constructor stub this.settitle(" 打地鼠 "); this.setsize(800, 640); this.setdefaultcloseoperation(exit_on_close); this.setlayout(null); mp[0] = new ImageIcon(this.getClass().getClassLoader(). getresource("hitmouse/hide_mouse.gif")); mp[1] = new ImageIcon(this.getClass().getClassLoader(). getresource("hitmouse/laugh_mouse.gif")); mp[2] = new ImageIcon(this.getClass().getClassLoader(). getresource("hitmouse/hit_mouse.gif")); mp[3] = new ImageIcon(this.getClass().getClassLoader(). getresource("hitmouse/hurt_mouse.gif")); for (int i = 0; i < 9; i++){ mice[i] = new Mouse(i, this); mice[i].start(); // 啟動老鼠 m[i] = new JLabel((""+i), mp[mice[i].state], 0); m[i].setlocation(80+i%3*150, 40+i/3*150); m[i].setsize(117, 117); add(m[i]); hammer_up = Toolkit.getDefaultToolkit().createImage( this.getclass().getclassloader(). getresource("hitmouse/hammer_up.gif")); hammer_down = Toolkit.getDefaultToolkit().createImage( this.getclass().getclassloader(). getresource("hitmouse/hammer_down.gif")); this.setvisible(true); this.addmouselistener(this); this.addmousemotionlistener(this);

T2 楊輝三角塔 說明 : 請在視窗上配置二文字方塊及一按鈕, 在二文字方塊上分別輸入一楊暉三角塔之階數 a 及 b, 按上述按鈕後, 輸出該第 a 階到第 b 階之楊暉三角塔 ( 或稱巴斯卡三角型 ) 請注意 : 三角塔之排列須對偁, 不可為倒三角或倒梯形, 否則不予計分 輸入的數值範圍為 0 ~

T2 楊輝三角塔 說明 : 請在視窗上配置二文字方塊及一按鈕, 在二文字方塊上分別輸入一楊暉三角塔之階數 a 及 b, 按上述按鈕後, 輸出該第 a 階到第 b 階之楊暉三角塔 ( 或稱巴斯卡三角型 ) 請注意 : 三角塔之排列須對偁, 不可為倒三角或倒梯形, 否則不予計分 輸入的數值範圍為 0 ~ T1 算術式之求解 說明 : 請在視窗上配置一文字方塊及一按鈕, 在文字方塊上輸入一數學運算式, 按上述按鈕後, 輸出該數學運算式的最後結果值 該運算式的運算元皆介於 0~10000, 而運算子僅含 +, 且該運算式的字元總個數 ( 即運算元的個數加上運算子的個數 ) 最多為 30, 程式中必須有須有判斷範圍的程式, 若是超出題目所訂定的字串長度則要求重新輸入 文字方塊文字 :80+123456 輸出

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

Swing-02.pdf

Swing-02.pdf 2 J B u t t o n J T e x t F i e l d J L i s t B u t t o n T e x t F i e l d L i s t J F r a m e 21 2 2 Swing C a n v a s C o m p o n e n t J B u t t o n AWT // ToolbarFrame1.java // java.awt.button //

More information

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 多型 Polymorphism 講師 : 洪安 1 多型 編譯時期多型 ( 靜態多型 ) function overloading 如何正確呼叫同名的函數? 利用參數個數與型態 operator overloading 其實同 function overloading 執行時期多型 ( 或動態多型 ) 如何正確呼叫不同物件的相同名稱的成員函數 利用繼承與多型 2 子類別與父類別物件間的指定 (assignment)

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

Microsoft PowerPoint - C_Structure.ppt

Microsoft PowerPoint - C_Structure.ppt 結構與其他資料型態 Janet Huang 5-1 結構的宣告 struct 結構名稱 struct 結構名稱變數 1, 變數 2,, 變數 m; struct 結構名稱 變數 1, 變數 2,, 變數 m; student; student; 5-2 1 結構變數初值的設定 struct 結構名稱 struct 結構名稱變數 = 初值 1, 初值 2,, 初值 n student="janet","1350901",100,95

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

java2d-4.PDF

java2d-4.PDF 75 7 6 G r a d i e n t P a i n t B a s i c S t r o k e s e t P a i n t ( ) s e t S t o r k e ( ) import java.awt.*; import java.awt.geom.*; public class PaintingAndStroking extends ApplicationFrame { public

More information

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4]; Introduction to Programming (II) Spring 2008, Final Exam Name: ID Number: [True/False:] (5 points each) If your answer is "false", you have to provide correct reasons. Otherwise, no points will be given.

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

投影片 1

投影片 1 Chap 8 繼承 抽象類別與介面 8-1 類別的繼承 8-2 介面 8-3 介面的繼承 8-4 抽象類別 8-5 抽象類別與介面 8-6 常數類別 8-1 類別的繼承 8-1-1 類別架構 8-1-2 類別的繼承 8-1-3 覆寫和隱藏父類別的方法 8-1-4 隱藏父類別的成員變數 8-1-5 使用父類別的建構子 8-1-1 類別架構 - 繼承關係 類別的繼承關係可以讓我們建立類別架構, 在 UML

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

Microsoft Word - 投影片ch13

Microsoft Word - 投影片ch13 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十三章例外處理 本章學習目標了解什麼是例外處理認識例外類別的繼承架構認識例外處理的機制學習如何撰寫例外類別 例外處理 13-2 13.1 例外的基本觀念 在執行程式時, 經常發生一些不尋常的狀況 例如 : (1) 要開啟的檔案不存在 (2) 陣列的索引值超過了陣列容許的範圍 (3) 使用者輸入錯誤 Java 把這類不尋常的狀況稱為

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) 09 (File Processes) 9-1 9-2 (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) Java Servlet 9-1 Servlet (File Processes) Client Servlet Servlet Java Java (Stream)

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

Microsoft PowerPoint - chap08.ppt

Microsoft PowerPoint - chap08.ppt 第八章繼承 資訊科技系 林偉川 類別繼承使用 extends 關鍵字 修飾字 class 子類別 extends 父類別 1 { // 區塊內的程式敘述 類別以 final 宣告時, 不能做為父類別 extends 關鍵字之後只能接一個父類別 2 1 例子 : class A{ class B extends A { class C extends A { class D extends B { final

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v 第九章 Java I/O 流操作 实验目的 (1) 掌握文本文件的读写方法 (2) 掌握 InputStream OutputStream 的使用方法 (3) 熟悉 FileReader,BufferedReader,InputStreamReader 和 FileWriter, BufferedWriter, PrintWriter 的使用方法 ; 理解使用过滤流实现数据项的读写 :DataOutputStream,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes What is a JavaBean? JavaBean Java JavaBean Java JavaBean JComponent tooltiptext font background foreground doublebuffered border preferredsize minimumsize maximumsize JButton. Swing JButton JButton() JButton(String

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc)

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc) 作者 Amber 版本 1.0.0 日期 2012/04/25 頁數 1/7 如何使用 LED 燈顯示狀態? 適用於 : 平台 作業系統版本 XPAC utility 版本 XP-8000 系列 N/A N/A XP-8000-Atom 系列 WES2009 所有版本 N/A: Not applicable to this platform and OS. 注意! 欲變更系統的任何設定之前, 請先關閉

More information

運算子多載 Operator Overloading

運算子多載 Operator Overloading 函數樣板 (Function Template) 與 類別樣板 (Class Template) 講師 : 洪安 1 資料結構與 C++ 程式設計進階班 為何需要通用函數? (1/2) int abs(int x) { return (x>0)?x:-x; 取名困難不好記 float fabs(float x) { return (x>0)?x:-x; complex cabs(complex x)

More information

投影片 1

投影片 1 Chap 9 巢狀類別 多形與套件 9-1 巢狀類別 9-2 匿名內層類別 9-3 多形的基礎 9-4 多形的實作 9-5 套件 9-1 巢狀類別 9-1-1 巢狀類別 9-1-2 內層類別的使用 9-1-1 巢狀類別 - 說明 巢狀類別是在類別中擁有其他類別的宣告, 在外面的類別稱為 外層類別 (Enclosing Class); 內層的成員類別稱為 內層類別 (Inner Classes) 巢狀類別強調類別之間的關聯性,

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

Microsoft PowerPoint - EmbSys102_JavaOOP [相容模式]

Microsoft PowerPoint - EmbSys102_JavaOOP [相容模式] 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { // Customer 類別宣告 private String name; // 成員資料 private String address; public int age; // 建構子 : 使用參數設定成員資料初始值

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

untitled

untitled 1 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object 參 類 都 object 參 object Boxing 參 boxing

More information

untitled

untitled OGRE http://antsam.blogone.net AntsamCGD@hotmail.com OGRE OGRE listener listener target listener target Dispatcher Processor Input Reader Event class view Event Class view Input Event ctrlaltshift ascoll

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 Java 程 序 设 计 实 验 指 导 书 商 丘 学 院 计 算 机 科 学 与 技 术 学 院 张 艳 晓 目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23 实 验

More information

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 Excel - - Excel - -4-5 840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00 ( 0 ) 智慧標籤 相關說明提示 -5 -- Excel 4 5 6 7 8 + - * / % ^ = < >= & 9 0 (:) (,) ( ) Chapter - :,

More information

untitled

untitled How to using M-Power Report API M-Power Report API 力 了 M-Power Report -- Java (Library) M-Power Report API 行 Java M-Power Report M-Power Report API ( 30 ) PDF/HTML/CSV/XLS JPEG/PNG/SVG 料 料 OutputStream

More information

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2 Chapter 02 變數與運算式 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.2.1 2.2.2 2.2.3 type 2.2.4 2.3 2.3.1 print 2.3.2 input 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 + 2.4.6 Python Python 2.1 2.1.1 a p p l e b e a r c 65438790

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

untitled

untitled 1 Outline ArrayList 類 列類 串類 類 類 例 理 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

ZW1.PDF

ZW1.PDF C. A. R. Hoare, The Emperor s Old Clothes Java C++ Objective C Eiffel Smalltalk Mesa Lisp Java Java Java C++ Java 10 Item 1 Item 2 String.equals() == 1 1 Item 3 Java C++ Java Item 4 Java Item 5 Java Item

More information

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1 0 0 = 1 0 = 0 1 = 0 1 1 = 1 1 = 0 0 = 1 : = {0, 1} : 3 (,, ) = + (,, ) = + + (, ) = + (,,, ) = ( + )( + ) + ( + )( + ) + = + = = + + = + = ( + ) + = + ( + ) () = () ( + ) = + + = ( + )( + ) + = = + 0

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

Microsoft PowerPoint - course2.ppt

Microsoft PowerPoint - course2.ppt Java 程 式 設 計 基 礎 班 (2) 莊 坤 達 台 大 電 信 所 網 路 資 料 庫 研 究 室 Email: doug@arbor.ee.ntu.edu.tw Class 2 1 回 顧 Eclipse 使 用 入 門 Class 2 2 Lesson 2 Java 程 式 語 言 介 紹 Class 2 3 Java 基 本 知 識 介 紹 大 小 寫 有 差 (Case Sensitive)

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

18_GUI

18_GUI 圖形使用者介面 什麼是圖形使用者介面? 圖形使用者介面 (Graphics User Interface, GUI) 以圖像方式與使用者互動 : 程式顯示訊息 程式顯示資訊 操介界面 例子 : 電視遊樂器 電腦遊戲 Yung-Chen Chou 1 圖形使用者介面 要讓 Java 在 MS Windows 作業系統下或 Linux/Unix 下的 X windows 環境下以圖形方式呈現必須靠 Java

More information

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp 01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File

More information

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc Author WeiKai Version 1.0.0 Date 2013/4/14 Page 1/11 我如何在 XPAC 上建立一個 COM port 通訊程式 Applies to: Platform OS version XPAC utility version XPAC series All versions (WinCE6) All versions XPAC SDK 提供 XPAC 結合

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

2009年9月全国计算机等级考试二级Java真题及答案

2009年9月全国计算机等级考试二级Java真题及答案 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 Java 真 题 及 答 案 [ 录 入 者 :NCRE100 时 间 :2009-10-08 19:41:34 作 者 : 来 源 :NCRE100.com 浏 览 :1421 次 ] 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 笔 试 试 卷 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟,

More information

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制 Java 程式設計 標準輸出入與流程控制 本章大綱 標準輸出入 (Standard I/O) 分支 (Branch) if ~ else switch ~ case 迴圈 (Loop) for while do ~ while 中斷指令 break continue 總整理 標準輸出 定義 : 將資料印到螢幕上 Java 標準輸出指令 System.out.println( 資料 ) 將資料印出後換行

More information

利用Java技术编写桌面软件基础

利用Java技术编写桌面软件基础 利 用 Java 技 术 编 写 桌 面 软 件 基 础 在 学 习 Java 编 程 语 言 的 细 节 和 语 法 时, 我 们 会 碰 到 这 样 一 个 问 题 : 开 发 桌 面 应 用 软 件 需 要 使 用 哪 些 Java 技 术, 应 当 引 入 哪 些 package? 这 一 问 题 的 答 案 取 决 于 开 发 的 应 用 软 件 类 型 和 它 的 作 用 这 篇 文 章

More information

Microsoft Word - chap12.doc

Microsoft Word - chap12.doc 94 12. Inheritance in Java Java 的類別同樣有繼承的功能, 衍生類別同樣會繼承基本類別所有的資料成員與函式成員, 當繼承而來的函式成員不適於衍生類別時, 同樣可以在衍生類別之定義內將其重新定義 (override), 並可進一步加入新的成員 ( 資料或函式 ), 以符合衍生類別應有的屬性與行為 一基本類別 ( 父類別 ) 可以有需多繼承它的衍生類別 ( 子類別 ), 與

More information

Microsoft PowerPoint - ch02

Microsoft PowerPoint - ch02 第 一 篇 基 礎 圖 文 動 畫 (Basic Graphics / Animation) 2 1 簡 介 2 2 Frame Class 2 3 執 行 緒 繪 圖 流 程 2 4 Font Class 2 5 Color Class 2 6 中 文 處 理 2 7 習 題 (Exercises) 第 二 章 文 字 繪 製 (Words) 2 1 簡 介 本 書 探 討 的 是 動 畫 遊 戲,

More information

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h 資訊系統與實習 製作 : 林郁君 一 2009.09.28 9X9 'button 被按下後 ' Dim i, j As Integer For i = 1 To 9 'i 從 1 到 9' For j = 1 To 9 'j 從 1 到 9' If j * i < 10 Then ' 如果 j 乘上 i 是為個位數 ' Response.Write(i & "*" & j & " =" & i *

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

Microsoft Word - 投影片ch14

Microsoft Word - 投影片ch14 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十四章檔案處理 本章學習目標認識串流學習檔案的開啟與關閉學習如何處理文字檔學習如何處理二進位檔 檔案處理 14-2 14.1 關於串流 串流可分為 輸入串流 (input stream) 與 輸出串流 (output stream) 兩種 下圖說明了串流如何做為檔案處理的橋樑 : stream 資料 input stream

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

chp11.ppt

chp11.ppt Java 软 件 设 计 基 础 Applet 程 序 1.Applet 概 念 Applet 与 Application Application 是 能 独 立 运 行 的 程 序 单 位 ; Applet 程 序 不 能 独 立 运 行, 必 须 依 附 在 网 页 上, 借 助 于 浏 览 器 才 能 运 行 通 常 置 于 服 务 器 端, 当 用 户 连 接 到 该 网 页,Applet

More information

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址   access_token=access_token (http 停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 https://webapi.zego.im/cgi/stop-mix? access_token=access_token (https://webapi.zego.im/cgi/stop-mix? access_token=access_token)

More information