首先看看我寫的一個小程序:
public class TestTry extends Exception
{
static boolean f=false;
static int sum=0;
static int created=0;
static int i=0;
TestTry()
{
i=created++;
if(created>=299) f=true;
}
public void finalize()
{
sum++;
}
public static void main(String[] args)
{
while(!TestTry.f)
{
try{
throw new TestTry();
}catch(Exception e){}
finally{
System.out.println("Creat "+TestTry.i+" TestTry, "+TestTry.sum+" has been finalized!");
}
}
//System.out.println("Creat "+TestTry.created+" TestTry, "+TestTry.sum+" has been finalized!");
}
}
這個是我在測試在try語句拋出異常后,在try語句中建立的對象是否會調用自身的終止函數時發現的,這里有個奇怪的現象在if(created>=299) f=true;這條語句中,如果把條件created>=299改為>=比299更大的數,你會發現System.out.println("Creat "+TestTry.i+" TestTry, "+TestTry.sum+" has been finalized!");這條語句的輸出的結果并不是你預想的那樣(輸出判斷的數字+1的行數),而只是顯示最后的三百行。那么在這之前拋出的異常上哪里去了呢?難道說Java只處理最后拋出的三百的異常么?