跟王老师学异常(三)异常类的继承体系

异常类的继承体系

主讲人:王少华  QQ群号:483773664

学习目标:

1、掌握异常的体系

2、掌握处理异常类的几中常用方法

一、异常类继承体系图

Java提供了丰富的异常类,这些异常类之间有严格的继承关系,如下图所示

从上图可以看出,Java把所有非正常情况分成两种,一种是异常(Exception),另一种是错误(Error),它们都继承Throwable父类。

二、Error

Error错误,一般是指虚拟机相关的问题。即仅靠程序本身无法恢复的严重错误。如系统崩溃、虚拟机出错误、动态链接失败等。这种错误通常应用程序无法处理。因为应用程序不应该试图使用catch块捕获这种异常。

三、Exception

由Java应用程序抛出和处理的非严重的错误,它分为运行时异常和非运行时异常。

运行时异常,包括RuntimeException及其所有子类,不要求程序必须对它们做出处理,即在程序中,即使用不使得try-catch或其他异常处理方式(如throws)进行处理,程序仍然可以编译和运行。

非运行异常,除了运行时异常外的其他由Exception继承来的异常类。它的特点是程序中的异常必理进行处理,否则会出现编译错误

四、几中常见的编译时异常


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public class TestRunTimeException {

    public static void main(String[] args) {

        String paras[] = {};

        try {

            int a = Integer.parseInt(paras[0]);

            int b = Integer.parseInt(paras[1]);

            int c = a/b;

            System.out.println("你输入的两个数相除的结果是:"+c);

        } catch (IndexOutOfBoundsException e) {

            System.err.println("数组越界:运行时程序输入的参数个数不够");

        }catch (NumberFormatException e) {

            System.err.println("数字格式异常:程序只能接受整数参数");

        }catch (ArithmeticException e) {

            System.err.println("算术异常:除数不能为零");

        }catch (Exception e) {

            System.err.println("未知异常");

        }

    }

}

  • 如果运行该程序时,数组长度不够,将会发生数组越界异常:IndexOutOfBoundsException.Java将调用IndexOutOfBoundsException对应的catch块处理该异常
  • 如果运行该程序时,数组中的值不是数字,而是字母,则发生数字格式异常:NumberFormatException.Java将调用NumberFormatException对应的catch块处理该异常
  • 如果运行该程序时,除数是0,则发生除0异常:ArithmeticException。Java将调用ArithmeticException对应的catch块处理该异常
  • 如果运行该程序时,出现其他异常,该异常总是Exception类或其子类的实例,Java将调用Exception对应的catch块处理该异常

注:上面这些异常都是比较常见的异常,必须明白出现这些异常的条件。同时还有一些常见的异常:比如空指针异常(NullPointException)等,这些我们再以后学习和工作的过程中,慢慢熟悉和积累。

五、访问异常信息

如果程序需要在catch块中访问异常对象的相关信息,可以通过调用catch后异常形参的方法来获得。

所有异常对象都包含如下几个常用方法:

  • getMessage():返回该异常的详细描述的字符串
  • printStackTrace():将该异常的跟踪栈信息输出控制台
  • printStackMessage(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流
  • getStackTrace():返回该异常的跟踪栈信息。

1

2

3

4

5

6

7

8

9

10

public class AccessExceptionMsg {

    public static void main(String[] args) {

        try {

            FileInputStream fiStream = new FileInputStream("a.txt");

        } catch (IOException e) {

            System.out.println(e.getMessage());

            e.printStackTrace();

        }

    }

}

从上面的图可以看出,异常的详细描述信息是:a.txt (系统找不到指定的文件。)。下面更详细的信息是异常跟踪信息。

来自为知笔记(Wiz)

时间: 2024-10-05 20:07:07

跟王老师学异常(三)异常类的继承体系的相关文章

跟王老师学反射(三):Class类:获得Class对象

跟王老师学反射(三):Class类:获得Class对象 主讲教师:王少华   QQ群号:483773664 学习内容 掌握获得Class对象的三种方式 理解这三种方式的区别 一.获得Class对象 前面我们已经领略了反射的魅力了,我们知道,利用反射的关键是要获得"图纸"Class对象,那么怎么获得这个Class对象呢!!! 每个类被加载之后,系统会为该类生成一个对应的Class对象,通过该Class对象就可以访问JVM中的这个类.Java程序获得Class对象有如下三种方式: (一)调

跟王老师学异常(一):为什么使用异常

为什么使用异常 主讲人:王少华  QQ群号:483773664 一.生活中的异常:上下班 1.正常情况 王老师每天开车上班,正常情况下,30分钟 2 异常情况 发生堵车甚至撞车,就会迟到 二.程序异常 (一)需求 根据提示输入被除数和除数,计算并输出商,最后输出"感谢使用本程序" (二)实现 1 2 3 4 5 6 7 8 9 10 11 12 public class Test1 {     public static void main(String[] args) {      

跟王老师学异常(四):try-catch-finally

try-catch-finally 主讲人:王少华  QQ群号:483773664 学习目标 1.掌握try-catch-finally 2.掌握try-catch-finally分别跟System.exit(1)和return一起使用注意事项 一.finally执行流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class Test2 {     public static void mai

跟王老师学枚举(三):枚举类API

跟王老师学枚举(三):枚举API 主讲教师:王少华   QQ群号:483773664 一.枚举类API Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法.常用方法: name():返回此枚举常量的名称 ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零 valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量 valueof(String name):返回带指定

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

跟王老师学反射(四):Class类:从Class类中获取信息

跟王老师学反射(四)Class类:从Class类中获取信息 主讲教师:王少华   QQ群号:483773664 学习内容 获得class类中的信息 根据我们以前学过的一个Java类有以下几部组成,如下代码所示 一.访问Class对应的类所包含的构造方法 (一)public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回此Class对象所表示的类的指定public构造方法. parameterTypes参数是按

跟王老师学注解(三):元注解

跟王老师学注解(三):元注解 主讲教师:王少华   QQ群号:483773664 元注解,是用来修饰其他的注解定义.java.lang.annotation包下提供了4个元注解,分别是@Target注解.@Retention注解.@Documented注解以及@Inherited注解. 一.@Target (一)简介 用于指定被修饰的注解能用于修饰哪些程序元素 @Target注解类型有唯一的value作为成员变量,value的类型为java.lang.annotation.ElementType

跟王老师学多态(三) 父类到子类的转换和instance of运算符

父类到子类的转换和instanceof运算符 主讲教师:王少华 QQ群号:483773664 学习目标: 1)   父类与子类转换:向下转换 2)   掌握instanceof运算符的使用 一.  问题:实现主人与宠物的玩耍功能 (一)   需求: 和狗玩接飞船游戏,狗的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 (二)   实现思路 1)   给Dog类添加catchingFlyDisc方法,实现接飞盘功能: 2)   给Penguin类添加

跟王老师学Java三大特性(三):案例 QuickHit:确认输入并输出结果

案例 QuickHit:确认输入并输出结果 主讲教师:王少华   QQ群号:483773664 学习目标 完成Game类中的printResult方法的编写 一.需求说明 确认用户输入并输出结果 二.思路分析 确认玩家输入是否正确 如果输入不正确,则直接输出错误信息并退出程序 如果输入正确 如果超时,则直接输出错误信息并退出程序 如果不超时 计算玩家当前积分 计算 玩家已用的时间 输出当前玩家的级别.当前积分.已用时间: 判断用户是已经闯过最后一关并处理 三.参考代码 1 2 3 4 5 6 7