public reade AToB(Object obj) throws BussinessException {
try {
StringWriter writer = new StringWriter();
StringReader reader = new StringReader(writer.toString());
writer.close();
return reader;
} catch (Exception e) {
e.printStrackTrace();
}
}
这样就报无返回值错误
如果将catch语句改成catch (Exception e) {
throw new BussinessOperationException(e);
}
就不报错了。为什么?

解决方案 »

  1.   


    e.printStrackTrace()和throw 不是一回事,一个是打印stract 一个是异常退出此方法。
      

  2.   

    throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行,即异常退出方法。e.printStrackTrace()是打印异常发生时的堆栈信息,try……catch……完了还要往下正常进行,当然需要一个返回值了,一般这种情况你返回null好了。
      

  3.   

    一般这样写:public StringReader AToB(Object obj) throws BussinessException {
    StringWriter writer = null;
    StringReader reader = null;
    try {
    writer = new StringWriter();
    reader = new StringReader(writer.toString());
    } catch (Exception e) {
    e.printStrackTrace();
    }finally{
    return reader;
    }
    }
      

  4.   

    一般这样写:public StringReader AToB(Object obj) throws BussinessException {
    StringWriter writer = null;
    StringReader reader = null;
    try {
    writer = new StringWriter();
    reader = new StringReader(writer.toString());
    } catch (Exception e) {
    e.printStrackTrace();
    }finally{
    writer.close();
    }
    return reader;
    }
      

  5.   

    return 后面不执行代码了,你要打印堆栈信息,肯定报错,
    throw new 一个异常对象,是终止代码执行了
      

  6.   

    通常一个项目是不应该在项目界面抛异常的,估计这是你公司的项目,这样的话,所以得异常都通过BussinessOperationException(e) 抛到了最上层,然后可能用拦截器做处理。比如,一个手机号码是空的,就不应该抛null pointException,而应该友好的提示手机号码为空。因为你通过throw BussinessOperationException()抛到了最上层了,所以就没有报异常。楼主,你不妨去看看你项目的拦截器,或者过滤器,就大致了解工作原理了。