StackOverflowError extends VirtualMachineError 
 VirtualMachineError extends Error
public class Error extends Throwable也就是说,你可以在B类里面catch Throwable 就能捕获到StackOverflowError ,参见jdk源码。

解决方案 »

  1.   

    在A里把e在throw出来,B就能接住了
      

  2.   


    public class A {
        public A(){
             
            public String sum(){
                try{
                    xxxxxx
                }catch (Exception e){
                 //其实这是个 StackOverflowError 异常,我想在B类里获取
                    e.printStackTrace();
                    //记录日志并把异常往向抛
                    log.error(e,e);
                    throw e;
                }
            }
        }
     
    }
     
    //在B里调用A文件的sum方法
    public class B {
        public B(){
     
            try{
                A a = new A();
                a.sum();
            }catch (Exception e){
                e.printStackTrace();
                //希望在此获得A里发生的异常,不论什么方法,只能有获得到A里的sum异常message就行
            }
        }
    }
      

  3.   

    简单滴说,做不到。
    首先你的问题本身就有问题:
    捕获就是catch,catch就是捕获,已经被catch的异常,怎么再次catch呢
      

  4.   

    正常手段肯定不可能的,想到一个办法,也许很坑。
    首先,我看到A的sum函数是有String类型返回值的。
    而异常发生时,A的catch块没有返回,所以应该有办法区分是否发生异常,也就是切入时间,此时你去你的log文件或者控制台,抓log,因为你是 e.printStackTrace();所以可以根据堆栈信息拿到你要的message。
    馊主意一个,哈哈
      

  5.   

    定义一个类C 继承A  重写SUM方法,最后把异常给抛出来...
      

  6.   

     e 在a中已经被catch掉了, 出了catch块都有可能立马被垃圾回收了
      

  7.   

    已经正解了的,catch的中文意思就是捕获
      

  8.   

    为什么会这样想呢,继承关系是有的,但也没办法再次cache到。
      

  9.   

    A 里面可以把StackOverflowError包装成另一个异常的原因 形成异常链
      

  10.   

    哎!总的一句话。楼主要求不改A类。  A类本身已经try...catch 捕获错误抛出了。
    等待高手 
      

  11.   

    上面说了那么多,为什么都不肯试一下呢package dianping;
    // A的文件不能发生任何的更改  
    public class A {
        public A(){
        }
        
        public String sum(){
            try{
             if(1==1){
             throw new StackOverflowError();
             }
                return "success";
            }catch (Exception e){
              //其实这是个 StackOverflowError 异常,我想在B类里获取
                e.printStackTrace();
            }
    return null;
        }}//在B里调用A文件的sum方法package dianping;
    public class B {
        public B(){        try{
                A a = new A();
                a.sum();
            }catch (Throwable e){
             System.out.println(" catch error.");
                //希望在此获得A里发生的异常,不论什么方法,只能有获得到A里的sum异常message就行
            }
        }
        
        public static void main(String[] args) {
    B b=new B();
    }
    }
      

  12.   

    楼上果然高人,一眼就看出StackOverflowError不是Exception而仅是Throwable
      

  13.   


    楼主的注释坑爹呀, 为什么注释打到catch块里面,还以为是异常呢被catch到了。
      

  14.   

    2楼就说对了呀!
    StackOverflowError不是异常好么?
    异常(Exception)和错误(Error)是两种不同的东西,但他们都是Throwable的子类。
    try-catch语法其实是对于Throwable而言的,所以它既可以捕获Exception也可以捕获Error。
    在楼主的例子里既可以使用catch(Throwable e)和可以使用catch(Error e)来捕获这个Error
      

  15.   

    额~~不是2楼,是1楼。对CSDN的楼很不适应。