欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 异常处理机制

程序员文章站 2024-03-23 21:14:52
...

java 异常处理机制

Error 和Excetion 都是继承于Throwable

Error

是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在 Java中,错误通过Error的子类描述。

Exception

CheckedException 普通异常 (可检查)

是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

RuntimeException 运行时异常 (不可检查异常)

都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

最常见的RuntimeException

NullPointerException 空指针异常

ClassNotFoundException 指定的类未找到

NumberFormatException 字符串转换数字异常

IndexOutOfBoundsException 数组角标越界

IllegalArgumentException 方法传递参数错误

ClassCastException 数据类型转换异常

NoClassDefFoundException 未找到类定义错误

SQLException SQL 数据库操作错误

InstantiationException 实例化异常

NoSuchMethodException 方法不存在异常

throw 和 throws的区别

throw

1.用在方法体内,表示抛出异常.

...
throw new Exception("测试出错了!");
...

2.throw是具体向外抛出异常的动作,所以他抛出的是一个异常实例,并且肯定抛出了某种异常

throws

1.throws用在方法声明后面,表示如果抛出异常,由该方法的调用者进行异常的处理.
2.throws主要是声明这个方法会抛出某种类型 的异常,让它使用者知道需捕获主要是声明这个方法会抛出某种类型 的异常.
3.throws 表示出现异常的一种可能性,并不一定会发生这种异常.

catch finally执行原则

例子

public class ExceptionTest {
    public static void main(String[] args) {
        System.out.println(getNum());
    }

    public static int getNum() {
        try {
            int a = 1 / 0;
            return 1;
        } catch (Exception e) {
            System.out.println("catch is called "+e.toString());
            return 2;
        } finally {
            System.out.println("finally is called");
            return 3;
        }
    }
}

执行结果

catch is called java.lang.ArithmeticException: / by zero
finally is called
3

原则: catch 遇到 return 或者 异常使得该函数终止的话,有finally就必须执行 finally 代码再返回值;但是finally里面有return 语句,这个时候方法就结束了,因此返回结果是3;如果finally只是资源释放的话 ,最终结果就是2。