【Java】Java中的异常处理:何时抛出异常,何时捕获异常?

您所在的位置:网站首页 java中捕获异常不打印 【Java】Java中的异常处理:何时抛出异常,何时捕获异常?

【Java】Java中的异常处理:何时抛出异常,何时捕获异常?

2024-06-09 15:00| 来源: 网络整理| 查看: 265

参考文章:Java中的异常处理:何时抛出异常,何时捕获异常? 参考文章:Python错误处理-廖雪峰的官方网站

1 异常分类

在这里插入图片描述

Throwable对象可以分为两组:

一组是unchecked异常,异常处理机制往往不用于这组异常,包括: Error类通常是指Java的内部错误以及如资源耗尽的错误。当Error(及其衍生类)发生时,我们不能在编程层面上解决Error,所以应该直接退出程序。Exception类有特殊的一个衍生类RuntimeException。RuntimeException(及其衍生类)是Java程序自身造成的,也就是说,由于程序员在编程时犯错。RuntimeException完全可以通过修正Java程序避免。比如将一个类型的对象转换成没有继承关系的另一个类型,即ClassCastException。这类异常应该并且可以避免。 另一组是checked异常。这些类是由编程与环境互动造成程序在运行时出错。比如读取文件时,由于文件本身有错误,发生IOException。 2 异常处理机制

异常处理机制try…catch…finally…,代码如下:

try { //可能会有异常的代码 } catch (Exception e) { //处理异常或抛新的异常 } finally { //释放资源 } 2.1 编译器对checked、unchecked异常的处理 public static void CheckedException() throws FileNotFoundException { String NotExistedFilePath="D:/abc.txt"; File inFile = new File(NotExistedFilePath); FileReader fileReader = new FileReader(inFile); } public static void CheckedExceptionWithTryCatch() { String NotExistedFilePath="D:/abc.txt"; File inFile = new File(NotExistedFilePath); try { FileReader fileReader = new FileReader(inFile); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static int UncheckedException() { int[] s = new int[] { 1, 2, 3 }; int tmp; tmp = s[3]; return tmp; }

以上代码中,

方法‘CheckedException’声明中未添加‘throws FileNotFoundException’,编译器就会报错。方法‘CheckedExceptionWithTryCatch’,错误被捕获打印,但没有抛出。方法‘UncheckedException’在被运行时,会抛错‘ArrayIndexOutOfBoundsException’。 3 如何使用异常处理机制

Java的异常处理机制异常是一种强大的调试手段,它解决了下三个问题:

什么出了错?(异常类型)在哪出的错?(异常堆栈跟踪)为什么出错?(异常信息)

但是如果你没有使用好异常处理机制,即不清楚"何时抛出异常,何时捕获异常,何时处理异常",就不可能很好的解决上述三个问题。以下三大原则可以帮你很好的使用异常处理机制:

具体明确(异常类型)提早抛出(1抛更具体的异常类型,2 更好的定位)延迟捕获 (在能处理的时候捕获,而不是把它‘吃掉’)

以下是异常处理细则:

如果你不能处理异常,不要捕获该异常。如果要捕获,应在离异常源近的地方捕获它。不要吞没你捕获的异常。(就是捕获的异常,但是什么也不做)除非你要重新抛出异常,否则把它log起来。当一个异常被重新包装,然后重新抛出的时候,不要打印statck trace。用自定义的异常类,不要每次需要抛出异常的时候都抛出java.lang.Exception。方法的调用者可以通过throws知道有哪些异常需要处理–所以它是自我描述的。如果你编写业务逻辑,对于终端用户无法修复的错误,系统应该抛出非检查的异常(unchecked exception);如果你编写一个第三方的包给其他的开发人员用,对于不可修复的错误要用需要检查的异常(checked exception)。绝对不要因为写throws语句会让你用起来不舒服,而不声明需要检查的异常。应用级别的错误或不可修复的系统异常用非检查的异常(unchecked exception)抛出。*(注意是错误,意味着不可修复,比如配置文件错误)根据异常的粒度组织你的方法


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3