首先看看我写的一个小程序:
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只处理最后抛出的三百的异常么?