java异常处理机制

  1. 什么是异常
    在程序运行过程中,可能会发生各种非正常状况,如磁盘空间内存不足网络连接中断,被加载的类不存在等等。针对这种情况,java语言中就引入了异常,以异常类的形式对这些非正常状况进行封装,进而通过异常处理机制对这些非正常状况问题进行处理。

    java异常类层次图

                        图1 java异常类层次图
    

    我们直接就上例图分析java异常处理机制,从图一可以看出,所有的异常都是继承Throwable ,也就是说 Throwable 是所有异常的父类。然后往下走就会发现Throwable有两个直接子类,一个Error类(错误),一个Exception类(异常)。我们接下来就这两个类来分析java的异常处理机制


  1. java Error
    java错误类,表示java运行时产生的 系统内部错误资源耗尽 的错误,是比较严重的,靠修改程序本身是不能修复执行的。

  2. java Exception
    java异常类,表示程序本身可以处理的错误,在java开发中进行的异常处理,都是针对Exception类及其子类。在Exception子类中有个RuntimeException类,该类及其子类表示运行时异常,其他的表示编译时异常。


在java中java异常处理机制主要依靠 try catch finally throw throws 五个关键字。举个栗子:


 - try-catch语句

//一个除法方法
public class Example {

    public static void main(String[] args) {        
        System.out.println(Div(3,1));
    }
    public static int Div(int i , int j)
    {   
        int result = 0 ;
        result = i/j;
        return result;
    }
}

结果显示为3,看似没什么错,但当j = 0 时,就会报错;
Exception in thread “main” java.lang.ArithmeticException: / by zero
at test.Student.Div(Student.java:11)
at test.Student.main(Student.java:6)
这时用try - catch 语句块来捕获异常,就不会报错了。

public class Example {

    public static void main(String[] args) {        
        System.out.println(Div(3,0));
    }
    public static int Div(int i , int j)
    {   
        int result=0;
        try {
            result= i/j;
        } catch (Exception e) {

        }
        return result;
    }
}

点击运行,结果显示0,运行成功,无错误提示。在try代码块中发生除0异常,程序转而执行catch中的代码,catch代码块对异常处理完毕后,程序仍会往下执行,而不会异常终止。

-try-catch-finally语句
在try代码块中,发生异常的语句后面的代码不会被执行。有时需要执行些语句在发生异常的情况下。这时在try-catch代码块后加一个finally代码块。

public class Example {

    public static void main(String[] args) {        
        System.out.println(Div(3,0));
    }
    public static int Div(int i , int j)
    {   
        int result=0;
        try {
            result= i/j;
            System.out.println("try语句执行了");
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            System.out.println("finally语句执行了");
        }
        return result;
    }
}

上述代码中在try代码块中如有异常语句,则输出语句不会被打印,而finally中的输出语句一定会被打印,不管try语句是否有异常。finally代码块中有一种情况下是不会执行的,那就是在try-catch中执行了System.exits(0)语句。
try-catch-finally语句块执行

  • throw 抛出异常
    throw关键字用于在方法中声明抛出(自定义)异常的实例对象。程序在throw语句后停止执行,后面的语句不执行。
  • throws抛出异常
    如果方法体本身可能发生异常但没有处理异常的能力,则需在方法声明中将异常抛出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值