一、异常简介

异常结构图

Throwable是类,Exception和Error都继承了该类,error是因为系统内部错误或者资源耗尽错误,这种情况很少出现,而且error也不允许被抛出在Exception异常中又分为RuntimeException(运行时期异常)和IOException(其他异常),划分两个异常的规则是:由于程序错误导致的异常属于RuntimeException(运行时期异常),比如错误的类型转换,数组越界,访问null指针这类,而像I/O错误这类问题导致的异常属于其他异常;

在Java中,将error类和RuntimeException类的异常称为unchecked(非受查异常)所有的其他异常称为checked(受查异常);受查异常是必须要处理的异常,如果不处理,编译器就不让通过

非受查异常编译时期不会出问题,可以不去处理,虚拟机会处理这些问题,一般是在运行的时候出问题,这些异常一般都是因为数组越界,访问null指针这些问题

在抛出异常时可以抛出Throwable,并且在调用的时候必须进行catch处理。但是这样的设计方法做不好,因为不知道抛出的类型到底是哪种具体问题,无法针对性的处理

二、异常处理的两种方式

2.1 throw

一个方法不仅需要告诉编译器将要返回一个什么值,还要告诉编译器可能发生什么错误,方法应在其首部声明所以可能抛出的异常,这样可以从首部反映出这个方法可能抛出那些checked异常;

throws和throw的区别

  • throws

    用在方法声明后面,跟的是异常类名

    可以跟多个异常类名,用逗号隔开

    表示抛出异常,由该方法的调用者来处理

    throws表示出现异常的一种可能性,并不一定会发生这些异常
  • throw

    用在方法体内,跟的是异常对象名

    只能抛出一个异常对象名

    表示抛出异常,由方法体内的语句处理

    throw则是抛出了异常,执行throw则一定抛出了某种异常
  • throws异常注意事项:

    子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。

    如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

    如果父类没有抛出任何异常,那么子类也不可以抛出任何异常,如果子类方法内有异常发生,那么子类只能try,不能throws

在异常处理中,应该捕获那些知道怎么处理的异常,而将那些不知道怎样处理的异常抛出;

2.2 try...catch

  • try ....catch 的处理方案

    每有一个异常就写一个try...catch..写一个try , 多个catch

   try{
...
}
catch(异常类名 变量名) {
...
}
catch(异常类名 变量名) {
...
}

​

  • try...方式异常处理的方式:

    在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个异常对象和catch里面的异常进行匹配。如果该异常对象是某个异常类型,就会执行该catch里面的处理信息。在jdk7.0之后出现了一个新的异常处理方案

             try{
    ...
    }
    catch(异常名1 | 异常名2 | ... 变量 ) {
    ...
    }

    这种处理方法的优点是使得代码简洁了,但是不足也很明显,这种方法对于不同的异常,处理方法是一致的,但是如果如果在开发中碰到的是同类型的异常,且有相同的处理方法,那么就可以使用这种异常处理方法,并且,这种特性只有在异常之间不存在子类关系才会使用,即异常1和异常2不能是父类和子类的关系。

  • finally子句 :

    finally子句的处理机制:在执行了try-catch语句后,执行finally子语句,而且无论try部分有没有被执行,即使try-catch语句中执行了return语句,finally语句内的都将被执行,但是有一种情况是例外,如果在try-catch语句中执行了系统退出代码,即system.exit(0),那么finally将不会被执行,而且包括后面所有的语句。

三、自定义异常类

​ 在程序中,有时候会碰到一些用标准类异常也无法描述和处理的问题,这个时候就可以自定义一个异常类,自定义异常类继承Exception,或者继承Exception的子类,自定义的异常类要给出具体的异常处理的操作,一般自定义的异常类有两个构造方法,一个是无参构造,一个是带有描述详细的异常信息的构造,下面是一个自定义的异常类,当出现了某些异常的时候就可以抛出自定义的异常类

Java的异常处理方式的更多相关文章

  1. Java IO异常处理方式

    public class IOException{ // 获取系统默认的行分隔符 private static final String LINE_SEPARATOR = System.getProp ...

  2. JAVA异常及其异常处理方式

    异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...

  3. Java的异常处理

    Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.JB的在线帮助中对这几个关键字是这样解释的:       Throws: Lists the ...

  4. Java之异常处理机制

    来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...

  5. java的异常处理机制(try…catch…finally)

    1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...

  6. Java中异常处理和设计

    在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...

  7. java的异常处理简介

    异常概述 任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为0,数组下标越界,要读写的文件不存在等等. 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生. 对于这些错误,一 ...

  8. 深入理解java的异常处理机制

     JAVA异常的概念    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...

  9. Java 六种异常处理的陋习(转)

    Java 六种异常处理的陋习 原文链接:  http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得 ...

随机推荐

  1. 易优CMS:channelartlist 获取当前频道的下级栏目的内容列表

    channelartlist 获取当前频道的下级栏目的内容列表   [基础用法] 名称:channelartlist 功能:获取当前频道的下级栏目的内容列表标签 语法: {eyou:channelar ...

  2. condense 参数

    " 删除左右空格,中间空格压缩至一格 result = condense( ' abc def ').result = condense( val = ' abc def '). " ...

  3. jsp + js + 前端弹出框

    在项目中,前端页面我们时常需要各种各样的弹出框: 1.alert对话框:显示含有给定消息的"JavaScript Alert"对话框 代码: var a = "Hello ...

  4. avd manger创建的虚拟机启动不起来,或者启动起来后黑屏

    最近鼓捣安卓虚拟机,整的都差点重装系统,刚开始下载了genymotion_vbox,装完以后要在vbox中导入一个虚拟机,结果我导入完,虚拟机怎么也启动不了,然后各种找办法无果,最后重启电脑发现电脑也 ...

  5. Hibernate session.save()实体类,主键增长问题

    实体类如下: package com.wondersgroup.test.entity;   import java.io.Serializable;   import javax.persisten ...

  6. [译]Vulkan教程(16)图形管道基础之总结

    [译]Vulkan教程(16)图形管道基础之总结 Conclusion 总结 We can now combine all of the structures and objects from the ...

  7. C语言程序设计100例之(16):巧解算式

    例16  巧解算式 问题描述 在1.2.3.4.5.6.7.8.9.10个数中间加上加号或减号,使得到的表达式的值为自然数N,如果中间没有符号,则认为前后为一个数,如1 2 3认为是一百二十三(123 ...

  8. Vue 路由导航解析流程

    Vue Router完整的导航解析流程

  9. jQuery-文件上传问题解决

    后端要求文件上传需传参数为二进制流,用form-data方式传递,如下图所示: 为了满足该输入参数要求,上传代码如下: <input type="file" id=" ...

  10. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...