web-dev-qa-db-ja.com

RuntimeExceptionをスローする方法(「シンボルが見つかりません」)

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

throw RuntimeException(msg);

しかし、NetBeansでビルドすると、次のエラーが表示されます。

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

何かをインポートする必要がありますか?スペルを間違えていますか?私は何か愚かなことをしているに違いないと思う:-(

32
Greg

throw new RuntimeException(msg);

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

103
j flemm

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

throw new RuntimeException();

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

RuntimeException e = new RuntimeException();
throw e;

両方のコードスニペットは同等です。

完全性のためのチュートリアルへのリンク。

35
jjnguy

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

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

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

  • メソッドシグネチャは、RuntimeExceptionがスローされる可能性があることを宣言する必要はありません。
  • そのメソッドの呼び出し元は、例外をキャッチしたり、何らかの方法でそれを認めたりする必要はありません。
  • 後でコードを使用しようとする開発者は、注意深く見ない限りこの問題を予期せず、コードのメンテナンスの負担が増大します。
15
Dean J

投げる前にインスタンス化する必要があります

throw new RuntimeException(arg0) 

PS:Netbeans IDEはコンパイル時エラーをすでに指摘しているはずです

6
Sudhakar
throw new RuntimeException(msg); // notice the "new" keyword
4
naikus

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

throw new RuntimeException(msg);
3
RHSeeger
throw new RuntimeException(msg);

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

1
SSpoke

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

1
dillip pattnaik

新しいキーワードを使用して、常にインスタンス(新しいオブジェクト)を作成し、それをスローします。メソッドとは呼ばれません

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);
0
Keshav Gera