Java中的异常处理:何时抛出异常,何时捕获异常 我就是我 2022-05-21 09:50 207阅读 0赞 今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况)。而hadoop中很多方法的声明是有异常抛出的,而我的系统中的很多方法的声明都没有抛出异常。只是判断了异常情况,并输出了错误提示,但是并没有抛出异常。 org.apache.hadoop.hdfs.protocol包下的Block类的readFields()方法: public void readFields(DataInput in) throws IOException { this.blockId = in.readLong(); this.numBytes = in.readLong(); this.generationStamp = in.readLong(); if (numBytes < 0) { throw new IOException("Unexpected block size: " + numBytes);//抛出异常,要是的话就不会抛出,而只是System.out.println错误提示, } 1.如果方法声明名里面有throws异常,那么方法体里面可以不抛出异常。因为可以在方法声明中包含异常说明,但实际上却不抛出!这样做的好处是,为异常先占个位置,以后就可以抛出这种异常而不用修改修改已有的代码。在定义抽象基类和接口时这种能力很重要,这样派生类或接口实现类就能够抛出这些预先声明的异常。 2.为什么有的方法声明里面没有throws,但方法体里面却抛出了异常?从RuntimeException继承的异常,可以在没有异常说明throws的情况下被抛出!对于Runtime异常(也称为非检查的异常unchecked exception),编译器不需要异常说明。只能在代码中忽略RuntimeException(及其子类)类型的异常,其他类型的异常的处理都是由编译器强制实施的。究其原因,RuntimeException代表的是编程错误。 3.运行时异常会被Java虚拟机自动抛出! 《有效处理Java异常三原则》[http://www.importnew.com/1701.html][http_www.importnew.com_1701.html] 1. 异常处理基础 1.1 System.out.println是高代价的。调用System.out.println会降低系统吞吐量。 1.2 在生产环境中别用异常的printStackTrace()方法。printStackTrace默认会把调用的堆栈打印到控制台上,在生产环境中访问控制台是不现实的。 2. 异常处理基本原则 2.1 如果你不能处理异常,不要捕获该异常。 2.2 如果要捕获,应在离异常源近的地方捕获它。 2.3 不要吞没你捕获的异常。 \*(就是捕获的异常,但是什么也不做) 2.4 除非你要重新抛出异常,否则把它log起来。 2.5 当一个异常被重新包装,然后重新抛出的时候,不要打印statck trace。 2.6 用自定义的异常类,不要每次需要抛出异常的时候都抛出java.lang.Exception。方法的调用者可以通过throws知道有哪些异常需要处理--所以它是自我描述的。 2.7 如果你编写业务逻辑,对于终端用户无法修复的错误,系统应该抛出非检查的异常(unchecked exception);如果你编写一个第三方的包给其他的开发人员用,对于不可修复的错误要用需要检查的异常(checked exception)。 2.8 绝对不要因为写throws语句会让你用起来不舒服,而不声明需要检查的异常。 2.9 应用级别的错误或不可修复的系统异常用非检查的异常(unchecked exception)抛出。 \*(注意是错误,意味着不可修复,比如配置文件错误) 2.10 根据异常的粒度组织你的方法 [http_www.importnew.com_1701.html]: http://www.importnew.com/1701.html
相关 异常处理困惑:Java中异常的捕获、抛出及处理策略 在Java中,异常是程序运行过程中遇到的问题或意外情况,导致正常的执行流程被打断。Java提供了一套完整的异常处理机制。 1. **捕获异常**: - `try-cat 梦里梦外;/ 2024年09月18日 18:36/ 0 赞/ 5 阅读
相关 Java异常处理机制:如何捕获、处理和抛出异常? 在Java编程中,异常处理机制是通过try-catch-finally语句来实现的。以下是详细的步骤: 1. **声明可能出现异常的方法或代码块**: ```java Dear 丶/ 2024年09月16日 06:03/ 0 赞/ 10 阅读
相关 Java异常处理:捕获、声明与抛出异常 在Java编程中,异常处理是一种机制,用于在程序运行过程中遇到错误或意外情况时,能优雅地进行处理,而不是让程序直接崩溃。 1. **捕获异常**: 在方法的开始,使用` 妖狐艹你老母/ 2024年09月13日 14:36/ 0 赞/ 89 阅读
相关 Java中的异常处理:捕获和抛出 在Java中,异常处理是一种机制,用于处理程序运行时可能出现的错误。主要通过`try-catch-finally`结构来实现。 1. `try`块:这是代码可能会抛出异常的地 水深无声/ 2024年09月13日 10:18/ 0 赞/ 25 阅读
相关 Java中的异常处理:捕获、抛出和处理 在Java编程中,异常处理是一种机制,用于处理程序运行时可能出现的错误情况。主要包括以下三个步骤: 1. **捕获(Throwing)**: 当一个方法或者代码块无法按 桃扇骨/ 2024年09月13日 03:18/ 0 赞/ 22 阅读
相关 Java中的异常处理机制:捕获与抛出 在Java中,异常处理是一种机制,用于管理程序运行过程中可能出现的错误。这个过程主要由两个部分组成:捕获和抛出。 1. 捕获(Throwing) 当一个方法执行过程中遇 迈不过友情╰/ 2024年09月11日 11:45/ 0 赞/ 26 阅读
相关 【Java】异常处理 之 抛出异常 异常的传播 当某个方法抛出了异常时,如果当前方法没有捕获异常,异常就会被抛到上层调用方法,直到遇到某个`try ... catch`被捕获为止: // exce 我就是我/ 2024年03月23日 19:49/ 0 赞/ 21 阅读
相关 【C++】异常处理 ⑤ ( 异常类型 | 传统 C 语言中的异常处理 | C++ 异常处理 - 抛出 int 类型异常 | 捕获异常类型 / 异常变量 | C++ 异常处理 - 抛出指针类型异常 ) 文章目录 一、传统异常处理 1、C 语言中的异常处理 2、代码示例 - 传统异常处理 二、C++ 异常处理 - 抛出 int 类型异 超、凢脫俗/ 2024年02月17日 12:37/ 0 赞/ 9 阅读
相关 Java中的异常处理:何时抛出异常,何时捕获异常 今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况)。而hadoop中很多方 我就是我/ 2022年05月21日 09:50/ 0 赞/ 208 阅读
还没有评论,来说两句吧...