2017-05-01 1 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;} 

} 

클래스 사람 출력 난 당신이 슈퍼에 메시지를 전달하는 PersonException 생성자에

null 
+0

나는 자바라는 것을 알고 있지만 이름을 설정하는 방법과 당신이 그들을 얻는 방법은 틀릴 수도있다. SET (생성자 또는 기타) this.name = name; GET : return name; 예외 메시지 같은 ... 나는 당신이 당신의 자신의 규칙을 따라야한다고 생각하고 게터를 위해 좋아하세요 : 반환 this.name을; –

+0

흠, 명명 프로세스가 ........와 관련이 없다고 생각합니다. –

답변

4

을 얻을

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입니다. 하지만이를 인쇄 할 때 null을 예상대로 인쇄하는 PersonException 메시지 필드의 값을 얻게됩니다. 수정하려면

  1. PersonException에 메시지 필드가 없어야하고 수퍼 클래스 getMessage() 메소드를 사용해야하며 PersonException 클래스에서 getter 및 setter가 필요하지 않습니다. 이는 권장되는 접근 방법입니다.
  2. 또는 PersonException 메시지 필드에 메시지를 할당하고 getter를 사용하여 메시지를 검색해야합니다.
관련 문제