VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Java的异常处理

抛出异常

  • 关键字throw和throws
  • 注意:throw和throws不一样!!
  • 抛出的异常用于在main方法中解决

代码例子:

package Demo01;
public Application{
    public static void main(String[] args){
        try{
       new Application().test(10,0);
        }catch(ArithmeticException e){
            e.printStackTrace();
}
    }
    //假设这个方法处理不了这个异常,则我们可以在方法中抛出这个异常
    public void test(int a,int b) throws ArithmeticExceptio{
        if(b==0){
            throw new ArithmeticException();  //主动抛出一个异常,一般在方法中使用
        }
}
}

捕获异常

  • 关键字catch
  • 在我们程序出现异常的时候,程序一般会报出一个错误之后停止运行,但是这是我们不想出现的,因此我们会选择捕获这个程序的异常情况并使它以另一种形式输出。

代码例子:

package Demo02;
public Application{
    public static void main(String[] args){
        int a=666;
        int b=0;
        try{
            System.out.println(a/b);     //要执行的代码块
        }catch(ArithmeticException e){   //此处的e可以自己定义,而e旁边的则为想要捕获的类型
            System.out.println("程序出现异常,b不能为0");  /*如果上面的代码块出现异常,其程序自己抛出异常后,将会被此处代码块捕获异常,并在此处处理异常,然后往后执行*/
        }finally{
            System.out.println("我无论如何都会出来");   //finally关键字代表此代码块无论上面的代码是否有异常都会执行
        }
    }
}


/*
输出内容:
程序出现异常,b不能为0
我无论如何都会出来
*/
  • 此代码中的“finally”关键字可以省略,但是finally关键字可以在我们后续学习IO流和跟资源相关的东西之类的时候可以利用finally关键字来进行关闭。
  • 若需要捕获多个异常,只需要多添加几个catch即可,但是catch括号内的类型的级别不能从大到小,但是可以从小到大。

自定义异常

  • 上述两个例子都是JAVA里面内置的拥有的异常类,通常情况下这些异常类可以应对我们生活中的大部分事物。但是还有一种异常时用户可以自定义的,在自定义异常的时候只需要继承Exception类即可。

  • 用户在程序中使用自己定义的异常类大体可以分为以下几个步骤:

      1. 创建自定义异常类。
      2. 在方法中通过throw关键字抛出异常对象
      3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
      4. 在出现异常方法的调用者中捕获并处理异常。
    

代码例子:

package Demo03;

//自定义异常类

public class OwnException extends Exception{
    private int detail;
    public OwnException(int a){
        this.detail=a;
    }
    
    //toString用于对异常信息的打印
    @Override
    public String toString(){
        return "OwnException{"+"detail="+detail+"}";
    }
}

public class Test {
    
    //书写一个可能存在异常的代码块
    static void test(int a) throws OwnException{
        System.out.println("传递的参数为"+a);  //传递一个参数a
        if(a>10){
            throw new OwnException(a); //此处可以选择捕获或者抛出异常,我这里选择的是抛出
        }
        System.out.println("it is fine");  //如果没有出现异常则输出 it is fine 此句
    }
    public static void main(String[] args){
       try{
           test(1);  //在main方法中运行test,此处a=1,不会触发异常
       }catch(OwnException e){
           //此处还可以添加一些处理异常的代码
          System.out.println("OwnException>>"+e); //捕获异常并输出异常
}
}
}


/*
输出内容为:
it is fine
*/

对实际应用的总结:

  • 在处理运行时异常时,采用逻辑去合理规避的同时用try-catch来辅以处理
  • 在多重catch后面可以多添加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以用try-catch来处理不清楚的异常
  • 对于异常要进行处理,切忌只是一味地调用printStackTrace()去打印输出
  • 不同的业务有不同的处理异常的方法
  • 在try-catch最后最好添加finally来释放程序占用的资源
原文:https://www.cnblogs.com/starocean/p/14802726.html

相关教程