自作 - Javaでカスタム例外タイプを作成するには?




例外クラス 自作 c++ (6)

可能な重複:
私は自分で例外を書くことはできますか?

私はJavaでカスタム例外を作成したいと思いますが、どうすればいいですか?

...

try{

...

String word=reader.readLine();

if(word.contains(" "))
  /*create custom exception*/

}
catch(){

throw new...例外をthrow new...てカスタム例外を作成すると、 unreported exception...must be caught or declared to be thrownを取得しますunreported exception...must be caught or declared to be thrown


Exception(チェックされた例外の場合)またはExceptionのサブクラス、RuntimeException(実行時例外の場合)またはRuntimeExceptionのサブクラスを拡張するクラスを作成するだけで済みます。

次に、あなたのコードでは、

if (word.contains(" "))
    throw new MyException("some message");
}

Javaチュートリアルを読んでください。 これは、すべてのJava開発者が知っておく必要がある基本的なものですhttp://docs.oracle.com/javase/tutorial/essential/exceptions/ : http://docs.oracle.com/javase/tutorial/essential/exceptions/


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からExceptionするクラスを作成する必要があり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);
    }
}

あなたの質問では、この新しい例外をチェックするかチェックしないかを指定していません。

hereからわかるように、2つのタイプが異なります。

  • チェックされた例外は、メソッドを呼び出す開発者が処理する必要がある問題のある状況にフラグを立てるためのものです。 そのような例外から回復することは可能でなければなりません。 これの良い例は、 FileNotFoundExceptionです。 これらの例外はExceptionサブクラスです。

  • チェックされていない例外は、コードのバグ、つまり回復できないかもしれない予期しない状況を表すためのものです。 NullPointerExceptionは古典的な例です。 これらの例外は、 RuntimeException

チェックされた例外 、それをキャッチしてそれに応じて処理するか、またはそれを呼び出したメソッドに投げることによって、呼び出し側のメソッドによって処理されなければなりません 。 チェックされていない例外は、それが可能であっても捕まえることを目的としたものではありません。


java.lang.Exception継承して独自の例外を作成することができます。これを行うのに役立つ例を次に示します。


例外を他の場所で新しいクラスとして定義する必要があります

public class YourCustomException extends Exception{

//Required inherited methods here
}

その後、あなたはあなたの好きなだけYourCustomExceptionをスローしてキャッチすることができます。


例外を作成して投げることができるので

if ( word.contains(" ") )
{
     throw new RuntimeException ( "Word contains one or more spaces" ) ;
}

より正式なものにしたい場合は、Exceptionクラスを作成することができます

class SpaceyWordException extends RuntimeException
{

}

いずれにしても、 RuntimeExceptionを使用すると、新しいExceptionがチェックされなくなります。







exception