例:编写一段程序去实现将100次的栈弹出写入到一个文件记录。这有两种异常:栈为空和写出错。一种源代码如下:InputStream is;Stacks;for (i=0;i<100;i++){try{n=s.pop( );}catch(StackException s){//栈为空}try{out.writeInt(n);}catch(IOException e){//写文件出错}}——————————————————————————————书上说:这个代码中,一旦栈弹出为空,文件写的错误就会漏了,程序不会再执行后面的catch 。为什么呢?为什么不执行后面的catch ?
是不是一个方法中只能执行一个catch块? 

解决方案 »

  1.   

    1,书上说的没错,捕获StackException异常以后,最后的catch子句就没机会调用了。
    2,一个try块可以有多个catch子句。
    3,满足你需求的伪代码:
    ... ...
    try{
    n=s.pop( );
    out.writeInt(n);
    }catch(StackException s){
    //栈为空
    try {
    out.writeInt(n);
    }catch(IOException e){
    //写文件出错
    }
    }catch(IOException e){
    //写文件出错
    }
      

  2.   

    但是我测试了下,下面的catch还是会执行的啊,代码如下class Test
    {
    public static void main(String[] args)
    {
    try
    {
    int a=8/0;
    }
    catch(Exception e)
    {
    System.out.println("The first Exception!");
    }

    try
    {
    int b=9/0;
    }
    catch(Exception e)
    {
    System.out.println("The second Exception!");
    }

    }} 
      
     结果是
    System.out.println("The first Exception!");
     
    System.out.println("The second Exception!");
      

  3.   

    去看书~  Exception 和他的子类们~~~