最近开始了找工作的面试,在面试过程中,面试官问了关于Java当中的异常处理机制,一直以来,无论写代码还是看书,自己对异常处理这一块就没有很好的重视过,对它的认知也仅仅停留在通过Try-catch去进行捕获的层面,被面试官这么一问,自己瞬间懵逼了起来,特地在此总结一下java的异常处理机制。

  java把异常当做对象来处理,并且定义了一个所有异常的父类,即java.lang.Throwable类,而继承了这个Throwable类的子类分为了两种,也就是我们常说的Error(错误)和Exception(异常)。

  Error:表示的是程序在运行期间出现了非常严重的错误,并且这种错误是不可恢复的,由于这属于JVM层次的严重错误,所以通常Error会导致程序的终结,常见的Error包括了OutofMemoryError、ThreadDeath等。Btw:Error也属于unchecked异常。

  Exception表示可恢复的异常,是编译器可以捕获到的,它大体可以分为两种类型:checked exception(检查异常)和runtime exception(运行时异常)。

  checked exception(检查异常):常见的检查异常包括了SQL异常、IO异常、这种异常都是发生在JAVA编译的阶段,编译器会强制程序去捕获此类异常,并且将可能会出现这样异常的代码放到Try块中去,对异常的处理放到Catch块中。

  runtime exception(运行时异常):对于运行时异常,编译器并没有强制对其进行捕获和处理,如果不对这种异常进行处理,则当出现这样的异常的时候,将会交由JVM去处理。常见的运行时异常包括:NullPointException,ClassCastException、ArrayIndexOutOfBoundsException、BufferOverFlowException等、出现运行时异常后,系统会一直把异常向上层抛出,知道遇到处理代码为止、若没有处理块,则就会到最上层(单线程为main函数、多线程为Thread.run()方法抛出)后,程序将会停止。

  那么在什么情况下,我们应该在方法的声明的过程当中,就声明要抛出的异常呢?比如:

public void test(String 123) throws IOException
{ }

  在什么时候需要方法中抛出throws子句声明异常,什么样的异常必须使用throws子句声明?

  一个方法必须声明所有可能抛出的受查异常(check excepiton)(在不使用try-catch去捕获的情况下),而非受查异常要么不可控制,要么就应该避免发生(runtimeException),如果方法没有声明所有受查异常,那么编译器可能会发出一个错误提示。当然,除了声明异常之外,还可以捕获异常,这样会使异常不被跑到方法之外,也不需要throws子句声明。

  那么这就涉及到了另一个问题,在什么样的情况下,应该对异常进行捕获处理,在什么样的情况下,应该对异常进行抛出向上传递呢?

  本人的理解是,当前方法有对该异常进行处理的能力和必要的时候,就通过try-catch代码块去将异常捕获和处理,当前方法对异常没有处理的能力或者处理的必要的时候,则将该异常直接交给能够胜任的处理上层在对异常进行捕获和处理,具体情况要具体讨论,并没有一个统一的处理标准。

  在这里还要提示一个点,就是在捕获异常的顺序当中,需要先捕获子类,再捕获父类,否则捕获子类的代码将永远不会被运行。

  到这里异常的部分就总结完毕了。

Java基础:异常机制的更多相关文章

  1. Java基础——异常机制

    [捕获异常] 硬件的错误.输入错误.物理限制等问题,都可能导致程序运行时的异常出现. 1.异常的分类层次 在java中,异常对象都是由Throwable类继承而来的,主要分为两大类: Error和Ex ...

  2. Java的异常机制

    Java的异常机制 (一)异常的概念 异常是指程序在编译或运行时出现的导致程序不能继续编译或运行的状况.. (二)Throwable类 Throwable类继承自Object类,是Java中所有错误或 ...

  3. Java基础-类加载机制与自定义类Java类加载器(ClassLoader)

    Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...

  4. Java基础-异常(Exception)处理

    Java基础-异常(Exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.异常的概述 什么是异常?Java代码在运行时期发生的问题就是异常.在Java中,把异 ...

  5. 关于java中异常机制

    什么是异常:异常就是程序在运行时出现的不正常情况.对于严重的情况Java通过Error类进行描述,一般不用编写代码处理:对于不严重的情况Java通过Exception描述,一般编写针对性代码对其进行处 ...

  6. 《Java基础——异常的捕获与抛出》

    Java基础--异常的捕获与抛出     '  前言: Error类(错误)和Exception类(异常)是Throwable类的子类. 异常分为CheckedException类(编译时异常)和Ru ...

  7. Java基础 - 异常详解

    异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...

  8. Java基础——异常体系

    在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...

  9. JAVA基础——异常详解

    JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...

  10. Java基础-异常、断言

    处理错误 如果Java程序运行期间出现了错误,并且由于出现错误导致某些操作没有完成,程序应该能够返回到一种安全状态,并能够让用户执行一些其他的命令:或者允许用户保存所有操作结果,并以妥善的方式终止程序 ...

随机推荐

  1. JAVA多线程及补充

    进程 运行中的应用程序叫进程,每个进程运行时,都有自已的地址空间(内存空间)如IE浏览器在任务管器中可以看到操作系统都是支持多进程的 线程 线程是轻量级的进程,是进程中一个负责程序执行的控制单元线程没 ...

  2. python数据绘图常用方法总结

    挖坑,以后还会更新吧 做数学建模画图使用了matplotlib和numpy,这里简单总结一下常用的用法 一.数据拟合 1.np.polyfit(x, y, n) 使用n次多项式去拟合x,y散点图,返回 ...

  3. 【BZOJ 1770 】 [Usaco2009 Nov]lights 燈 dfs+异或方程组

    这道题明显是异或方程组,然而解不一定唯一他要的是众多解中解为1的数的最小值,这个时候我们就需要dfs了我们dfs的时候就是枚举其有不确定解的数上选0或1从而推知其他解,由于我们dfs的时候先0后1,虽 ...

  4. [洛谷P2073] 送花

    送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地 ...

  5. Ecplise下设置jQuery和ExtJs自动提示

    Spket 1.6.23下载: http://yunpan.cn/cjJYmEcMFIuuN  访问密码 5642 ext jsb下载:http://yunpan.cn/cjJYR7ZTzibQn  ...

  6. Spring学习--通过注解配置 Bean (一)

    在 classpath 中扫描组件: 组件扫描(component scanning): Spring 能够从 classpath 下自动扫描 , 侦测和实例化具有特定注解的组件. 特定组件包括: @ ...

  7. JS表单验证优化

    var validate = (function(){ var messages = { isEmail : '输入正确格式邮箱', isPhoneNum : '输入正确手机号' }; var val ...

  8. peity(jQuery 插件可以将元素内容转换为一个小的 <svg> 饼图,圆环图,条形图和折线图)

    API地址:https://www.awesomes.cn/repo/benpickles/peity 实例效果

  9. 【UVALive4685-Succession】树形DP

    http://acm.hust.edu.cn/vjudge/problem/14338 题意:给定一棵树,每个点有一个值,让你选择k个点,并且这k个点是连在一起的(从任意一个点出发,可以遍历完所有选择 ...

  10. 河南省第十届省赛 Binary to Prime

    题目描述: To facilitate the analysis of  a DNA sequence,  a DNA sequence is represented by a binary  num ...