Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 362|回复: 0

Java 异常规范

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 756 天

    [LV.10]以坛为家III

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    707560
    发表于 2021-8-28 17:48:54 | 显示全部楼层 |阅读模式

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

    1 try {
    2     int i = 0;
    3     while (true) {
    4         range[i++].doSomething();
    5     }
    6 } catch (ArrayIndexOutOfBoundsException e) {
    7     // ...
    8 }

    说明:

    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. 不要捕获了异常却什么也不做

    1 try {
    2     // ...
    3 } catch (Exception e) {
    4     // 不要这么做
    5 }

    说明:

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

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

     


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

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

    1 try {
    2     // ...
    3 } catch (LowerLevelException e) {
    4     throw new HigherLevelException(...);
    5 }

     

     

    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 异常,一般情况下不自定义检查 异常

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-7-1 01:56 , Processed in 0.062767 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表