热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java中什么时候用异常_Java中的异常处理:何时抛出异常,何时捕获异常?

今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回

今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况)。而hadoop中很多方法的声明是有异常抛出的,而我的系统中的很多方法的声明都没有抛出异常。只是判断了异常情况,并输出了错误提示,但是并没有抛出异常。

org.apache.hadoop.hdfs.protocol包下的Block类的readFields()方法:

public void readFields(DataInput in) throwsIOException {this.blockId &#61;in.readLong();this.numBytes &#61;in.readLong();this.generationStamp &#61;in.readLong();if (numBytes <0) {throw new IOException("Unexpected block size: " &#43; numBytes);//抛出异常&#xff0c;要是的话就不会抛出&#xff0c;而只是System.out.println错误提示&#xff0c;

}

1.如果方法声明名里面有throws异常&#xff0c;那么方法体里面可以不抛出异常。因为可以在方法声明中包含异常说明&#xff0c;但实际上却不抛出&#xff01;这样做的好处是&#xff0c;为异常先占个位置&#xff0c;以后就可以抛出这种异常而不用修改修改已有的代码。在定义抽象基类和接口时这种能力很重要&#xff0c;这样派生类或接口实现类就能够抛出这些预先声明的异常。

2.为什么有的方法声明里面没有throws&#xff0c;但方法体里面却抛出了异常&#xff1f;从RuntimeException继承的异常&#xff0c;可以在没有异常说明throws的情况下被抛出&#xff01;对于Runtime异常(也称为非检查的异常unchecked exception)&#xff0c;编译器不需要异常说明。只能在代码中忽略RuntimeException(及其子类)类型的异常&#xff0c;其他类型的异常的处理都是由编译器强制实施的。究其原因&#xff0c;RuntimeException代表的是编程错误。

3.运行时异常会被Java虚拟机自动抛出&#xff01;

1. 异常处理基础

1.1 System.out.println是高代价的。调用System.out.println会降低系统吞吐量。

1.2 在生产环境中别用异常的printStackTrace()方法。printStackTrace默认会把调用的堆栈打印到控制台上&#xff0c;在生产环境中访问控制台是不现实的。

2. 异常处理基本原则

2.1 如果你不能处理异常&#xff0c;不要捕获该异常。

2.2 如果要捕获&#xff0c;应在离异常源近的地方捕获它。

2.3 不要吞没你捕获的异常。

*(就是捕获的异常&#xff0c;但是什么也不做)

2.4 除非你要重新抛出异常&#xff0c;否则把它log起来。

2.5 当一个异常被重新包装&#xff0c;然后重新抛出的时候&#xff0c;不要打印statck trace。

2.6 用自定义的异常类&#xff0c;不要每次需要抛出异常的时候都抛出java.lang.Exception。方法的调用者可以通过throws知道有哪些异常需要处理--所以它是自我描述的。

2.7 如果你编写业务逻辑&#xff0c;对于终端用户无法修复的错误&#xff0c;系统应该抛出非检查的异常(unchecked exception)&#xff1b;如果你编写一个第三方的包给其他的开发人员用&#xff0c;对于不可修复的错误要用需要检查的异常(checked exception)。

2.8 绝对不要因为写throws语句会让你用起来不舒服&#xff0c;而不声明需要检查的异常。

2.9 应用级别的错误或不可修复的系统异常用非检查的异常(unchecked exception)抛出。

*(注意是错误&#xff0c;意味着不可修复&#xff0c;比如配置文件错误)

2.10 根据异常的粒度组织你的方法

其他参考文章&#xff1a;



推荐阅读
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • Apache Hadoop HDFS QJournalProtocol 中 getJournalCTime 方法的应用与代码实例分析 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
author-avatar
516837745_d2d52c
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有