一,异常的捕获
语法如下:
try{//程序代码块}catch(Exceptiontype1 e){}catch(Exceptiontype2 e){}...finally{}
catch关键字后面括号中的Exception类型的参数e.Exception就是try代码块传递给catch代码块的变量类型,e就是变量名。如catch代码块中的语句e.getMessage();
1.getMessage()函数:获得异常的性质。
2.toString()函数:给出异常的类型和性质。
3.printStackTrace()函数:指出异常的类型,性质,栈层次及出现在程序中的位置。
在完整的异常处理语句一定要包含finally语句,不管程序有无异常发生,并且不管try-catch之间的语句是否顺利执行完毕,都会执行finally语句。除了以下4种特殊情况:
1.在finally语句块中发生了异常;2.在前面的代码中用了System.exit()退出程序;3.程序所在的线程死亡;4.关闭了CPU
例子1:捕获单个异常:捕获加载空异常时发生的异常
package com.lixiyu;public class CatchException {public static void main(String[] args){ try{ System.out.println("进入try语句块"); Class clazz=Class.forName(""); //得到一个空的Class对象 System.out.println("离开try语句块"); }catch(ClassNotFoundException e){ System.out.println("进入catch语句块"); e.printStackTrace(); System.out.println("离开catch语句块"); }finally{ System.out.println("进入finally语句块"); }}
例子2:捕获多个异常:对加载数据库驱动和创建数据库连接时所发生的异常分别进行捕获
package com.lixiyu;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class CatchExceptionOne { private static String URL= "jdbc:mysql://localhost:3306/db_database"; private static String DRIVER="com.mysql.jdbc.Driver"; private static String USERNAME="mr"; private static String PASSWORD="mingri"; private static Connection conn; public static Connection getConnection(){ try{ Class.forName(DRIVER);//加载驱动程序 conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);//建立连接 return conn; }catch(ClassNotFoundException e){//捕获类为发现异常 e.printStackTrace(); }catch (SQLException e) {// 捕获SQL异常 e.printStackTrace(); } return null; }public static void main(String[] args){ CatchExceptionOne.getConnection();}}
二,异常的抛出
1.使用throws声明抛出异常
package com.lixiyu;public class Shoot {static void pop() throws NegativeArraySizeException{//定义方法并抛出NegativeArraySizeException异常 int[]arr=new int[-3];}public static void main(String[] args){ try{ pop(); }catch(NegativeArraySizeException e){ System.out.println("pop()方法抛出的异常"); }}}
2.使用throw语句抛出异常
package com.lixiyu;public class UseThrow { final static double PI=3.14; public void computerArea(double r)throws Exception{ if(r<=0.0){ throw new Exception("程序异常:\n半径"+r+"不大于0.");//使用throw语句抛出异常 }else{ double circleArea=PI*r*r; System.out.println("半径是"+r+"的圆面积是:"+circleArea); } } public static void main(String[] args){ UseThrow ut=new UseThrow(); try{ ut.computerArea(-200); }catch(Exception e){ System.out.println(e.getMessage()); } }}