【问题标题】:How to throw RuntimeException ("cannot find symbol")如何抛出 RuntimeException(“找不到符号”)
【发布时间】:2011-03-25 06:55:25
【问题描述】:

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

throw RuntimeException(msg);

但是当我在 NetBeans 中构建时,我得到了这个错误:

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

我需要导入一些东西吗?我拼错了吗?我确定我一定是在做一些愚蠢的事情:-(

【问题讨论】:

  • 为什么要抛出 RuntimeException?
  • @JonathonFaust - 因为有时您既不想自己处理异常,也不想强迫用户处理异常。但是如果没有人处理它,应用程序应该会崩溃。在 Python 中,几乎每个异常都是运行时异常,并且每个人都喜欢它。如果你知道应该如何处理异常,你就处理它,如果你不知道,那么你就忽略它——要么你上面的人可以处理它,要么你会崩溃,这两种情况都很好。唯一不好的是记录它,否则忽略它。
  • 不要抛出运行时异常或创建 RuntimeException 的子类,因为您不想为指定方法可以抛出的异常而烦恼。 journals.ecs.soton.ac.uk/java/tutorial/java/exceptions/…
  • 需要在 throw 后加上“new”关键字。

标签: java exception-handling runtimeexception


【解决方案1】:

throw new RuntimeException(msg);

你需要new。它是创建一个实例并抛出它,而不是调用一个方法。

【讨论】:

  • @PedroD 因为检查的异常是失败的实验?或者你在问为什么有人要抛出一个 raw RuntimeException 而不是一个合理的子类?
  • 不不,检查的异常应该是您可以使用的唯一类型的 throwable。它们是您正在创建/定义的 API 的一部分。未经检查的异常应保留给无法/不应恢复的系统错误(如 NullPointer 或 OutOfMemory)。例如。如果我有一个从字符串中解析数字的函数,它应该抛出一个 checked NumberFormatException,因为预计这个函数可能会因为这个原因而失败,我可能会捕捉到并且是完全合理的从那个错误中恢复,所以应该检查它......但是如果我得到一个空指针......
  • ...我很可能是一个编程错误(一些未处理的故障情况),所以应用程序应该终止该异常,这是故意未选中。未经检查的异常预计会在程序中的任何地方发生,并且只有在我们真的知道该恢复的含义时才应该恢复,因此为什么我们必须用 try-catch 显式包围 then 并且编译器无法判断它们被抛出的位置.
  • 您还需要使用运行时异常,以防您有一个静态 {} 块,您正在执行实例化并希望在实例化失败时抛出异常。由于静态块没有 throw/throws 关键字,因此 RuntimeExceptions 在这种情况下变得合适。
【解决方案2】:

Exception 与 Java 中的任何其他 Object 一样。您需要使用new 关键字创建一个新的Exception,然后才能throw

throw new RuntimeException();

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

RuntimeException e = new RuntimeException();
throw e;

两个代码 sn-ps 是等价的。

Link to the tutorials for completeness.

【讨论】:

    【解决方案3】:

    正如其他人所说,在抛出之前实例化对象。

    只是想加一点;抛出 RuntimeException 是非常罕见的。 API 中的代码抛出 this 的子类是正常的,但通常情况下,应用程序代码会抛出 Exception,或者扩展 Exception 而不是 RuntimeException 的东西。

    回想起来,我错过了添加为什么您使用 Exception 而不是 RuntimeException 的原因; @Jay,在下面的评论中,添加了有用的部分。 RuntimeException 不是检查异常;

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

    【讨论】:

    • 同上。通常,您应该创建自己的异常来抛出,并从 Exception 继承它们。 RuntimeException 应该非常小心地使用,因为它绕过了 Java 中的正常保证,即函数必须声明它可以抛出的所有异常。
    • 这样做的一个常见情况是,如果您正在实现一个未声明任何已检查异常的现有接口。例如,编写一个网络支持的缓存,实现Map 是有意义的——但是如果在处理put()get() 时得到IOException,你将不得不抛出某种RuntimeException。 (它应该是它的一个自定义类,但它必须是一个未经检查的异常)。
    【解决方案4】:

    你必须在扔之前实例化它

    throw new RuntimeException(arg0) 
    

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

    【讨论】:

      【解决方案5】:
      throw new RuntimeException(msg); // notice the "new" keyword
      

      【讨论】:

        【解决方案6】:

        您需要使用 new 创建 RuntimeException 的实例,就像创建大多数其他类的实例一样:

        throw new RuntimeException(msg);
        

        【讨论】:

          【解决方案7】:

          仅针对其他人:确保它是新的 RuntimeException,而不是需要错误作为参数的新 RuntimeErrorException。

          【讨论】:

            【解决方案8】:
            throw new RuntimeException(msg);
            

            与任何其他异常不同,我认为 RuntimeException 是唯一不会停止程序但它仍然可以继续运行和恢复的异常,只是打印出一堆异常行?如果我错了,请纠正我。

            【讨论】:

              【解决方案9】:

              使用 new 关键字我们总是创建一个实例(新对象)并抛出它,而不是称为方法

              throw new RuntimeException("Your Message");
              
              You need the new in there. It's creating an instance and throwing it, not calling a method.
              
              int no= new Scanner().nextInt();   // we crate an instance using new keyword and throwing it 
              

              使用新的关键字 memory clean [因为 use and throw]

              new Handler().postDelayed(new Runnable() {
                  @Override
                  public void run() {
              
                      //do your work here..
                  }
              }, 1000);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-12-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多