5

Java 异常类型学习

 3 years ago
source link: https://suiyia.github.io/2019/12/10/Java-%E5%BC%82%E5%B8%B8%E5%85%A8%E9%9D%A2%E5%AD%A6%E4%B9%A0/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Java 异常类型学习

2019-12-10 Java 基础 20 评论 字数统计: 539(字) 阅读时长: 2(分)
upload successful

Throwable 类是 Error 和 Exception 的父类,只有是 Throwable 的实例才能被 JVM 或者 Java 语句抛出,捕获。

  • Error:表示不希望被程序捕获或者是程序无法处理的错误,Error 类对象由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。

  • Checked Exception:受检查异常,需要被 try catch 捕获或者 throws 抛出;如果不处理,IDE 会提示编译不通过。

  • Runtime Exception(Unchecked Exception):运行时异常,由程序逻辑错误引起,程序应该尽可能的避免该类异常。

异常发生时,有两种处理方式:捕获 or 抛出

捕获:try catch

抛出

  • 方法名上面声明抛出 throws。

  • 方法内抛出 throw

异常抛出限制

  • 父类的方法没有声明异常,子类在重写该方法的时候不能声明异常;
  • 子类重写父类抛出的异常方法时,可以抛出或者不抛出异常;若抛出异常,子类抛出的异常类型必须与父类方法抛出异常类型相同,或者子类抛出的异常类型是父类方法抛出异常的子类。

    错误抛出情况:子类抛出的 IOException 和 RuntimeException 不是同类型,也不是其子类。

    public class C {
    public void fun() throws RuntimeException{
    }
    }

    public class D extends C {
    public void fun() throws IOException,RuntimeException{
    }
    }
  • 如果父类抛出了 CheckedException ,那么子类重写的方法可以抛出 RuntimeException

    正确的抛出情况:
    public class A {
    public void fun() throws IOException {
    };
    }

    public class B extends A {
    public void fun() throws IOException,RuntimeException{
    }
    }

自定义异常

所有异常都必须是 Throwable 的子类。

如果希望写一个检查性异常类,则需要继承 Exception 类。

如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

异常捕获流程

1、try{} 里有一个 return 语句,那么紧跟在这个 try 后的 finally{} 里的 code 会不会被执行,什么时候被执行,在 return 前还是后?

答案:会执行,在方法返回调用者前执行。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK