Java异常体系总结

作者: 奔跑吧李博 | 来源:发表于2019-01-02 23:54 被阅读2次
    Java异常体系图
    Error(错误):

    是程序无法处理的错误,表示运行应用程序中较严重问题。例如,Java虚拟机运行错误(Virtual MachineError)

    Exception(异常):

    是程序本身可以处理的异常。

    异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

    Exception分为:可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)
    RuntimeException为不可查异常,其余异常都属于可查异常(编译异常)。

    编译性异常(checked exceptions)必须抛出异常,否则无法编译通过。

    一个 try 块可能有多个 catch 块。Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块

    当try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配,找到与之对应的处理程序,其他的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句;

    throws和throw的使用区别:

    throws用在方法声明中,throw用在方法体中,
    如 throw new MyException("除数不能是负数"); 程序会在throw语句后立即终止。

    自定义异常:
    public class MyException extends Exception { 
    
      private static final long serialVersionUID = 1L; 
    
      // 提供无参数的构造方法
      public MyException() { 
      } 
    
      // 提供一个有参数的构造方法,可自动生成
      public MyException(String message) { 
        super(message);// 把参数传递给Throwable的带String参数的构造方法 
      } 
    
    } 
    

    在异常判断条件成立的地方调用throw new MyException()抛出这个自定义异常。

    Java异常try里面有return,finally代码会执行吗?

    会执行。finally{}块的代码只有在try{}块中包含遇到System.exit(0);之类的导致Java虚拟机直接退出的语句才会不执行。
    当程序执行try{}遇到return时,程序会先执行return语句,但并不会立即返回,也就是在将要返回、但并未返回的时候,程序把执行流程转去执行finally块,当finally块执行完成后就直接返回刚才return语句已经准备好的结果。

    相关文章

      网友评论

        本文标题:Java异常体系总结

        本文链接:https://www.haomeiwen.com/subject/qlcjzftx.html