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取得連線
}
讚