1. 只针对异常情况使用异常,不要用异常来控制流程

 try {
int i = 0;
while (true) {
range[i++].doSomething();
}
} catch (ArrayIndexOutOfBoundsException e) {
// ...
}

说明:

1) 上述反例企图通过捕获异常来结束无限循环,以此达到遍历数组的目的。不要这么做!
2) 异常机制本身设计为处理异常情况,用异常来实现正常控制流,会阻止 JVM 本来可能要执行的某些特定优化,从而导致代码效率变低

2. 优先使用标准异常
常见的标准异常:

NullPointerException

空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等

NoClassDefFoundError

未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误

ClassNotFoundException

找不到类异常。当应用试图根据字符串形式的类名构类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常

IOException

输入输出异常

IllegalArgumentException

非法参数异常。比如参数个数不对应,参数类型不对应

IllegalStateException

违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常

SQLException

操作数据库异常

ClassCastException

类型强制转换异常

FileNotFoundException

文件未找到异常

ArrayIndexOutOfBoundsException

数组越界

EOFException

文件已结束异常

ArithmeticExecption

算术异常。比如除0操作

SecturityException

违背安全原则异常

说明:

1) 以上异常顺序排列与使系统崩溃的频次相关

2) 使用标准异常可以提高代码可读性

3. 不要捕获了异常却什么也不做

 try {
// ...
} catch (Exception e) {
// 不要这么做
}

说明:

1) 忽略异常就好比把火警报警器关了,当火灾发生时,你虽然看不到听不到了,但不意味着火灾不会造成灾难性后果。这是典型的掩耳盗铃

2) 捕获异常必须处理。如果不想处理,可以把他抛给调用者。最外层调用者必须处理

4. 抛出与抽象对应的异常 如果方法抛出的异常与它所执行的任务没有任何联系,这种情形会让人不知所措

异常转译:更高层实现应该捕获低层异常,同时抛出可以按高层抽象进行解释的异常

 try {
// ...
} catch (LowerLevelException e) {
throw new HigherLevelException(...);
}

5. 不要对大段代码进行无脑 try-catch。代码要区分稳定代码和可能出现异常的代码,要保 证捕获异常的部分是可能出问题的代码块最小集

6. finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch

说明: 如果 JDK7 及以上,可以使用 try-with-resources 方式

7. 不能在 finally 块中使用 return,finally 块中的 return 返回后方法结束执行,不 会再 执行 try 块中的 return 语句

8. 对于可恢复的情况,使用受检的异常;对于程序错误,使用运行时异常

Java 异常体系结构

说明:

1) Error 与 Exception Error 是程序无法处理的错误,比如 OutOfMemoryError、ThreadDeath 等。这些异常发 生时,Java 虚拟机(JVM)一般会选择线程终止 Exception 是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。
程序中应当尽可能去处理这些异常

2) 运行时异常和非运行时异常(受检异常) 运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、 IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可 以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异 常的发生。 非运行时异常是 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。 从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、SQLException 等以及用户自定义的 Exception 异常,一般情况下不自定义检查 异常

Java 异常规范的更多相关文章

  1. 根据异常自定义处理逻辑(【附】java异常处理规范)

    ▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...

  2. JAVA语言规范-线程和锁章节之同步、等待和通知

    JAVA语言规范:线程和锁 1 同步 java编程语言提供了线程间通信的多种机制.这些方法中最基本的是同步化,此方法是使用监视器实现的.JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视 ...

  3. JAVA编程规范(下)

    JAVA编程规范(下) 2016-03-27 6. 代码的格式化 6.1 对代码进行格式化时,要达到的目的 1.     通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解: 2.     ...

  4. 谷歌Java编程规范

    Google Java编程风格指南 January 20, 2014 作者:Hawstein 出处:http://hawstein.com/posts/google-java-style.html 声 ...

  5. java注释规范

    前言:      现在java的出产地sun公司并没有定义一个java注释规范,注释规范目前是每个公司自己有自己的一套规范,主要是为了团队之间的协作. 1.基本规则      1.注释应该使代码更加清 ...

  6. 资料推荐--Google Java编码规范

    之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...

  7. Java 异常讲解(转)

    六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗?   1 OutputStreamWrite ...

  8. 关于Java异常和错误的几个问题

    1.Java中什么是Exception? 异常是Java传达给你的系统和程序错误的方式. 在java中,异常功能是通过实现比如Throwable,Exception,RuntimeException之 ...

  9. [转] java编程规范

    原文链接: 资料推荐--Google Java编码规范 之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/ ...

随机推荐

  1. 父组件向子组件传值时,值已经传过来却没有触发子组件的watch监听,解决~

    需求: 父组件像封装的子组件传值  (父组件属性传值,子组件props接受)   子组件接受后经过处理回显页面; 预想:子组件接受值 , 经过watch监听,在监听中处理数据,回显数据; 问题:子组件 ...

  2. Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

    随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...

  3. fastjson自定义序列化竟然有这么多姿势?

    本文介绍下fastjson自定义序列化的各种操作. 一.什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSO ...

  4. 新浪短网址最新api接口

    1,雨林短网址 网站链接:http://yldwz.cn 雨林短网址采用新浪.腾讯官方API接口,强大的多功能API,简单易用,质量高官 网提供强技术支持,99.9% SLA服务稳定安全可靠的校验机制 ...

  5. Node_exporter一键安装部署脚本(Shell)

    #!/bin/bash # # rhel7. 安装node_exporter 用于监控数据采集 # Usage: # sh addNode.sh #Logs: /var/log/messages #H ...

  6. 最短路径算法(跟新SPFA,Ford)

    //以城市路为蓝本介绍算法 1381:城市路(Dijkstra) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 4517     通过数: 1306 [题目描述] ...

  7. js贪吃蛇(构造函数)

    给大家分享一下这几天我研究的一个贪吃蛇,挺简单的,但是实现起来其实有点绕的,我给大家附上完整代码,一起分析学习一下,主要用的是构造函数. 思想: .设计蛇:属性有宽.高.方向.状态(有多少节),方法: ...

  8. 【项目管理】Mybatis-Generator之最完美配置详解

    今天看到了一篇总结特别详细的关于Mybatis-Generator配置文件的文章,特转载进行记录学习使用. 先附上原文地址链接:张思全----全哥文章 <?xml version="1 ...

  9. Qt之高DPI显示器(二) - 自适配解决方案分析

    目录 一.回顾 二.框架说明 1.ICallDPIChanged 2.IDPIHelper 3.悬浮窗体管理器 三.方案分析 1.窗口大小 2.字体大小 3.间距 4.图标 四.相关文章 原文链接:Q ...

  10. zz:NETCONF协议详解

    随着SDN的大热,一个诞生了十年之久的协议焕发了第二春,它就是NETCONF协议.如果你在两年前去搜索NETCONF协议,基本得到的信息都是"这个协议是一个网管协议,主要目的是弥补SNMP协 ...