finally的学习笔记

来源:互联网 发布:手机注册淘宝达人 编辑:程序博客网 时间:2024/05/22 10:58

无论异常是否发生,finally子句都将执行。

try-catch-finally是规定了顺序的,顺序错误就会显示编译错误

而finally的用处就是即使异常没被捕获,程序终止,也能执行,eg:

public class FINALLY {    public static void main(String[] args){        Scanner Input = new Scanner(System.in);                try{            int a = Input.nextInt();            int b = Input.nextInt();                        int c = a/b;            System.out.println(a + " / " + b + " = " + c);        }        catch(ArithmeticException ex){            System.out.println("wrong");        }        finally{            System.out.println("0");        }    }}

输入1.0 2(使异常不会被捕获)将显示:

0
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at 第12章.FINALLY.main(FINALLY.java:10)
Java Result: 1

若将finally{ System.out.println("0");  }改为System.out.println("0");

同样输入1.0 2,显示的结果为

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at 第12章.FINALLY.main(FINALLY.java:10)
Java Result: 1


在一些特殊的情况下,finally的子句将不会执行,例:既在执行finally语句之前,先执行了System.exit(0)(正常退出),或者System.exit(1(非零))(强制退出);程序将退出Java虚拟机,即不会在执行语句之后的任何语句。但若将System.exit(int)换成return则不行,程序将会依然执行finally语句。eg:

public class FINALLY1 {    public static void main(String[] args){        try{            int a = 2/0;        }        catch(Exception ex){            System.out.println("1");            System.exit(0);        }        finally{            System.out.println("2");        }        System.out.println("3");    }}
程序显示的结果为:

1

而如果将System.exit(0)改为return:程序将显示的结果为:

1

2

程序是先将finally语句执行后在结束的。

0 0
原创粉丝点击