java中finally有什么意義呢,在現(xiàn)實中?

馬克-to-win: finally有什么意義呢,在現(xiàn)實中?比如你開了一個流處理文件,可能沒開成功,或開成功了,但后面的操作失敗了,但不管你怎么樣,你必須在一個地兒把它關(guān)閉,那就是finally塊兒。
馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。
例: 1.10.1(try catch全齊,正常情況)-本章源碼

public class Test {
    public static void main(String[] args) {
        try
        {
            int userInput=0;
            int I = 6 / userInput;
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        finally
        {
            System.out.println("in finally");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}

輸出結(jié)果:

java.lang.ArithmeticException: / by zero
in finally
馬克-to-win:優(yōu)雅結(jié)束




例: 1.10.2(異常沒有發(fā)生)-本章源碼

public class Test {
    public static void main(String[] args) {
        try
        {
            int userInput=2;
            int I = 6 / userInput;
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        finally
      {
            System.out.println("in finally");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}
輸出結(jié)果:
in finally
馬克-to-win:優(yōu)雅結(jié)束




例: 1.10.3(根本沒有寫catch塊兒)-本章源碼

public class Test {
    public static void main(String[] args) {
        try
        {
            int userInput=2;
            int I = 6 / userInput;
        }
        finally
        {
            System.out.println("in finally");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}

輸出結(jié)果:

in finally
馬克-to-win:優(yōu)雅結(jié)束
例: 1.10.4(沒捕獲著異常,程序崩潰了)-本章源碼

public class Test {
    public static void main(String[] args) {
        try {
            String str = null;
            str = str.toUpperCase();//本應(yīng)捕獲空指針異常
        } catch (ArithmeticException e) {//這里卻想捕獲數(shù)學(xué)異常, 完全捕不到
            System.out.println(e);
        }
        finally {//finally一定會被執(zhí)行
            System.out.println("here is in final block.");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}
輸出結(jié)果:
here is in final block.
Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:5)




例: 1.10.5(try代碼中有throw或直接崩潰)-本章源碼

public class Test {
    static void subRMark_to_win() {
        try {
            System.out.println("子程序");
            int a=1/0;
        }
        finally {
            System.out.println("子程序的finally");
        }
    }
    public static void main(String args[]) {
        try {
            subRMark_to_win();
        } catch (Exception e) {
            System.out.println("主程序的catch");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}

輸出結(jié)果:

子程序
子程序的finally
主程序的catch
馬克-to-win:優(yōu)雅結(jié)束


例: 1.10.6(try代碼中有throw或直接崩潰)-本章源碼

public class Test {
    static void subRMark_to_win() {
        try {
            System.out.println("子程序");
            throw new RuntimeException();
        }
        finally {
            System.out.println("子程序的finally");
        }
    }
    public static void main(String args[]) {
        try {
            subRMark_to_win();
        } catch (Exception e) {
            System.out.println("主程序的catch");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}
輸出結(jié)果:
子程序
子程序的finally
主程序的catch
馬克-to-win:優(yōu)雅結(jié)束




例: 1.10.6_a(try代碼中有OutOfMemoryError,依舊執(zhí)行finally)

import java.util.Vector;

class Mark_to_win {
    long data;
}
public class Test {
    static Vector v = new Vector(10);
    static void subRMark_to_win() {
        try {
            System.out.println("子程序");
            int size_Make_to_win = (int) (Runtime.getRuntime().maxMemory() * 0.8);
            for (int i = 1; i < size_Make_to_win; i++) {
                Mark_to_win m = new Mark_to_win();
                v.add(m);
                m = null;
            }
        }
        finally {
            System.out.println("子程序的finally");
        }
    }
    public static void main(String args[]) {
        try {
            subRMark_to_win();
        } catch (Exception e) {
            System.out.println("主程序的catch");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}

輸出:

子程序
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Vector.grow(Unknown Source)
    at java.util.Vector.ensureCapacityHelper(Unknown Source)
    at java.util.Vector.add(Unknown Source)
    at com.Test.subRMark_to_win(Test.java:16)
    at com.Test.main(Test.java:26)
子程序的finally




例: 1.10.7(try代碼中有return)-本章源碼

public class Test {
    static void subRMark_to_win() {
        try {
            System.out.println("子程序");
            return;
        }
        finally {
            System.out.println("子程序的finally");
        }
    }
    public static void main(String args[]) {
        try {
            subRMark_to_win();
        } catch (Exception e) {
            System.out.println("主程序的catch");
        }
        System.out.println("馬克-to-win:優(yōu)雅結(jié)束");
    }
}
輸出結(jié)果:
子程序
子程序的finally
馬克-to-win:優(yōu)雅結(jié)束