1 / 37

2006 Java 讀書會

2006 Java 讀書會. 查士朝 2006/12/25. 1. 背景與時程介紹. 目的、對象,與進行方式. 目的 協助專題學生與研究生能夠很快進入狀況 分享個人過去在軟體開發上之經驗 對象 筆者的專題生及研究生 ( 不強迫參加 ) 其它想要學習 Java 程式語言及應用的人 進行方式: 每週一中午 12:30~1:20 於 MA303 由筆者分享過去在 Java 軟體開發上之經驗 著重於相關經驗分享重要觀念,並告知可以如何加強這方面的能力。 不強迫回去看書與練習,但建議最好每週可以在週六、日的時間,抽出二到四個小時練習。.

calum
Download Presentation

2006 Java 讀書會

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2006 Java 讀書會 查士朝 2006/12/25

  2. 1 背景與時程介紹

  3. 目的、對象,與進行方式 • 目的 • 協助專題學生與研究生能夠很快進入狀況 • 分享個人過去在軟體開發上之經驗 • 對象 • 筆者的專題生及研究生 (不強迫參加) • 其它想要學習 Java 程式語言及應用的人 • 進行方式: • 每週一中午12:30~1:20 於 MA303 • 由筆者分享過去在 Java 軟體開發上之經驗 • 著重於相關經驗分享重要觀念,並告知可以如何加強這方面的能力。 • 不強迫回去看書與練習,但建議最好每週可以在週六、日的時間,抽出二到四個小時練習。

  4. 時程規劃 (1/2)

  5. 時程規劃 (2/2)

  6. 2 Java 的基本常識

  7. Standard Edition: 包含 Java 的執行環境、基礎函式庫,以及編譯工具等 目前最新版本為第 6 版 (1.6.x) 但考慮相容性,最好使用第 5 版。 Enterprise Edition: 包含 Servlet、Enterprise Java Beans 等專屬套件,主要是要開發 Web 伺服器的相關應用 目前最新版本為第 5 版,之前版本為 1.4.x 版 Mobile Edition: 主要提供手機與行動裝置等不是那麼功能強大的設備使用。 目前 Wireless Toolkit 是到 2.5 beta 版,不過比較完整的是 2.2 版 Java 的版本 可至 http://java.sun.com 下載最新版本的 SDK

  8. Java 的執行環境 • Java VM: Java 之所以跨平台,主要是因為各平台都有相對應之 JVM • Java 的程式 Compile 後為 Byte Code,其後交由 VM (或 Java Runtime Environment JRE) 執行 • 目前市面上有可以把 Java 程式轉成 exe 後執行的工具 (轉換後會變快,但是就不能跨平台了) • 要錢的:exe4j, JBuilder, installAnywhere • Free 的? Launch4j、GCC/GCJ,JSmooth • Servlet、EJB,或 Web Service 的執行平台 • Tomcat: 目前到第 6 版,比較穩定的是第 5 版,5.5 之後與 5.5 之前的管理介面不同,筆者個人較喜歡 5.0.X • JBoss:同樣為 Free 的,最近 Linux 宣佈以 3.5 億美元併購 JBoss,是好是壞,執得觀察 • 其它:BEA’s WebLogic、IBM’s Web Sphere, ……

  9. Java 的 IDE 環境 • JBuilder:早期最有名,但目前有許多免錢的工具 • Eclipse:前身為 IBM VisualAge,不只 Java,可用同一介面撰寫 C++ 語言的程式。可以外掛很多模組,目前到 3.2.1 版 (可惜不支援 JSDK 1.6)。 • NetBeans:目前到 5.5 版,為 Sun 出的工具,支援的版本最新 • 其它:有很多商業的開發工具 也可以用小作家等文書編輯軟體來作開發。而後用 javac 直接 compile。 一般的 IDE 環境多半有其內建的 JVM 或 JRE。因此,會有版本相容的問題。 • IDE 可能內建的 JRE 比較舊,而無法對新版本進行測試 • 產生後的 byte code 在要執行時,也要確認 JVM 是支援所呼叫的功能。

  10. Java O’Reilly, Java in a Nutshell O’Reilly, Java Threads Thinking in Java Servlet and JSP O’Reilly, Java Servlet 林上傑,JSP 2.0 技術手冊 Head First Servlet and JSP EJB Sun, J2EE Tutorial Head First EJB AJAX O’Reilly, Head rush AJAX Apress, AJAX patterns and Best Practices 其它: O’Reilly, Java Swing O’Reilly, Java and XML O’Reilly, Java Web Service Sun, Java Web Service Tutorial O’Reilly, Head first Design Pattern Addison Wesley, Design Pattern Java Work Book 如果需要參考書的話

  11. 其它的相關工具 • MySQL: 雖然現在商業化,但學術用途還是免費。新版比較討厭的是中文的問題,比較穩的是 4.X 版。再之前的沒有支援 Transaction,就沒必要了。 • SQL Server: 記得搭配一款比較穩的 JDBC Library (我受不了 MS 自己提供的)。 • Oracle: 其實會 Oracle 就可以有飯吃了,個人到目前為止,只灌成功玩過幾次 (他有 9i 或是 10g 是可以測試使用) • DB2: 用 IBM Solution 的地方也不少,但是就跟 Oracle 一樣,搞定 Database 的時間會比搞定 Java 要長得多。

  12. 3 Java 程式設計基礎

  13. Java vs. C/C++ • 和 C/C++ 相比,Java 移除了指標的概念 • Java 會由 JVM 自己負責 Garbage Collection (GC) 的動作,不用自己去清 (雖然有時候可以強制執行) • Java 不會產生可執行檔,而是產生 Byte Code,交由 JVM 去執行 javac/ java 編輯器 C/C++ 編輯器 Java 程式碼 C/C++ 程式碼 JVM Java byte code 可執行檔

  14. Java 是物件導向語言 • 和 C++ 相容 C 而可以擺些 C 的 function 不同,所有 Java 的程式碼 (包括 main),都需要放在類別中 public class People { private int hight; private int weight; public People(int h, int w) { hight = h; weight = w; } public int getHeight() { return height; } protected void finalize() throws java.lang.Throwable { } } class People { private: int hight; int weight; public: People(int h, int w) { hight = h; weight = w; } int getHeight() { return height; } ~People() { } }; int People::getHeight() { return height }

  15. Step 1: 建立 HelloWorld.java Step 2: 於 HelloWorld.java 中輸入以下內容: public class HelloWorld { public static void main(String argv[]) { System.out.println(“Hello World”); } } Step 3: 使用 javac compile javac –cp path HelloWorld.java Step 4: 執行 java –cp path HelloWorld Step 1: 建立 HelloWorld.cc Step 2: 於 HelloWorld.cc 中輸入以下內容: #include<iostream> using namespace std; void main(int argc, char *argv) { cout<<“Hello World”<<endl; } Step 3: compile,例如: g++ -o hello HelloWorld.cc Step 4: 執行 hello 檔案中只能有一個和檔名同名的 public class,main 一定要放於其中 Hello World vs Hello World java 預設會 include java.lang.* C++ 的參數列可省 classpath (cp) 是函式庫的位置 一定要一模一樣,不可以省字 多檔時只能有一個 main 指定要執行哪個 class 內的 main (表示多檔案可有 main)

  16. 於檔案 A.java public class A { private String outs; public A(String s) {outs= s;} public void hello() { System.out.println(outs); } } 於檔案 B.java public class B { public void main(String argc[]) { A aobj = new A(“Hello World”); aobj.hello(); } } javac B.java 會產生 A.class 與 B.class java B A.cc #include <iostream> #include <string> using namespace std class A { private: string outs; public: A(string s) {outs=A;} void hello() {cout<<outs} }; B.cc #include “A.cc” void main() { A aobj(“Hello World”); aobj.hello(); } 類別物件的產生與跨類別呼叫 A *aobj = new A(“Hello World”); Aobj->hello(); delete aobj;

  17. 當有多個類別時,可使用 package 和 import • 在同個目錄下,同名稱的類別只能有一個 • 為了管理以及命名上的方便,可以使用 package 的方式 • 倘若工作目錄為 $working$,則可以在該目錄底下,另外建立子目錄,而將類別放於其中,倘若裏面有一個目錄 mylib,其中有一個 tool.java 的檔案,來存放個人常使用的工具函式,則: package mylib; public class tool { …… } • 上述檔案在 compile 後會自動於 $working$/mylib 底下,產生 tool.class • 如果要使用,可建另一個檔案 use.java (不用在同目錄) import mylib.tool; public class use { …… } • 就存取上: • public 的 class 任何類別都可以存取 • protected 的 class 只有同 package 的才可以存取 • private 的只有同檔案的 class 才能存取 或者使用 import mylib.*; 也可以在呼叫時指名 mylib.tool tool = new mylib.tool()

  18. 使用 jar 將程式碼壓縮,以便其它人方便使用 • 可使用 jar 將所產生之程式碼壓縮成一個檔 • 例如可以建立一個 lib 的目錄,來放產生的 class (以前頁為例,可能是有一個 mylib 的目錄,裏面有 tool.class) • 使用 jar 將之壓縮 • jar cvf tool.jar –C lib/ • 以後就可以在設 classpath 時將之設定: • java –cp tool.jar;. use 詳情可自行打 jar 不加參數 第一個是包裝起來的 jar 檔,如果有多個路徑要找,用分號分開,此例中會再找同個目錄底下,看有沒有 use.class

  19. Java 的變數與函數 public class People { private int hight; private int weight; public People(int h, int w) { hight = h; weight = w; } public double BMI() { double bmi = (double)w/((double)helght*(double)helght); return bmi; } public int getHeight() { return height; } protected void finalize() throws java.lang.Throwable { } } 變數宣告,Java 與 C/C++ 使用類似的基本變數,惟多了 boolean 的變數 Member Function 的結構,Java 也與 C++ 類似 運算規則和 Assignment 也是一樣

  20. if and logical operator if (gender.equals( "Female" ) && age >= 65) { seniorFemales += 1; } while and do while while ( product <= 50 ){ product *= 3; } do { product *= 3; } while ( product <= 50 ); for for ( int i = 100; i >= 1; i-- ) { } Switch switch ( grade ) { case 'A': displayJLabel.setText( "Excellent!" ); break; case 'B': displayJLabel.setText( "Very good!" ); break; case 'C': displayJLabel.setText( "Good." ); break; case 'D': displayJLabel.setText( "Poor." ); break; case 'F': displayJLabel.setText( "Failure." ); break; default: displayJLabel.setText( "Invalid!!" );} 流程控制大體和 C/C++ 一樣 與 C++ 等不同的是,他一定是 boolean 變數,而不會是一個數字 (C++ 中,0 為 false)

  21. 繼承與實作 (1/2) • 在 Java 中,可以繼承一個以經建立的類別,或是建立一個介面,要求其他類別在實作時必需遵守 • 倘若 class A 繼承 class B class A extends B { } • A 可直接使用 B public 與 protected 的變數與成員函數 • 如果有函數是需要 B 的變數,則 A 也可以被當作 B 的一種而傳入 public void foo(B obj) { obj.func(); (A)obj.func(); } • 如果有多形的時候,視是呼叫決定使用誰的 function • 與 C++ 不同的是,Java 不能多重繼承,只能多重實作

  22. 繼承與實作 (2/2) • 在 java 中,可以定義 interface,要求其它類別一定要實作介面 • 類別可以實作其它 interface,表示一定要對 interface 所要求的 function 做實作 public interface component { public draw(); public create(); } public class window implements component { public draw() { } public create() { } } • 可在介面中定義變數 另一種類似的是抽象類別: public abstract class foo { public abstract abc() { …… } } 抽象類別可以有實作,但不能作為應用程式的主類別

  23. 4 NetBeans 的使用

  24. 啟動 NetBeans

  25. 建立新專案 (1/2)

  26. 建立新專案 (2/2)

  27. Project View

  28. Files View 所產生的 class 會放在 build 下的 classes 目錄 原始碼放在 src 目錄下

  29. Runtime View

  30. 也可以直接使用 能夠 Deployment 是很重要的,不要每次都只在 IDE 環境秀給人家看

  31. 也可以自動產生 jar 檔 之後可用 java -jar dist\test1.jar 或 java –cp dist\test1.jar HelloWorld 啟用

  32. 可加入自己寫或外部抓來的 library

  33. 5 本週建議練習項目

  34. 練習一 • 至http://java.sun.com 下載 JavaSE SDK 與 NetBeans • 至http://java.sun.com 下載 java tutorials • 依照 Tutorial,執行第一回合 ─ Getting Started (自己寫 HelloWorld) • 自己瀏覽 Learning the Java Language

  35. 練習二 • 建立一個 mylib 的 package,其中有一個 tool 的類別 • 該類別中有一個成員函數 Cnm(int []array, int m) 表示從陣列中 (有array.length 個元素),要挑出 m 個元素,並將之印出 • 倘若陣列 a 中有三個元素 {1,2,3},則 Cnm(a,1) 會在標準輸出印出: 1 2 3 • 使用 javac 編譯,並將其包裝成 jar 檔 • 另外建一個 class,可以去呼叫該 function 而得到結果

  36. 練習三 • 建立兩個 class A 與 B,A 繼承 B • A 與 B 都有一成員函式 foo(),各自會印出 “A.foo() is called” 與 “B.foo() is called” • 建立一類別 C,其中有 main function 與一 function: public void test(B bobj) { bobj.foo(); (A)bobj.foo(); } • 在 main 中建立如以下的程式碼: C cobj = new C(); A aobj = new A(); cobj.test(aobj);

  37. 練習四 • 安裝 NetBeans • 利用 NetBeans 來實作練習一

More Related