如何抛出RuntimeException("找不到符号")

Gre*_*reg 32 java exception-handling runtimeexception

我试图在我的代码中抛出异常,如下所示:

throw RuntimeException(msg);
Run Code Online (Sandbox Code Playgroud)

但是,当我在NetBeans中构建时,我收到此错误:

C:\....java:50: cannot find symbol
symbol  : method RuntimeException(java.lang.String)
location: class ...
        throw RuntimeException(msg);
1 error
Run Code Online (Sandbox Code Playgroud)

我需要导入一些东西吗?我拼错了吗?我敢肯定我一定要做一些哑巴:-(

j f*_*emm 105

throw new RuntimeException(msg);

你需要new在那里.它正在创建一个实例并抛出它,而不是调用方法.

  • @PedroD因为检查的异常是失败的实验?还是您在问为什么有人要抛出“原始” RuntimeException而不是合理的子类? (3认同)

jjn*_*guy 35

一种ExceptionObject像Java中任何其他.您需要使用new关键字来创建一个新的Exception,然后才能throw吧.

throw new RuntimeException();
Run Code Online (Sandbox Code Playgroud)

您也可以选择执行以下操作:

RuntimeException e = new RuntimeException();
throw e;
Run Code Online (Sandbox Code Playgroud)

两个代码段都是等效的.

链接到教程的完整性.


Dea*_*n J 15

正如其他人所说的那样,在抛出之前实例化对象.

只是想加一点; 抛出RuntimeException是非常罕见的.API中的代码抛出此类的子类是正常的,但通常,应用程序代码会抛出异常,或者扩展Exception而不是RuntimeException.

而在回想起来,我错过了增加的原因,为什么你使用异常,而不是RuntimeException的; @Jay,在下面的评论中,添加了有用的位.RuntimeException不是一个经过检查的异常;

  • 方法签名不必声明可能抛出RuntimeException.
  • 该方法的调用者不需要捕获异常,或以任何方式确认它.
  • 试图以后使用您的代码的开发人员不会预见到这个问题,除非他们仔细查看,否则会增加代码的维护负担.


Sud*_*kar 6

你必须在扔之前实例化它

throw new RuntimeException(arg0) 
Run Code Online (Sandbox Code Playgroud)

PS:有趣的是,Netbeans IDE应该已经指出了编译时错误