Java异常机制深入理解(4)

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 用于手动抛出异常。

Java异常机制深入理解

如果一直都没有处理(即没有用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();
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/914cf97844744c6fd557f4ba37e2a6af.html