异常分类

Error和Exception区别
-
Error 表示系统级的错误,是 java 运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是 java 虚拟机抛出的。
-
Exception 表示程序需要捕捉、需要处理的异常,是由于程序设计的不完善而出现的问题,程序可以处理的问题。
throw和throws区别
- throw用于方法内部,throws用于方法声明上;
- throw后跟异常对象,throws后跟异常类型;
- throw后只能跟一个异常对象,throws后可以一次声明多种异常类型;
- throws表示不一定会发生这些异常;throw一定会抛出了异常,执行throw则一定抛出了某个异常对象。Throwable是类,Exception和Error都继承了该类。
理解try catch finally与直接 throw 的区别
-
try catch是直接处理,处理完成之后程序继续往下执行。
-
throw则是将异常抛给它的上一级处理,程序便不再往下执行。
本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止。
try catch finally 执行顺序
-
test1 方法运行返回 0,因为执行到 try 的 return ret; 语句前会先将返回值 ret 保存在一个临时变量中,然后才执行 finally 语句,最后 try 再返回那个临时变量,finally 中对 ret 的修改不会被返回。
-
test2 方法运行返回 2,因为 5/0 会触发 ArithmeticException 异常,但是 finally 中有 return 语句,finally 中 return 不仅会覆盖 try 和 catch 内的返回值且还会掩盖 try 和 catch 内的异常,就像异常没有发生一样(特别注意,当 finally 中没有 return 时该方法运行会抛出 ArithmeticException 异常),所以这个方法就会返回 2,而且不再向上传递异常了。
-
test3 方法运行抛出 hello 异常,因为如果 finally 中抛出了异常,则原异常就会被掩盖。
因此为避免代码逻辑混淆,我们应该避免在 finally 中使用 return 语句或者抛出异常,如果调用的其他代码可能抛出异常,则应该捕获异常并进行处理。
java 中 finally 块一定会执行吗(仅4种情况下不会执行finally语句!)
- 如果在try或catch语句中执行了System.exit(0);
- 在执行finally之前jvm崩溃了;
- try语句中执行死循环;
- 电源断电;
异常捕捉方式
- 多异常捕捉办法一:使用多次catch
catch (FileNotFoundException e) { System.out.println("d:/LOL.exe不存在"); e.printStackTrace(); } catch (ParseException e) { System.out.println("日期格式解析错误"); e.printStackTrace(); } - 多异常捕捉办法二:把多个异常,放在一个catch里统一捕捉:
catch (FileNotFoundException | ParseException e) { }
常见的Java异常
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
本文来自博客园,作者:lryepoch,转载请注明原文链接:https://www.cnblogs.com/lryepoch/p/15508424.html
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv8816