try catch是專門在處理錯誤事件的,很多程式語言都有這樣子的例外處理方法,Java也不例外,對於新入門的可能會比較少遇到這類型的問題,不過是十分重要的一環。
當程式功能越來越多、越來越大時,try catch的使用可以增加除錯(bug)的速度,try catch也可以使用其特性來製做一些技巧性的功能或判斷,而當使用者在操作期間發現了例外或錯誤,如果丟出一堆程式碼大概會讓使用者不知所為,擷取這些例外或錯誤而丟出使用者容易理解的字串,也是try catch的功能之一。
try catch 用法
try裡的敍述句有可能會丟出例外資訊 ( Exception ) ,而丟出的例外資訊 ( Exception ) 型態就可以由catch來取得,做適當的處理。finally則是在try catch完成後會執行的動作,一般都是使用在關閉或則除物件等。
ps.catch取得例外需由小範圍而後大範圍,例如java.lang.NullPointException則需寫在Exception前面,因為NullPointException所能處理的範圍比Exception還小。

try catch finally 範例
1.在進行資料庫存取時,需要取得資料庫連線,當連線有問題產生時,告知使用者資料庫連線有問題,而非丟出一堆例外訊息 ( Exception ) ,其中Connection需要寫在try catch外,在finally時才可取用。
java.sql.Connection con = null;
try {
// 以下任何資料庫操作均可能產生SQLException e
con = db.Ooo.getConnection();//getConnection需自行實作
java.sql.Statement stat = con.createStatement();
java.sql.ResultSet rs = stat
.executeQuery("select 123 as t from dual");
while (rs.next()) {
System.out.println(rs.getInt("t"));
}
} catch (java.sql.SQLException e)// 處理資料庫操作錯誤
{
System.out.println("錯誤訊息:" + e.getMessage());
System.out.println("資料庫處理錯誤!!!");
} catch (Exception ex)// 除了SQLException以外之錯誤
{
System.out.println("錯誤訊息:" + ex.getMessage());
System.out.println("除了資料庫處理錯誤以外的錯誤產生!!!");
} finally {
try {
if (con != null)
con.close();
} catch (java.sql.SQLException e) {
}
}
2.小技巧,利用try catch特性來判斷是否為數字型態
String Num = "123";
String notNum = "456a";
try {
Integer.parseInt(Num);
System.out.println("是數字");
} catch (java.lang.NumberFormatException e) {
System.out.println("不是數字");
}
try {
Integer.parseInt(notNum);
System.out.println("是數字");
} catch (java.lang.NumberFormatException e) {
System.out.println("不是數字");
}
3.function除了規定的回傳型態外,還能利用例外事件來產生第二種型能的回傳值
public class ExceptionFunction {
public static boolean check(String id,String passwd)throws Exception
{
if(id==null || passwd ==null)
throw new Exception("帳號密碼不可為空白");
if(id.equals("123") && passwd.equals("456"))
return true;
else
return false;
}
public static void main(String args[])
{
System.out.println("例子1");
try
{
boolean islogin = check(null,"456");
if(islogin)
System.out.println("成功登入");
else
System.out.println("帳號或密碼錯誤");
}catch(Exception e)
{
System.out.println(e.getMessage());
}
System.out.println("例子2");
try
{
boolean islogin = check("1111","456");
if(islogin)
System.out.println("成功登入");
else
System.out.println("帳號或密碼錯誤");
}catch(Exception e)
{
System.out.println(e.getMessage());
}
System.out.println("例子3");
try
{
boolean islogin = check("123","456");
if(islogin)
System.out.println("成功登入");
else
System.out.println("帳號或密碼錯誤");
}catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}

4.判斷是否與資料庫連線或則是找不到連線的類別
try {
Class.forName("com.mysql.jdbc.Driver");
Connection MyConn = DriverManager
.getConnection("jdbc:mysql://localhost:3306/database?usr=root&password=1234");
System.out.println("資料庫連線成功");
} catch (ClassNotFoundException e) {
System.out.println("找不到連線類別檔案");
} catch (SQLException e) {
System.out.println("資料庫無法連線");
System.out.println("請檢查帳號及密碼是否有誤,");
System.out.println("或者mysql服務是否關閉");
}
相當受用,多謝版大的分享唷XD
good.
但我還是不懂 try catch到底用途在哪 = =
@kun,
你想像try catch間其實是被創造出來的一個空間
當發生Exception錯誤時,只會在這個空間出錯,而錯誤會被catch取得
當可以取得Exception的內容時,就可以針對它來做處理
ex.
try
{
資料庫1連線取得
}catch(錯誤 x)
{
改去資料庫2取得連線
}
讚