java异常总结

来源:互联网 发布:淘宝店铺首页视频代码 编辑:程序博客网 时间:2024/05/28 23:22

1.java异常分类

java异常分为两大类:checked异常与unchecked异常,其中unchecked异常又叫运行时异常

(1)unchecked异常

即RuntimeException(运行时异常),不需要try……catch……或throws机制去处理的异常

(2)checked异常

除了RuntimeException,其他继承自java.lang.Exception的异常统称为Checked Exception。对于checked异常的处理方式有以下两种

1)当前方法知道如何处理该异常,使用try……catch块来捕获异常

2)当前方法不知道如何处理这种异常,在定义该方法时抛出异常,抛出异常有throws与throw

java常见的异常类之间的继承关系


2.异常处理机制

2.1try……catch

(1)try块后可以有多个catch块,用来捕获不同的异常,注意,一定是先捕获小异常再捕获大异常

(2)一个catch块可以捕获多种类型的异常,多种异常间用“|”隔开

如:

try{

}catch(NumberFormatException | IndexOutofBoundsException)

2.2 使用throws声明抛出异常

使用throws抛出异常的思路是当前方法不知道如何处理这些类型的异常。throws声明抛出异常只能在当前方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间用逗号隔开。

用法如下:

public void methords() throws IOException,Exceptionclass1,……

2.2 throw

如果需要在程序中自行抛出异常,则应使用throw语句,hrow语句抛出的是一个异常实例

如:

throw new Exception("异常抛出");

2.3 throws与throw的区别

(1)throw 是语句抛出一个异常;throws 是方法抛出一个异常;
(2)throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单
独使用,然后再由处理异常的方法捕获。

2.4 自定义异常类

用户自定义异常类都继承Exception基类,如果要自定义unchecked异常类,则应该继承RuntimeException基类。定义异常类时需要提供两个构造器:一个是无参数的构造器,一个是有一个字符串参数的构造器,该字符串作为异常对象的描述信息,也就是异常对象的getMessage()方法的返回值。

举例:

public class AuctionException exends Exception(){

       public AuctionException(){}

       public AuctionException(String msg){super(msg)}


自定义异常类实例:

  1. /*自定义异常*/  
  2. class ChushulingException extends Exception  
  3. {  
  4.     public ChushulingException(String msg)  
  5.     {  
  6.         super(msg);  
  7.     }  
  8. }   
  9.   
  10. class ChushufuException extends Exception  
  11. {  
  12.     public ChushufuException(String msg)  
  13.     {  
  14.         super(msg);  
  15.     }  
  16. }  
  17.   
  18. /*自定义异常 End*/  
  19.   
  20. class Numbertest   
  21. {  
  22.     public int shang(int x,int y) throws ChushulingException,ChushufuException  
  23.     {  
  24.         if(y<0)  
  25.         {  
  26.             throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常  
  27.         }  
  28.         if(y==0)  
  29.         {  
  30.             throw new ChushulingException("您输入的是"+y+",除数不能为0!");  
  31.         }  
  32.       
  33.         int m=x/y;  
  34.         return m;  
  35.     }  
  36. }  
  37.   
  38.   
  39.   
  40.   
  41.   
  42. class Rt001  
  43. {  
  44.     public static void main(String[]args)  
  45.     {  
  46.         Numbertest n=new Numbertest();  
  47.   
  48.         //捕获异常  
  49.         try  
  50.         {  
  51.             System.out.println("商="+n.shang(1,-3));  
  52.         }  
  53.         catch(ChushulingException yc)  
  54.         {  
  55.             System.out.println(yc.getMessage());  
  56.             yc.printStackTrace();  
  57.         }  
  58.         catch(ChushufuException yx)  
  59.         {  
  60.             System.out.println(yx.getMessage());  
  61.             yx.printStackTrace();  
  62.         }  
  63.         catch(Exception y)  
  64.         {  
  65.             System.out.println(y.getMessage());  
  66.             y.printStackTrace();  
  67.         }  
  68.       
  69.     finally{ System.out.println("finally!");} ////finally不管发没发生异常都会被执行    
  70.   
  71.     }  


2.5异常转译

如图


当业务逻辑层访问持久层出现SQLException异常时,程序不应该把底层的异常传到用户界面,通常是程序先捕获异常,然后抛出一个新的业务异常,业务异常包含对用户的提示信息。

如下:


原创粉丝点击