异常
异常:
Throwable 基类/超类 病
1、Error(错误) 1、不可治疗
2、Exception(异常) 2、可治疗的病
1、运行时异常 1、不一定去医院处理
2、编译时异常 2、一定要去医院处理
异常体系
--|Throwable //所有异常或者错误类的超类
-----|Error //错误 一般时用于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。
-----|Exception //异常 是需要通过代码去处理的
Throwable 常用的方法
toStrng(); //返回当前对象的完整类名+getMessage的信息
getMessage(); //返回的是创建Throwable传入的字符串信息
printStackTrace(); //打印异常的栈信息。
如何区分错误和异常呢:
如果程序出现了不正常的信息,如果不正常的信息的类名是以Error结尾的,那么肯定是一个错误。
如果是以Exception结尾的,那么肯定就是一个异常。
异常的处理:
方式一:捕获处理 捕获处理的格式 try{ 可能发生的异常代码 }catch(捕获的异常类型 变量名){ 处理异常的代码... } Class Demo{ public static void main(String[] args){ div(4,0); } public static void div(int a,int b){ int c = 0; try{ c = a / b; //jvm在这句好的时候发现了不正常的情况,那么会创建一个对应的异常对象。 }catch(ArithmeticException e){ //处理异常的代码 System.out.println("toString" + e.toString()); } System.out.println(c); } } 捕获处理注意细节: 1、如果 try 块中代码出了异常经过了处理之后,那么 try-catch 块外面的代码可以正常执行。 2、如果 try 块中出了异常的代码,那么在 try 快中出现异常代码后面的代码是不会执行了。 3、一个 try 块后面是可以跟有多个 catch 块的,也就是一个 try 块可以捕获多种异常的类型。 4、一个 try 块可以捕获多种异常类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。 方式二:抛出处理(throw throws) throw new Exception(); //抛出一个异常 抛出处理要注意的细节: 1、如果一个方法的内部抛出了一个编译时异常对象,那么必须要在方法上声明抛出。 throws Exception 2、如果调用了一个声明抛出编译时异常的方法,那么调用者必须要处理异常。 3、如果一个方法内部抛出了一个异常对象,那么 throw 语句后面的代码都不会执行了。(一个方法遇到了 throw 关键字,该方法也会马上停止执行的。) 4、在一种情况下,只能抛出一种类型异常对象。 throw 与 throws 两个关键字: 1、 throw 关键字是用于方法内部的, throws 是用于方法声明上的 2、 throw 关键字是用于方法内部抛出一个异常对象的, throws 关键字是用于在方法上声明抛出异常类型的。 3、 throw 关键字后面只能有一个异常对象, throws 后面一次可以声明抛出多种类型的异常。
自定义异常类:
自定义异常类的步骤:自定义一个类继承Exception即可 class Demo{ public static void main(String[] args){ int ip = null; try{ feiQ(ip); }catch(NoIpException e){ e.printStackTrace(); System.out.println("请插网线!!"); } } public void feiQ(int ip) throws NoIpException{ if(ip == null){ throw new NoIpException("没有插网线"); } System.out.println("连接成功"); } } class NoIpException extends Exception{ public NoIpException(String message){ super(message); } }
异常体系
--|Throwable //所有异常或者错误类的超类
-----|Error //错误 一般时用于jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。
-----|Exception //异常 是需要通过代码去处理的
-------|运行时异常:如果一个方法内部抛出了一个运行时异常,那么方法上可以声明异常也可以不声明异常,调用者可以处理也可以不处理
-------|编译时异常(非于运行时异常、受检异常):如果一个方法内部抛出了一个编译时异常对象,那么方法上就必须要声明,而且调用者也必须要处理。
运行时异常:RuntimeException以及RuntimeException一下的子类都是属于运行时异常。
编译时异常:除了运行时异常就是编译异常。
finally 块:
finally 块的使用前提是必须要存在 try 块才能使用。
finally 块的代码在任何情况系都会执行的,除了jvm退出的情况。 try{ }catch(){ }finally{ }