最近开始了找工作的面试,在面试过程中,面试官问了关于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. 一个python游戏源码

    #finalPyPong.py import pygame,sys class MyBallClass(pygame.sprite.Sprite): def __init__(self,image_f ...

  2. Firefox浏览器浏览自己做的网站需要输入用户名和密码解决

    我用最新的Firefox 35.0浏览我制作的网站,就会弹出这个对话框.这是什么原因?

  3. SRM710 div1 ReverseMancala(trick)

    题目大意, 给定一个有n个点的环,n不超过10,每个点上有一个权重 起始时权重将会给出,然后有2种操作 第一种操作是,选择一个位置i,获得权重w = a[i],把a[i]变成0,然后接下来在环上顺着走 ...

  4. [CF1031E]Triple Flips

    题目大意:给你一个长度为$n$的$01$串,一次操作定义为:选取$3$个等距的元素,使其$0$变$1$,$1$变$0$,要求在$\Big\lfloor \dfrac n 3\Big\rfloor+12 ...

  5. Jlink下载u-boot

    由于各种原因我的fl2440无启动代码,无任何程序,这时要通过jlink来烧录相关boot程序. 准备工作: 1.Jlink使用jlink commander工具 2.初始化sdram的程序boot. ...

  6. git查看和操作commit命令

    git reflog 显示所有branch的commit,包括commit和reset,以及已删除的commit.而git log只显示当前branch的commit,不包括已删除的commit gi ...

  7. Codeforces Round #350 (Div. 2) A

    A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  8. ionic安装遇到的一些问题

    ionic = Cordova + Angular + ionic CSS // 安装(失败的话 Mac 尝试使用 sudo,Windows 尝试管理员身份运行 cmd)$ npm install - ...

  9. bzoj 3771 Triple FFT 生成函数+容斥

    Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 482[Submit][Status][Discuss] Desc ...

  10. AngularJs学习——模拟用户登录的简单操作

    效果截图: