一,异常的捕获
语法如下:
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()); } } }