异常
了解异常
- 什么是异常?
- 程序出现的错误。
- 异常体系最上层的父类是谁?可以分为几类
- 最上层的父类是Exception类
- 可以分为两类:编译时异常和运行时异常
- 编译时异常与运行时异常的区别
- 编译时异常:没有继承RunTimeException的异常,直接就继承于Exception,在编译时出现的异常,通常来检验语法错误。
- 运行时异常:RunTimeException本身和子类,在编译阶段没有错误提示,只在运行时报错
异常的作用
- 异常用来查询BUG的关键参考信息。
- 异常可以作为方法内部的一中特殊返回值,以便通知调用者底层的执行情况。
异常的处理方式
-
JVM虚拟机处理
- 把异常的名称,异常原因及异常出现的位置等信息输出返回到控制台
- 遇到异常时,程序就会停止运行,下面的代码不会执行
-
自己处理(try catch)
-
目的:到代码出现异常时代码继续执行。
-
格式:
try{ 存放可能出现异常的代码 }catch(异常类名 变量名){ 异常的处理代码 }
-
灵魂四问:
-
如果try中没有遇到问题,怎么执行?
- 如果没有遇到问题就不会中catch后域中的代码,接着执行下面的代码。
-
如果try中可能会遇到多个问题,怎么执行?
-
如果可能意见多个问题,就写多个catch分别去针对的不同的异常进行处理。
try { //存放可能出现异常的代码 System.out.println(arr[4]); String s = null; s.equals("abd"); } catch (ArrayIndexOutOfBoundsException e) { //处理异常的代码 System.out.println("下标越界异常"); }catch (NullPointerException e){ System.out.println("空指针异常"); }catch (Exception e){ System.out.println("异常"); } System.out.println(arr[3]);
-
多个问题也可以写所有异常的共同父类集中处理,注意在多个catch的情况下,捕获共同父类异常的catch必须写在最下面。
-
-
如果try中遇到的问题没有被捕获怎么执行?
- 如果遇到的问题没有被捕获,则JVM虚拟机将对异常进行捕获,同时程序终止运行。
-
如果try中遇到问题,那么try下面的其他代码还会执行吗?
- try中有多行代码,则在捕获异常后try里面的其他代码将不会继续执行。
-
-
-
手动抛出异常(throw和throws)
- throws,作用于方法的声明部分,用来告诉该方法的调用者这个方法可能存在哪些异常
- throw,作用在方法体当中,通常配合判断来手动抛出异常的对象来交给调用者。一旦抛出异常,程序结束。
自定义异常
- 为什么要自定义异常。
- 虽然java当中有很多已经定义好的异常类,但都不能准确的帮我们描述出异常的信息,这是我们就要器自定义异常,当再遇到异常时能准确的显示异常的信息。
- 自定义异常的步骤
- 定义异常类
- 自定义异常类的类名要见名知意,通常
- 写继承关系
- 运行时异常就要继承RenTimeException类
- 编译时异常要继承Exceotion类
- 由参数引起的异常是运行时异常,本地信息错误是编译时异常
- 写空参构造
- 写带参构造
- 参数一般是异常的提示信息,所以形参为String类型。
- 定义异常类