关于异常的捕获与异常的抛出的详细例子

一,异常的捕获

语法如下:

1
2
3
4
5
6
7
8
9
10
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:捕获单个异常:捕获加载空异常时发生的异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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:捕获多个异常:对加载数据库驱动和创建数据库连接时所发生的异常分别进行捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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声明抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
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语句抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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());
         }
     }
}


本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1307676,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值