在Java中抛出匿名异常

在Java中抛出匿名异常,java,exception,styles,Java,Exception,Styles,在Java中,即使只是在抛出时声明了异常,也可以抛出任何异常,示例如下: import org.springframework.dao.DataAccessException; // DataAccessException - is abstract class } catch (DataAccessException dae) { throw new DataAccessException("Exception while executing SQL: \n" + sql

在Java中,即使只是在抛出时声明了异常,也可以抛出任何异常,示例如下:

import org.springframework.dao.DataAccessException;

 // DataAccessException - is abstract class

 } catch (DataAccessException dae) {
      throw new DataAccessException("Exception while executing SQL: \n" + sql
            +    "\nparams: " + paramsToString(params), dae) {
                          private static final long serialVersionUID = 1L;
      };
 } 
请分享你对这种方法的好坏的看法

扩展RuntimeException(这不是抽象的)时也会遇到同样的问题,并立即抛出它

请分享你对这种方法的好坏的看法

它应该是合法的。。。根据我对Java语言的理解

我认为从功能的角度来看,这是毫无意义的。调用方仍然必须捕获您创建的匿名子类型的基本异常。它不像匿名子类的名称传达任何有用的信息

我认为从代码可读性和可维护性的角度来看,这是不好的。它是模糊的,没有充分的理由,也没有有用的效果,我可以看出

还有一种风险,就是做一些奇怪的事情,可能会把事情弄坏。。。。例如调试器、源代码分析器或Java链中的其他工具



总而言之,这是一个没有补救功能的坏主意。

是的。你的例子很好。异常实例只是一个类(扩展异常)名称加上捕获时所需的信息。通常,类名是您所需要的全部(用于catch语句)。通常包括消息和堆栈跟踪。(虽然它们对于捕获到的异常都是无用的。)但有时需要更多的信息。扩展类是一种很好的方法

如果性能很重要(使用SQL时可能不会),请覆盖fillInStackTrace。填充堆栈跟踪很慢,如果您计划捕获异常,则不需要它


不扩展RunTimeException;您不会被警告可能抛出它的方法,您可能会忘记捕获它。

这些是
RuntimeException
s。参考:它甚至可以不经尝试就编译吗?这个问题似乎还不清楚。你能告诉我,你所说的“即使它只是被宣布”是什么意思吗?这里你可以举一个例子,说明“咯咯笑”的性观念总是让我发笑!