异常分类

在这里插入图片描述

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

更多文章请关注《万象专栏》