0

私はオンラインで検索していくつかの本を調べてきましたが、与えられた例は限られており、ユーザー定義の例外にはまだ疑問があります.

例として次のコードを使用します。

//Conventional way of writing user-defined exception
class IdException extends Exception  

{
    public IdException(String s)
    {
        super(s);
    }   
}

class Product
{
    String id = new String();
    public Product(String _id) throws IdException
    {
        id = _id;

        //Check format of id
        if (id.length() < 5)
            throw(new IdException(_id));
    }
}

ユーザー定義の例外を記述する従来の方法は、ほぼ常に同じようです。ユーザー定義の例外のコンストラクターでは、常に を呼び出しますsuper(msg)。これは私の中で疑問を引き起こします: ほとんどの例外がこのように実装されている場合、これらすべての例外の間にどのような違いがありますか?

たとえば、複数のユーザー定義の例外を設定できますが、すべて同じことを行っているように見えますが、違いはありません。(これらの例外には実装がありません。何が機能するのでしょうか?)

例:

class IdException extends Exception
{
    public IdException(String s)
    {
        super(s);
    }   
}

class NameException extends Exception
{
    public NameException(String s)
    {
        super(s);
    }   
}

class ItemException extends Exception
{
    public ItemException(String s)
    {
        super(s);
    }   
}

QUE:では、(たとえば)id例外クラス内のチェックを実装するべきではありませんか? すべての例外クラスが同じことをしているように見えない場合 (または何もしていない場合)。

例外でチェックを実装する例:

class IdException extends Exception     {
    public IdException(String s)
    {
        super(s);
        //Can we either place the if-statements here to check format of id ?
    }
    //Or here ? 
}
4

4 に答える 4

2

理想的には、例外内にビジネス ロジックを実装しないでください。例外は、例外的な動作に関する情報を伝えます。カスタム例外では、その情報をカスタマイズできます。

カスタム例外を記述するためのベスト プラクティスを見つけます。

于 2014-07-24T08:53:34.033 に答える
0

Java にはすでに非常に多くの例外が定義されています。すべて同じことをします: to notify user about the problem in code.

ここで、例外が 1 つしかない場合、例外がスローされたときにどのようなエラーが発生するかを考えてみましょう。結局のところ、名前は非常に重要です。

于 2014-07-24T08:56:23.163 に答える
0

例外の例を取り上げると、提供されたデータをフォーマットして、より複雑なメッセージを作成します。

public IdException(String id, String detail) {
    super(String.format("The id \"%s\" is invalid: %s", id, detail));
}

throw new IdException(_id, "Id too short.");

このように、指定された値 ( ) と詳細メッセージを文字列で一緒にIdException提供する以外に、クラスには実際のロジックがないため、デバッグとログは読みやすく、コード自体も簡単です。 ide.getMessage()

Id_idに問題があります。つまり、短すぎます。したがって、呼び出し元にスローします。

また、コードでさまざまな種類の例外をスローすると、呼び出し元のコードで各例外の種類を異なる方法で処理できます。

try {
    getItem(id, name);
} catch (IdException ex) {
    fail(ex.getMessage()); // "The Id is bogus, I don't know what you want from me."
} catch (NameException ex) {
    warn(ex.getMessage()); // "The name doesn't match the Id, but here's the Item for that Id anyways"
} catch (ItemException ex) {
    fail("Duh! I reported to the dev, something happened");
    emailToAdmin(ex.getMessage()); // "The Item has some inconsistent data in the DB"
}
于 2014-07-24T08:57:32.487 に答える
-1
class MyException extends Exception{
       int x;
       MyException(int y) {
         x=y;
       }
       public String toString(){
         return ("Exception Number =  "+x) ;
      }
    }

    public class JavaException{
       public static void main(String args[]){
      try{
           throw new MyException(45);

      }
     catch(MyException e){
        System.out.println(e) ;
     }
    }
}

output: Exception Number = 45
于 2019-03-12T14:14:20.943 に答える