try块内的代码——>finally块内的代码——>程序中断运行
public class Test01 {
public static int test() {
try {
int a=2/0;
System.out.println("try");
return a;
} catch (NullPointerException e) {
System.out.println("catch");
return 0;
}finally {
System.out.println("finally");
}
}
public static void main(String[] args) {
System.out.println(test());
System.out.println("程序正常运行结束");
}
}
结果:
finally Exception in thread "main" java.lang.ArithmeticException: / by zero at Test1.Test01.test(Test01.java:8) at Test1.Test01.main(Test01.java:19)
4. 声明异常 4.1 throws当开发者在定义方法时,事先知道方法在调用时会出现异常,但不知道该如何处理,此时可以在该方法上声明异常。表示该方法在调用过程中会出现异常,请调用者自行处理。
在java中使用throws 声明异常。一个方法可以声明多个异常,用,号分割,写法如下:
1 public void test2()throws IOException,RuntimeException{ 2 //有异常出得代码,在此处没有处理 3 }
4.2 声明异常与方法重载的关系声明异常和方法重载没有任何关系。
4.3 声明异常与方法重写的关系如果父类方法声明了异常(检查时或运行时),子类方法可以完全遵循父类异常,也可以不声明异常。
如果父类方法没有声明异常,子类可以不声明异常,也可以声明RuntimeException,但不能声明Exception。
如果父类声明了运行时异常,子类可以完全遵循父类异常,也可以不声明异常。
5.抛出异常当系统异常满足不了开发需要时,开发者可以自行根据需要自行抛出异常。
throw 用于手动抛出异常。
如果一直都没有处理(即没有用try-catch等语句)异常会把异常抛给调用者,一直抛到main函数处,如果在main函数中也没有处理继续在main函数后抛出异常,这时候会抛给jvm处理。如下栗子:
public class Test01 {
public static void test1()throws IOException,RuntimeException{
//有异常抛出得代码,在此处没有处理,例如:throw new Exception(“异常信息”);
}
public static void test2()throws IOException,RuntimeException{
test1();//调用有抛出异常的方法,在此没有处理
}
public static void main(String[] args)throws IOException,RuntimeException {
test2();//main调用有抛出异常的方法,在此没有处理
}
}
注意:
开发者根据自身需要可以选择抛出检查时异常和运行时异常
6. 自定义异常当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类。
自定义异常步骤:
[1] 确定异常类型.继承Excepion 或者RuntimeException
[2] 编写自定义异常类,并实现构造方法
[3] 在方法需要的地方手动声明并抛出异常。
public class myException extends Exception {
public myException() {
super();
}