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语句已经准备好的结果。
网友评论