내 자신의 예외 클래스를 가장 쉬운 방법으로 정의하려고하는데 이것이 내가 얻는 것입니다.
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
이것은 Java 컴파일러가 말하는 것입니다.
cannot find symbol: constructor MyException(java.lang.String)
이 생성자가에서 상속 받아야한다는 느낌 java.lang.Exception
이 들지 않습니까?
답변
아니요, 기본이 아닌 생성자를 “상속”하지 않으므로 클래스에서 문자열을 사용하는 생성자를 정의해야합니다. 일반적으로 super(message)
생성자에서 부모 생성자를 호출하는 데 사용합니다. 예를 들면 다음과 같습니다.
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
답변
내가 정의한 일반적인 사용자 정의 예외는 다음과 같습니다.
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable throwable) {
super(message, throwable);
}
}
Eclipse를 사용하여 템플릿을 작성하기 때문에 모든 내용을 반복해서 쓸 필요가 없습니다.
답변
Eclipse에서 새 클래스 대화 상자를 사용하는 경우 java.lang.Exception
수퍼 클래스 필드를 설정하고 “수퍼 클래스의 생성자”를 확인하면 다음이 생성됩니다.
package com.example.exception;
public class MyException extends Exception {
public MyException() {
// TODO Auto-generated constructor stub
}
public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
}
super()
defualt 생성자를 호출하지 않는 것에 대한 아래 질문에 대한 응답으로 Oracle은 다음과 같이 말합니다 .
참고 : 생성자가 명시 적으로 수퍼 클래스 생성자를 호출하지 않으면 Java 컴파일러는 수퍼 클래스의 인수가없는 생성자에 대한 호출을 자동으로 삽입합니다.
답변
이에 대한 이유 는 Java 플랫폼 의 상속 기사에 설명되어 있습니다 .
“하위 클래스는 수퍼 클래스에서 모든 멤버 (필드, 메소드 및 중첩 클래스)를 상속합니다. 생성자는 멤버 가 아니므로 서브 클래스에 의해 상속되지는 않지만 서브 클래스에서 수퍼 클래스의 생성자를 호출 할 수 있습니다.”
답변
package customExceptions;
public class MyException extends Exception{
public MyException(String exc)
{
super(exc);
}
public String getMessage()
{
return super.getMessage();
}
}
import customExceptions.MyException;
public class UseCustomException {
MyException newExc=new MyException("This is a custom exception");
public UseCustomException() throws MyException
{
System.out.println("Hello Back Again with custom exception");
throw newExc;
}
public static void main(String args[])
{
try
{
UseCustomException use=new UseCustomException();
}
catch(MyException myEx)
{
System.out.println("This is my custom exception:" + myEx.getMessage());
}
}
}
답변
예외 클래스에는 두 개의 생성자가 있습니다
public Exception()
-추가 정보없이 예외를 생성합니다. 예외의 성격은 일반적으로 클래스 이름에서 유추됩니다.public Exception(String s)
-지정된 오류 메시지로 예외를 구성합니다. 세부 메시지는이 특정 예외에 대한 오류 조건을 설명하는 문자열입니다.
답변
Exception에서 상속하면 String을 매개 변수로 사용하는 생성자를 제공해야합니다 (오류 메시지가 포함됨).