230 likes | 308 Views
Learn how to achieve separation of concept and implementation using abstract classes in Java with an example of different types of books. Explore polymorphism concepts and Java exceptions handling.
E N D
Java Tutorial III 2004/12/02
多型(polymorphism) book PDFBook StoryBook PaperBook bookName ︰string price ︰int content ︰String ------------------------------- setBookName(String bookName) setBookPrice(int price) String getBookName() int getPrince() abstract void read() read10time() displayText() displayText(String text)
多型(polymorphism)(cont1) • 利用抽象類別 達成概念與實作分離 • Book • PDFBook 是一種書 • PaperBook 是一種書 • StoryBook 是一種書 public class Book { String bookName; int price; String content; abstract void read(); void read10Time() { for (int count= 1;count<= 10;count++) { read(); } } }
多型(polymorphism)(cont2) public class PDFBook extends Book { public void read () { openFile(); displayText(); } private void openFile() { } public String readText() { contnet= readFileContent(); return content; } public void displayText() { displayText(readText()); } Public void displayText(boolean print) { displayText(readText(),0,true); } private void displayText(String text,int location,boolean print) { System.out.println(text); } }
多型(polymorphism)(cont3) public class people { private Book book1=null; private Book book2=null; public people( ) { book1=new StoryBook( ); book2=new PDFBook( ); } public void readBook( ) { book1.read( ); book2.read( ); book1.read10time( ); } } People BOOK Create(use) Result(response)
多型(polymorphism)(cont4) public class people { private Book bookList[ ]=new Book[3]; public people( ) { book[0]=new StoryBook( ); book[1]=new PDFBook( ); book[2]=new PaparBook( ); } public void readBook( ) { for (int count=0;count<bookList.length;count++) { book[count].read( ); } } } BOOK[0] BOOK[1] People BOOK[2]
多型(polymorphism)(cont5) public class people { private Book bookList[ ]=new Book[3]; public people( ) { book[0]=new StoryBook( ); book[1]=new PDFBook( ); book[2]=new PaparBook( ); } public void setRead(Object something) { for (int count=0;count<book.length;count++) { book[count].read(); } } } BOOK[0] BOOK[1] People BOOK[2]
Java Object java.lang.Object 繼承 All Java Class public class people { public void setBook(Object something) { if (something instanceof Book) { something.read( ); } if (something instanceof Car) { something.drive( this ); } } }
Exception • 程式執行過程,產生錯誤時,系統內部發出可供攔截的狀態 • 當程式內使用到會強迫發出Exception的物件時,需要使用try… catch… 指令攔截可能的Exception,沒有寫 try…catch…,程式將無法正確編譯(Compile Error) • 例如 • 檔案I/O的Class • FileInputStream • FileOutputStream • 多執行序 • Thread sleep method
Exception(cont1) public class PDFBook extends Book { public void openFile( ) { try { FileInputStream fis=new FileInputStream(bookName); DataInputStream dis=new DataInputStream(fis); String st=“”; while ((st=dis.readLine())!=null) { content=content+st; } fis.close(); dis.close(); } catch (Exception e) { e.printStackTrace( ); } } }
Exception(cont2) public class PDFBook extends Book { public void openFile( ) throws Exception { FileInputStream fis=new FileInputStream(bookName); DataInputStream dis=new DataInputStream(fis); String st=“”; while ((st=dis.readLine())!=null) { content=content+st; } fis.close(); dis.close(); } }
All Object的概念 • Data Type 都使用物件建立 • Integer a,b,c; • int kk; • Double d,e,f; • double ff; • String x,y,z; • a=new Integer(3); • b=new Integer(5); • kk=a.intValue( )+b.intValue( ); • c=new Integer(kk); d=new Double(5.6); e=new Double(7.3); ff=c.doubleValue( )+d.doubleValue( ); f=new Double(ff); x=Integer.toString(a); Y=Double.toString(d); z=x+y+Double.toString(f); ff=Double.parseDouble(y);
常用的Java Package • java.lang.*; • java.lang.Runtime; • java.io.*; • java.util.*; • java.util.Date; • java.sql.*; • javax.sql.*; • javax.servlet.*; • java.awt.*;
java.io.* • FileInputStream • DataInputStream • FileOutputStream • DataOutputStream • FileReader • FileWriter • BufferedInputStream • BufferedReader • BufferedOutputStream • BufferedWriter • 這些指令都會丟出Exception,要用 try… catch…
java.util.* • ArrayList • Vector • HashMap • Hashtable • Iterator • Enumeration • Collections • Date
java.util.Vector • 可以想像成就是LinkList • 常用的method • addElement(Object ) • add(Object ) • Object get(int ) • contains(Object ) • size( ) • removeAllElements( ) • removeElement(Object ) • removeElement(int ) • setElementAt(Object, int ) • insertElementAt(Object, int)
java.util.ArrayList • 概念與LinkList相同 • 與Vector不同點在於,ArrayList沒有實作synchronize • 優點︰操作資料速度較快 • 缺點︰要自己注意資料同步的問題 • 沒有多工同步的問題時,使用ArrayList • addAll(Collection )
java.util.HashMap • 可以想像成是記憶體資料庫 • 常用的指令 • put(key, value) • Object get(key) public class Database { private HashMap db=new HashMap( ); public void insert(Object key, Object value) { db.put(key,value); } public Objec getValue(Object key) { return db.get(key); } }
java.util.Hashtable • 與HashMap概念相同 • 最大的不同點 • Hashtable的key值不可為null • Hashtable支援同步 public class Database { private Hashtable db=new Hashtable( ); public void insert(Object key, Object value) { db.put(key,value); } public Objec getValue(Object key) { return db.get(key); } }
java.lang.Runtime • 當需要呼叫外部程式的時候,可使用java.lang.Runtime來執行外部指令的目的 public class Blast { public void runBlast( ) { Runtime rt=null; Process proc=null; String blastCommand= blastpath + "blastall" + " -p blastp“+" -d " + blastpath + "db" + STR_DIR + "DIP_HUMAN“+" -i " + aafile + " -o " + human_blastfile + " -e 0.001 -T T"; rt=Runtime.getRuntime(); proc=rt.exec(blastCommand); } }
Web Site Development • Homepage • JSP • Java Servlet • execute outer program • getRuntime • thread
Apache Project • Jakarta-tomcat • Java Server Page • Httpd web server
Web Server • Listen 80 Port (Default) • 可以調整 • Jakarta-tomcat內定web content目錄 • webapps • Httpd內定web content目錄 • Htdocs • 程式執行目錄 • cgi-bin