异常处理
Posted hankai2735
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。
1.代码在运行时期出现的问题就是异常;Throwable是所有异常的父类也叫超父类,Exception和它的子类都继承于Throwable。
2.Error错误是系统级别的错误一般发生在程序的运行时期,不能被解决只能修改代码
3.Exception异常:1.如果是运行时期的异常(RuntimeException),没法解决只能修改代码
4.如果是运行时期异常(Exception(除了RuntimeException)),类似小感冒,可以处理
5.Exception(除了RuntimException)是运行时期的异常可以被解决;RuntimelyException和Error是运行异常,但不能被解决
6.jvm虚拟机接收到异常对象会做两件事:1.终止程序2.将异常对象中的异常位置和异常信息以红字的形式打印在控制台;
7.jvm虚拟机在方法里面检查到异常,并发现这个异常是那种异常(如数组越界异常):1.并创建异常对象Array IndexOf Bounds Exception
并把异常对象抛给方法的调用者(main方法里面的调用语句如:int num=get(arr));抛完异常后代码终止程序;语句不会再往下执行
main方法里面的调用者在加收到异常后会在mian方法里面寻找解决方法,如果main方法里没有解决的办法那么会把异常抛给虚拟机jvm
8.最简单的异常处理方式:throws:public static void main (String[]args)
int[] arr=nell; int num=get(arr);
system.out.println(num);
public static int get(int[] arr)throws Exception throws的书写方式:修饰符 返回值类型 方法名(参数) Throws 异常类名1,异常类名2...
if(arr==null) throw new Exception("你传的是null"); throw是抛出异常,不会声明别人并不知道;throws是声明异常,告诉别人自己哪里出了问题
throws是抛出指定异常的对象,格式: throw new 异常类名(参数)
int i=arr[arr.length-1]; return i;
9.try...catch...finally:此类处理异常,不会终止下面语句的执行但会把异常信息以红字的方式打印在控制台
public static void main(String[] args) int[] arr=null;
try 这里面会放容易出异常的语句,一般是main方法里调用异常方法的语句
int num=get(arr); system.out.println(num); catch(Exception ex) system.out.println("出错了");ex.printStackTracefinally
system.out.println("一定会执行的代码")try...catch处理的异常虚拟机jvm并不会终止程序,语句会继续执行下去
throw new Exception("你传的数组的值是null");给Exception ex赋值了,这里的Excertion是根据下面方法抛的异常类型来接的,下面抛什么异常这里就用什么异常来接,和变量一样‘
通过调用Exception的.printStackTrace()方法把下面方法里面的报错"你传的数组的值是null"以红字的形式打印在控制台;上面的ex被下面的语句赋值了
10.//catch里的传的参数()父类的必须要放最下面,子类的放上面,不然一个父类就把子类的都处理了,而且处理的结果不准确
11.try..catch..finally:try检查异常,catch处理异常,finally进行资源释放
12.一个try多个catch:try检查到异常并把异常传递给catch处理,对每种不同的异常用不同的catch进行处理
13.try..finally:try对异常进行检测,检测到异常后因为没有catch不能处理异常所以直接抛给了虚拟机,最后用finally释放内存资源
14.运行异常的特点:运行异常无序throws处理在,直接把异常抛给虚拟机进行处理,调用者也无需处理次异常,运行时一旦出现异常只能修改异常代码
15.子类在继承了父类的异常后在声明异常的时候需要声明父类的异常类或者是异常类的子类,或者无需声明异常
16.public static void main(String[] arge) int[] arr=1,2,3;int num;
try num=getArr(arr); system.out.println(num);catch(Exception e)将异常类名、异常信息、异常位置以红字的形式打印在控制台:e.printStackTrace();这个方法更适合我们日常使用
获取异常信息:e.getMessage();获取异常类名+信息:e.toString();
17.public FuShuException(String message 给main方法里面的FuShuException()异常处理方法提高有参构造
super(message);这里是子类继承父类的方法调父类现有的方法实现效果,这里的FuShuException直接调用父类RuntimeException已经写好的方法就能在打印台输出红字了 super(message)中的message传的是需要打印的内容
18.子类继承父类后;父类抛了异常,子类可以抛(抛的异常和父类一样)也可以不抛
19.如果父类的方法没有抛异常那么子类也不能抛
20.调用抛了异常的方法这里不能throws要用tyr..catch;因为sleep()父类没有Throws所以这里就不能throws
以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )
Kotlin 协程Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )