JAVA 异常处理

一.异常的概述

java异常是处理程序中错误的一种机制, 错误通常指的是程序在运行的过程中发生的一些异常事件, 比如0作为除数, 数组下标越界, 流读取的文件不存在。设计程序的时候应该在异常发生的时候能友好的处理一下这些异常, java中出现的异常事件都可以生成一个异常类的对象, 这个对象将异常发生的信息封装起来交给java虚拟机引擎去处理, 这个过程称为抛出(throw)异常,当java虚拟机接收到异常对象, 会寻找能处理这一异常的代码, 这个过程称为捕获(catch)异常。

JAVA中把每一种异常都封装成了一个类。

自定义异常类

public class MyException extends Exception{
    public MyException() {
        super();
    }
}

实例化异常

MyException e = new MyException("关于异常的描述");

System.out.println(e.getMessage);    //    打印"关于异常的描述"

二.异常的分类

Trowable类是所有异常的父类,该类的两个直接子类是Error(错误)类和Exception(异常)类。

1.Exception类:指可以捕获的异常。可分为两种:

RuntimeException:可能出现的异常,经常出现,可以处理,也可以不处理,即可不用catch;

非RuntimeException:一定出现的异常,必须catch;

2.Error类:系统错误,虚拟机错误。

三.异常的捕获与处理

1.try...catch 语句

try {
    //需要正常执行的语句
}catch(Exception e){
    //对异常进行处理的语句
    e.printStackTrace();//打印输出这个错误的一串信息
}

2.try...catch...finally语句

try {
    //需要正常执行的语句
}catch(Exception e){
    //对异常进行处理的语句
}finally{
    //一定会被处理的语句
}

在try中使用return也会执行finally语句,finally语句通常用于执行垃圾回收、释放资源等操作。

注意:子类异常的捕获语句不能写在父类捕获语句的下面。

四.声明异常

对于程序发生的异常,除了可以使用try...catch语句外,还可以使用throws声明或throw语句抛出异常。

1.throws 将某个方法的异常抛出,谁调用这个方法,谁去处理这个异常,当用在main方法时必须处理,否则就会把异常打印出来。

2.throw 通常情况下,程序发生错误时系统会自动抛出异常,而有时希望程序自行抛出异常,可以使用throw语句来实现。

例如打印3除以0的异常:

public class Test{
    public static void main(String[] args) throws Exception {
        int a = 3;
        int b = 0;
        chufa(a,b);            
    }
    public static void chufa(int a,int b) throws Exception{
        if(b == 0) {
            throw new Exception("关于错误的描述");
        }else {
            System.out.println(a / b);
        }      
    }        
}
打印结果:
Exception in thread "main" java.lang.Exception: 关于错误的描述
    at zuoye.Test.chufa(Test.java:17)  //17代表问题代码所在的行;
    at zuoye.Test.main(Test.java:12)

 五.方法重写中的异常

子类重写父类方法时可不抛出父类方法异常,如果抛出异常,需要抛出同类型异常或子类异常。

原文地址:https://www.cnblogs.com/wyc1991/p/9022380.html