2017-05-01 2 views
1

私自身の例外を作成し、クラスでテストしました。私がtry/catchブロックでそれを使用しようとすると、 "null"が出力されるだけで、理由はわかりません。コンストラクタのパラメータとしてメッセージを出力しても、PersonException()カスタム例外は、try/catchブロックで呼び出されたときにnullを出力します。

public static void main(String[] args) { 
       try { 
        Person pers1= addPerson("BOBfffffffffffffffffffffffff", 666); 
        System.out.println(pers1.toString()); 
       } catch (PersonException e) { 
        System.out.println(e.getMessage()); 
       } 
      } 

     private static Person addPerson(String name, int age) { 
      Person p= null; 

      p= new Person(name,age); 
      if(name.length()>20){ 
       throw new PersonException("ERROR!! name too long", p); 
      }/*if(age<1 || age>110){ 
       throw new PersonException("ERROR!!!! invalid age", p); 
      }*/ 

      return p; 
     } 

クラスPersonException

public class PersonException extends IllegalArgumentException { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private String message; 
    private Object object; 

    public PersonException(String message, Object object) { 
     super(message); 
     this.object = object; 
    } 

    public Object getObject() {return object;} 

    public void setObject(Object object) {this.object = object;} 

    public String getMessage() {return message;} 

    public void setMessage(String message) {this.message = message;} 

} 

クラスの人

public class Person { 
    private String name; 
    private int age; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public String getName() {return name;} 

    public void setName(String name) {this.name = name;} 

    public int getAge() {return age;} 

    public void setAge(int age) {this.age = age;} 

    public String toString() {return "Person [name=" + name + ", age=" + age + "]";} 

} 

私はあなたがスーパーにメッセージを渡しているPersonExceptionコンストラクタで

null 
+0

私はそれがJavaだと知っていますが、あなたが名前を設定し、それらを得る方法は間違っているかもしれませんか? SET(コンストラクタなど)this.name = name; GET:名前を返します。例外メッセージのための同じ ... は、私はあなたがあなた自身の規則に従うべきだと思うとゲッターのために好きですか: 戻りthis.nameを。 –

+0

hmmm、私はそれが命名プロセスと関係しているとは思わない........ –

答えて

4

を取得し、出力クラスのコンストラクタではなくPersonExceptionメッセージフィールドに割り当てられ、したがってフィールド値はnullです。しかし、それを印刷すると、期待どおりにnullを出力するPersonExceptionメッセージフィールドの値が得られます。

  1. PersonExceptionにメッセージフィールドを持たず、スーパークラスのgetMessage()メソッドを使用し、PersonExceptionクラスのgetterとsetterを使用する必要はありません。これは推奨される方法です。
  2. また、メッセージをPersonExceptionメッセージフィールドに割り当て、getterを使用してメッセージを取得する必要があります。
関連する問題