最近开始了找工作的面试,在面试过程中,面试官问了关于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. 【EasyNetQ】- 简介

    EasyNetQ是一个简单易用的,稳定的的RabbitMQ .NET API . 如果您只想尽快启动并运行,请转到“ 快速开始”指南. EasyNetQ的目标是提供一个库,使得在.NET中使用Rabb ...

  2. linux下搜索find命令拾遗

    强制删除项目下面的所有.svn文件目录,find . -name ‘.svn’ -exec rm -rf {} \; empty显示所有的空白文件,并显示详细:find . -empty size显示 ...

  3. capacilitys 持续集成

    目前看好像是说以docker为例来看看这个权限到底是怎么来的? 可以通过在二进制上setcap得到,也可以通过函数自己用setcap得到,两种方法,docker肯定是第二种方法啊,docker中间肯定 ...

  4. JAVA实现定时器功能

    在接口开发时,有一种开发模式叫定时器模式,可以理解为每经过一段预设的时间就会执行一次事件,而在我们的工作中,这个事件所实现的功能一般是将两个系统的数据信息进行同步,这样就实现了两个系统通过接口进行对接 ...

  5. JVM内存区域配置

    堆内存:新域+旧域 设置堆内存初始化大小 java -Xms128m 设置堆内存初始化大小128MB 设置堆内存最大大小 java -Xmx256m 设置堆内存最大256MB 通常将堆内存的初始化大小 ...

  6. ELK6.2.4集群

    ELK6.2.4集群安装使用 https://www.cnblogs.com/frankdeng/p/9139035.html 一 简介 Elasticsearch是一个高度可扩展的开源全文搜索和分析 ...

  7. BZOJ4311 向量(线段树分治+三分)

    由点积的几何意义(即投影)可以发现答案一定在凸壳上,并且投影的变化是一个单峰函数,可以三分.现在需要处理的只有删除操作,线段树分治即可. #include<iostream> #inclu ...

  8. 【BZOJ 1409】 Password 数论(扩展欧拉+矩阵快速幂+快速幂)

    读了一下题就会很愉快的发现,这个数列是关于p的幂次的斐波那契数列,很愉快,然后就很愉快的发现可以矩阵快速幂一波,然后再一看数据范围就......然后由于上帝与集合对我的正确启示,我就发现这个东西可以用 ...

  9. JS Cookie相关操作

    function setCookie(cookieName, cookieValue, expires) { // 设置Cookie function getCookieName(cookieName ...

  10. BAT定期删除N天前的文件

    1.直接看脚本在win2008测试可用 ::clean logs @echo off title clean up logs ::delete logs FORFILES /P /C "cm ...