可能な重複:
自分で例外を作成するにはどうすればよいですか?
Javaでカスタム例外を作成したいのですが、どうすればよいですか。
...
try{
...
String Word=reader.readLine();
if(Word.contains(" "))
/*create custom exception*/
}
catch(){
throw new...
を使用してカスタム例外を作成すると、エラーunreported exception...must be caught or declared to be thrown
が発生します。
次のように、 Exception
クラスを拡張するカスタム例外クラスを作成できます。
class WordContainsException extends Exception
{
// Parameterless Constructor
public WordContainsException() {}
// Constructor that accepts a message
public WordContainsException(String message)
{
super(message);
}
}
使用法:
try
{
if(Word.contains(" "))
{
throw new WordContainsException();
}
}
catch(WordContainsException ex)
{
// Process message however you would like
}
Exception
から拡張するクラスを作成する必要があります。これは次のようになります。
public class MyOwnException extends Exception {
public MyOwnException () {
}
public MyOwnException (String message) {
super (message);
}
public MyOwnException (Throwable cause) {
super (cause);
}
public MyOwnException (String message, Throwable cause) {
super (message, cause);
}
}
あなたの質問は、この新しい例外がチェックされるべきかチェックされないべきかを特定していません。
ご覧のとおり ここ には、2つのタイプが異なります。
チェック付き例外は、メソッドを呼び出す開発者が対処すべき問題のある状況にフラグを立てるためのものです。そのような例外から回復することは可能であるはずです。この良い例は FileNotFoundException です。これらの例外は Exception のサブクラスです。
未チェックの例外は、コード内のバグ、つまり回復できない可能性があるという予期しない状況を表すことを目的としています。 A NullPointerException は古典的な例です。これらの例外は RuntimeException のサブクラスです。
チェックされた例外は、それをキャッチしてそれに応じて動作することによって、あるいはそれを呼び出しメソッドにスローすることによって、呼び出しメソッドによって処理される必要があります。未チェックの例外は、それが可能であってもキャッチされることを意味していません。
カスタム例外クラスを作成することに関する素晴らしい回答。あなたが問題の例外を再利用するつもりなら、私は彼らの答え/アドバイスに従うでしょう。ただし、メッセージとともにスローされるクイック例外だけが必要な場合は、その場で基本例外クラスを使用できます。
String Word=reader.readLine();
if(Word.contains(" "))
/*create custom exeception*/
throw new Exception("My one time exception with some message!");
}
あなただけの例外を作成してスローすることができるのでそれは同じくらい簡単かもしれません
if ( Word.contains(" ") )
{
throw new RuntimeException ( "Word contains one or more spaces" ) ;
}
もっと正式になりたいのであれば、Exceptionクラスを作成することができます。
class SpaceyWordException extends RuntimeException
{
}
いずれにせよ、あなたがRuntimeException
を使う場合、あなたの新しいException
はチェックされないでしょう。
慎重なプログラマーは特別な出来事のためにしばしば例外を投げるので、IllegalArgumentException
と IllegalStateException
とUnsupportedOperationException
のようないくつかの一般目的の例外を言及する価値があります。 IllegalArgumentException
が私のお気に入りです。
throw new IllegalArgumentException("Word contains blank: " + Word);
Exception(チェック例外の場合)、またはExceptionのサブクラス、またはRuntimeException(ランタイム例外の場合)、またはRuntimeExceptionのサブクラスを拡張するクラスを作成するだけです。
それで、あなたのコードでは、単に使用してください
if (Word.contains(" "))
throw new MyException("some message");
}
Javaチュートリアルを読んでください。これは、すべてのJava開発者が知っておくべき基本事項です。 http://docs.Oracle.com/javase/tutorial/essential/exceptions/
あなたは他の場所であなたの例外を新しいクラスとして定義しなければなりません
public class YourCustomException extends Exception{
//Required inherited methods here
}
それからYourCustomExceptionをスローしてキャッチすることができます。
Java.lang.Exception
から継承することで、独自の例外を作成できます。ここで は、そうするのに役立つ例です。