public class ExceptionTest { public static Integer i = 0;

public static void main(String[] args) throws Exception{
try{
if(i != 0)
throw new Exception("sadlfj");

}catch(NullPointerException e){
System.out.println("Caught NullPointerException111");
}finally{
System.out.println("Got through new");
}

try{
i = 10;
System.out.println(i.toString());
}catch(NullPointerException e){
System.err.println("Caught NullPointerException222");
}finally{
System.out.println("Got through it");
}
}}
输出结果:
Got through new
10
Got through it我觉得如果没有在第一个try块中没有抓住异常,就不应在执行第二个try块啊,但是为什么第二个try块也执行了???和finalize有关系么?

解决方案 »

  1.   

    无论程序是否有异常,finally里的语句一定会执行的,可以用来释放一些资源!
      

  2.   

    看不懂你的意思
    我觉得如果没有在第一个try块中没有抓住异常但可以肯定的是,执行完第一个finally后,会继续执行二try
      

  3.   

    为什么不应执行?第一个try和第二个有直接联系吗?只要程序没终止 就要执行
      

  4.   

    ..正好相反第一个TRY块没抓到异常,所以程序才会向下执行第二个TRY块
      

  5.   

    这程序写的有问题在 if语句中抛的是Exception异常,而catch只处理空指针异常所以只要出异常,程序肯定中断如果再加个catch处理Exception异常,那么即使第一个try块抓到了异常,程序也会继续向下执行第二个try块
      

  6.   

    对啊,我认为程序会在第一个try块执行后中断~~而不应继续执行第二个try块,因为第一个try块没有抓住Exception的异常,它只能抓住NullPointerException异常,它不是应该直接跳出main函数么??
      

  7.   

    还有我把finalize去掉后,还是会执行第二个try块,不知道为什么??
      

  8.   

    楼上,你真的误会了finally的意思了,它的作用域不是那段main函数,而是try{}。finally{}里面是这个try{}只有一定要做的事,无论中间有没有exception is thrown。
      

  9.   

    我知道finally的意思,但是我这段代码的意思是第一个try块是不是应该因为处理不了抛出的Exception,而将此异常在第一个try块执行完直接抛出,这样好像就不应该执行第二个try块了
      

  10.   

    if(i != 0) //现在楼主设定的是零
    throw new Exception("sadlfj"); //所以这条语句不执行