Java的异常处理机制浅析

Java的异常处理机制浅析

部分学习了java中的异常处理,在这里就所学说说自己对异常处理机制的理解,同时还可加深记忆。

说到异常就不会不知道错误,但对于Java来说,错误运行时是无法改变的,一旦发生程序就会立即终止。索性Java也不深究,对于Java编程意义不大。但是异常和错误相反,它是可以被修改和处理的,而且为了程序的正常运行是必须处理的。说到异常和错误的联系,那就先说说他们的父类以及继承关系吧。异常和错误有很多不同的类型,就列举一些,说明一下异常的体系。

异常体系:

这里写图片描述
其中Throwable是父类,Throwable类有两个直接子类:Exception类、Error类。Error表示错误,可能是编译期错误或者系统错误,往往程序中并不处理。Exception表示异常,是所有异常类的父类,是程序员所关心的。

异常分为运行期异常和编译期异常两种运行期异常。程序运行时抛出的异常,所有RuntimeException的子类都是运行期异常。除去运行期的异常都是检测异常(Checked Exception),即编译异常。

说到异常处理机制就要指出几个关键字:

关键字:

try、catch、finally、throw、throws

try:放置可能引发异常的代码

​ try{ 可能会发生异常的代码 }

catch:后面对应捕获的异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。

​ catch(异常类型 引用名){ 异常处理代码 }

finally:主要用于回收在try块里打开的物理资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。

​ finally{ 必须执行的逻辑}

throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。当发生该异常的时候可以显示出来。当程序出现错误时,系统会自动抛出异常,另外,java也允许程序自行抛出异常,自行抛出异常使用throw语句完成!throw语句可以单独使用,throw语句抛出的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。throw语句的格式如下:throw new ExceptionInstance(、、、);

throws:用在方法签名中,用于声明该方法可能抛出的异常。可以写多个异常。 使用throws抛出异常的思路是:当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用使用throws声明抛出异常,该异常将交给JVM来处理。但是最好不要抛出main方法以外。 JVM对异常的处理方法:打印异常跟踪栈的信息,并终止程序运行,所以有很多程序遇到异常后自动结束。
调用了带throws声明的方法,必须显示捕获该异常(使用try…catch)。否则,要在main方法中再次声明抛出。

基本语法

try{

可能会发生异常的代码

}catch(异常类型 引用名){

​ 异常处理代码

}finally{ 必须执行代码

}

代码示例:

public class DifferentExceptions {
public void checkedException(int i) {
        try {
            System.err.println("1.");
            System.err.println("2.");
            throwExcep(i);
            System.err.println("4.");
        } catch (IOException gfw) {
            System.err.println("5.1");
            gfw.printStackTrace();
        } catch (SQLException e) {
            System.err.println("5.2");
            e.printStackTrace();
        } catch (Exception e) {
            System.err.println("5.3");
            e.printStackTrace();
        } finally {
            System.err.println("finally");
        }
        System.err.println("6.");

    }

    public void throwExcep(int i) throws Exception {
        System.err.println("3.");
        if (i > 20)
            throw new SQLException("sqlException");
        if (i > 5)
            throw new IOException("读取文件出错");
        if (i < 0)
            throw new RuntimeException("runtimeException");
    }

    public static void main(String[] args) {

        new DifferentExceptions().checkedException(6);

    }
}

自定义异常类

用户定义异常类,需要基础Exception基类,如果希望定义RuntimeException基类,就应该继承该基类。

自定义异常类基本语法

public class 异常类名 extends Exception{

public 异常类名(String msg){

super(msg);

}

}

自定义异常类中往往不写其他方法,只重载需要使用的构造方法,带字符串的构造器,这个字符串作为该异常对象的详细说明,(也就是异常对象的getMessage方法返回值),调用super将字符串参数传给异常对象的message属性,message属性就是异常对象的详细描述信息。

例子如下:

 public class TestException extends Exception{

    public TestException(String msg){
         super(msg);
     }

 }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值