a.語法:(參考JAVA課本 P.327)
try{ }
catch(...) { } <==可以多個catch,但子類別要在上面,父類別在下,編譯才不會錯
...
...
finally { } <==一定會被執行
老師範例程式碼一:
test.java
public class Test {
public static void main ( String[] args ){
try {
throw new Exception("丟丟銅仔!");
// System.out.println(10/0);
} catch ( ArithmeticException e ){
System.out.println("數學有問題: " +e);
} catch ( Exception e ){
System.out.println("抓到例外: " +e);
} finally {
System.out.println("finally區塊,一定會被執行!");
}
}
}
run.bat
del *.class
javac *.java
java -cp . Test
pause
老師範例程式碼二:
test.java
import java.io.*;
public class Test {
void OpenFile() throws IOException {
// void OpenFile() throws EOFException {
// throw new IOException("檔案開啟!");
throw new EOFException("檔案已經尾端");
}
public static void main(String [] args) {
Test t = new Test();
try {
t.OpenFile();
} catch (EOFException e) {
System.out.println("抓到EOFException例外: " + e);
} catch (IOException e) {
System.out.println("抓到IOException例外: " + e);
}
}
}
run.bat
del *.class
javac Test.java
java -cp Test
pause
老師範例程式碼三:
EscapedEx.java
public class EscapedEx {
// public static void main ( String[] args ){
public static void main ( String[] args ) throws InterruptedException{
System.out.print("安裝進度: ");
for( int i=0; i<=100; i+=5){
if( i < 10 ){
System.out.print( i + "%\b\b" );
} else {
System.out.print( i + "%\b\b\b" );
}
// try{
Thread.currentThread().sleep(1000);
// } catch ( Exception e ){}
} //for
} //main
} //class
run.bat
del *.class
javac EscapedEx.java
java -cp EscapedEx
pause
b.例外類別的層級關係 (父子類別)
老師範例程式碼四:
MyException.java
public class MyException extends Exception{
private int port;
public MyException ( String message, int port ){
super( message );
this.port = port;
}
public int getPort() {
return port;
}
}
test.java
public class Test {
public static void main ( String[] args ){
try {
//假設 MySQL server 發現無法連結!
throw new MyException("MySQL Server 發現無法連結: ", 3306);
} catch ( MyException e ){
System.out.println(e);
System.out.println( "port: " + e.getPort() );
}
}
}
run.bat
del *.class
javac *.java
java -cp . Test
pause
老師範例程式碼五: ( assert:斷言)
test.java
public class Test {
public static void main(String [] args) {
boolean b1 = true;
assert b1==true;
b1 = false;
try {
assert b1;
// } catch (AssertionError e) {
// } catch (Exception e) {
} catch (Error e) {
System.out.println("try catch 捉到錯誤: " + e);
}
}
}
run.bat
del *.class
javac *.java
java -ea -cp . Test
paus
老師範例程式碼六: ( assert:斷言的延伸,後面可加冒號:再帶上字串。)
test.java
public class Test {
public static void main(String [] args) {
int age =17;
assert age>=18: "我以為妳18歲了..." +age;
//可在後面加上冒號:若不符合 assert,則會秀後面的字串。
}
}
run.bat
del *.class
javac *.java
java -ea -cp . Test
pause
2.JSP 的 try...catch
請參考JSP課本的第12章 P.12-5 ~ P.12-6
程式碼:trycatch.jsp
<%@ page contentType="text/html; charset=UTF-8"
import="java.io.*"%>
<HTML>
<HEAD>
<TITLE>try-catch區塊的使用</TITLE>
</HEAD>
<BODY>
<CENTER>
<FONT SIZE = 5 COLOR = blue>try-catch區塊的使用</FONT>
</CENTER>
<HR><P></P>
<%
int a = 10, b = 0, c;
try{
c = a / b; //此敘述將產生除以零的例外
}
catch(Exception e){
out.println(e.toString());
}
finally{
out.println("<BR>這裡一定會被執行");
}
%>
</BODY>
</HTML>
3.Servlet & JSP
a.MVC
Model....View....Controller
b.Servlet:一般都作為 Model。在 server 端的模型,可重複使用。
c.JSP:一般都作為 View。顯示給 client 端看的。
d.JavaBean:一般都作為 Controller。在 server 端作控制。
4. Servlet 要設定環境變數
a. 因為Servlet 需要
import javax.servlet.*;
import javax.servlet.http.*;
,所以要再加一個環境變數在 CLASSPATH 裡面。
5. Java2 Servlet
請參考 Java2 P.496 ~
a. 修改 web.xml 檔案中的 <servelt-mapping> 中 url 的路徑,如下圖。
b. 修改 Sample1.java ~ Sample8.java 的超連結路徑,如下圖。
No comments:
Post a Comment