43

次のようなコードで例外をスローしようとしています:

throw RuntimeException(msg);

しかし、NetBeans でビルドすると、次のエラーが発生します。

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

何かをインポートする必要がありますか? スペルミスですか?私はばかげたことをしているに違いないと確信しています:-(

4

9 に答える 9

129

throw new RuntimeException(msg);

あなたnewはそこに必要です。メソッドを呼び出すのではなく、インスタンスを作成してスローしています。

于 2010-08-04T13:57:24.300 に答える
38

AnExceptionは、ObjectJava の他のものと同様です。newキーワードを使用して、新しいものを作成するException前に作成する必要がありthrowます。

throw new RuntimeException();

オプションで、次のこともできます。

RuntimeException e = new RuntimeException();
throw e;

どちらのコード スニペットも同等です。

完全を期すためにチュートリアルにリンクしてください。

于 2010-08-04T13:57:37.090 に答える
15

他の誰もが言ったように、オブジェクトをスローする前にインスタンス化します。

少し追加したかっただけです。RuntimeException をスローすることは非常にまれです。API のコードが this のサブクラスをスローするのは正常ですが、通常、アプリケーション コードは Exception をスローするか、RuntimeException ではなく Exception を拡張するものをスローします。

振り返ってみると、RuntimeException の代わりに Exception を使用する理由を追加できませんでした。@Jay は、以下のコメントに便利なビットを追加しました。RuntimeException はチェック例外ではありません。

  • メソッド シグネチャは、RuntimeException がスローされる可能性があることを宣言する必要はありません。
  • そのメソッドの呼び出し元は、例外をキャッチしたり、何らかの方法でそれを確認したりする必要はありません。
  • 後でコードを使用しようとする開発者は、注意深く調べない限り、この問題を予測できず、コードの保守負担が増大します。
于 2010-08-04T14:45:34.750 に答える
6

スローする前にインスタンス化する必要があります

throw new RuntimeException(arg0) 

PS: 興味深いことに、Netbeans IDE はすでにそのコンパイル時エラーを指摘しているはずです。

于 2010-08-04T14:00:29.347 に答える
4
throw new RuntimeException(msg); // notice the "new" keyword
于 2010-08-04T13:57:26.877 に答える
3

new他のほとんどのクラスのインスタンスを作成する場合と同じ方法を使用して、RuntimeException のインスタンスを作成する必要があります。

throw new RuntimeException(msg);
于 2010-08-04T13:57:41.837 に答える
1

他の人のために:引数としてエラーを必要とする新しいRuntimeErrorExceptionではなく、新しいRuntimeExceptionであることを確認してください。

于 2014-07-18T18:05:19.103 に答える
1
throw new RuntimeException(msg);

他の例外とは異なり、RuntimeException はプログラムを停止させない唯一の例外であると思いますが、実行を継続し、一連の例外行を出力するだけで回復できますか? 私が間違っている場合は修正してください。

于 2016-03-24T13:12:47.400 に答える
0

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 

新しいキーワード メモリ クリーンを使用する [使用してスローするため]

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {

        //do your work here..
    }
}, 1000);
于 2019-06-10T09:33:33.123 に答える