Java基础——异常体系

  • 在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示:

  所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,ErrorException

  • Error错误:描述了Java运行时系统的内部错误和资源耗尽错误。一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理。因为如果出现这样的内部错误,除了通告用户,并尽力使程序安全地终止之外,再也无能为力了。
  • Exception异常:Java的异常分为两种,checked Exception(编译时异常)和 RuntimeException(运行时异常)。
  1. checked Exception(编译时异常): Java认为checked Exception都是可以在编译阶段被处理的异常,一般是IOException和SQLException。所以它强制程序处理所有的checked Exception,而RuntimeException无须处理,java程序必须显式处理checked Exception,如果程序没有处理,则在编译时会发生错误,无法通过编译。用try{...}catch{...}finally{...}进行处理或throw和throws抛出异常。
  2. RuntimeException(运行时异常):这些异常一般是由程序逻辑错误引起的,一般都是程序员的错,表示程序存在bug,所以,一般不需要进行异常处理,直接让程序停止,由调用者对代码进行修正。常见的有NullPointException,IndexOutOfBoundsException(下标越界异常),ClassCastException,ArithmeticException(算数运算异常,例如除数为0等),ArrayStoreException (向数组中存放与声明类型不兼容对象异常),NegativeArraySizeException(创建一个大小为负数的数组错误异常),NumberFormatException(数字格式异常)等
    • 出现运行时异常后,系统会自动把异常一直往上层抛(不需要程序员在代码中抛出),一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
    • 如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。
  • Java异常处理方法有:抛出异常,捕捉异常。主要依赖于try、catch、finally、throw、throws五个关键字。
  1. try:它里面放置可能引发异常的代码
  2. catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。
  3. finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块执行完成之后,才会回来执行try或者catch块中的return或throw语句,如果finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。
  4. throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。
  5. throws用在方法签名中,用于声明该方法可能抛出的异常

     1 import java.io.IOException;
     2
     3 public class Test {
     4
     5     public static void main(String[] args) {
     6         System.out.println("returning result is " + testException());
     7     }
     8
     9     public static int testException(){
    10         int i = 1 ;
    11         try{
    12             throw new IOException() ;
    13         }catch(Exception e){
    14             System.out.println("catch it !");
    15             return i;
    16         }finally{
    17             i = 2 ;
    18             System.out.println("finally ok") ;
    19             System.out.println("i = " + i) ;
    20             //return i ;
    21         }
    22     }
    23 }

    当第20行的return语句注释掉时,输出的结果是

    catch it !
       finally ok
       i = 2
       returning result is 1      同时也表明如果try 或 catch 中有return语句,则在进入finally之前,Java的中间缓存变量机制已经将try 或 catch 中返回的结果进行了缓存,执行完finally中的语句后,直接将缓存结果return,而当finally中有return语句时,则直接return当前的结果即可。
     当第20行的return语句没有注释掉时,输出的结果是

    catch it !
       finally ok
       i = 2
       returning result is 2

时间: 2024-10-12 15:49:37

Java基础——异常体系的相关文章

Java基础——异常(2)

throws 和 throw 有什么区别? 1.位置不同:throws用在函数上,后面跟的是异常类,可以跟很多个. throw用在函数内,后面跟的是异常对象. 2.功能不同:throws用来声明异常,让调用者知道功能有可能出现问题,并由调用者可以给出预先的处理方式. throw抛出具体问题对象.执行到throw功能已经结束了,跳转到调用者(谁调用跳哪去),并将具体的问题对象抛给了调用者. 异常体系最大的特点就是体系中的类以及类产生的对象,都具备可抛性.可抛性的意思就是可以被throws和thro

黑马程序员——java基础——异常

黑马程序员--java基础--异常 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 异常 就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多个属性信息存在.当出现多属性信息最方便的方式就是将这些信息进行封装.异常就是java按照面向对象的思想将问题进行对象封装. 异常体系 --------java.lang.Thro

Java基础—异常

一.  Exception异常 1. 概述 异常是程序在运行时出现的错误 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 2. Java的异常体系 1. 从图中可以看出Throwable下有两个子类,Error和Exception 对于严重的问题,java通过Error类进行描述.对Error类一般不编写针对性的代码对其进行处理. 对于非严重的,java通过Exception类进行描述.对于Ex

java基础 异常学习笔记

1.异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正确的执行. 2.一旦产生异常之后,异常之后的语句并不会执行,而是直接结束程序,并将错误报告给用户. 3.在计算机发展史有两大杀手:断电,被除数为0(结果为无穷大,则程序内容会被全部占满). 处理异常的格式: try{// 可能出现异常的语句} catch(异常类异常对象){//编写异常的处理语句} ca

Java基础——异常(3)

小节: 异常其实就是将问题进行封装,抛给调用者. 如果声明了,就需要调用者处理(继续抛或者捕获). 什么时候声明?什么时候捕获? 功能内部可以解决就捕获,不能解决或者解决还必须告诉调用者问题,这时就应该声明. finally的作用:无论是否有异常发出,都需要资源进行释放.资源释放就是定义在finally的代码块中. 练习:老师用电脑上课.电脑可能出现的问题是:电脑蓝屏.电脑冒烟. 异常转换:根据不同的对象产生不同的异常. 封装本层异常,对外暴露对方能处理的异常. 覆盖时: 子类方法覆盖父类方法只

java基础异常(毕向东老师)

异常:不正常.在运行时期发生的一些不正常情况.就是异常.异常的由来.程序运行是总会class ExceptionDemo{public static void main(String[] args){int[] arr=new int[2];System.out.println(arr[2])}} 异常情况有多钟,都需要分别描述,意味着异常情况应该会有一个体系.多一个异常具备共性不断地向上抽取,就形成了体系.异常还有一个父类.通过查阅API,发现异常体系是这样的:Throwable|--Erro

详解Java基础--异常

经常写程序的人对try...catch...finally语句肯定是不陌生的了.但是好多人总对异常搞不太清楚,不知道这个异常什么意思,不知道为什么用这个异常处理,这篇博客为大家从本质上剖析一下java中的异常处理的工作原理. 一.定义 在<java编程思想>中这样定义异常:阻止当前方法或作用域继续执行的问题. 这是书面上的语言,翻译成我们自己的语言其实就是程序运行出现了问题.具体一点说就是程序运行出现了问题,可能会导致程序运行机制.所以就要通过抛出异常的方式告诉开发者哪里出现了问题. 二.异常

java基础 异常总结

异常: 什么是异常?是对问题的描述,将问题进行对象封装 ---------- 异常体系: Throwable |--Error |--Exception |--RuntimeException ----------- 异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性 也就是说可以被 throw 和 throws 关键字所操作. 只有异常体系具备这个特点. --------------- throw 和 throws 的用法: throw 定义在函数内,用于抛出异常对象. throws

Java基础-异常-总结参考

-----参考于毕向东课程文档异常:是什么?是对问题的描述.将问题进行对象的封装.------------异常体系:    Throwable        |--Error        |--Exception            |--RuntimeException 异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性.                也就是说可以被throw和throws关键字所操作.                只有异常体系具备这个特点. --------