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é)束