Java에서 사용자 정의 예외 클래스를 정의하는 가장 쉬운 방법은 무엇입니까?
가장 쉬운 방법으로 자신의 예외 클래스를 정의하려고 합니다.이러한 결과는 다음과 같습니다.
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)
저는 이 건설업자가 상속받아야 한다고 느꼈어요, 그렇죠?
아니요, 기본이 아닌 생성자를 "계승"하지 않고 클래스에서 문자열을 사용하는 생성자를 정의해야 합니다.일반적으로 사용하는 것은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에서 새 클래스 대화상자를 사용하는 경우 Superclass 필드를 다음과 같이 설정할 수 있습니다.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()
Oracle은 다음과 같이 말합니다.
주의: 컨스트럭터가 명시적으로 슈퍼클래스 컨스트럭터를 호출하지 않으면 Java 컴파일러는 자동으로 슈퍼클래스의 인수 없는 컨스트럭터에 콜을 삽입합니다.
그 이유는 Java Platform의 상속 기사에서 다음과 같이 설명되어 있습니다.
"하위 클래스는 슈퍼 클래스에서 모든 멤버(필드, 메서드 및 중첩된 클래스)를 상속합니다.컨스트럭터는 멤버가 아니기 때문에 서브클래스에 의해 상속되지 않지만 슈퍼클래스의 컨스트럭터는 서브클래스에서 호출할 수 있습니다.
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)
-- 지정된 오류 메시지와 함께 예외를 생성합니다.상세 메시지는 이 특정 예외의 오류 조건을 설명하는 문자열입니다.
예외에서 상속하는 경우 String을 매개 변수로 사용하는 생성자를 제공해야 합니다(이 생성자에는 오류 메시지가 포함됩니다).
또한 예외를 발생시키는 가장 쉬운 방법을 잊지 마십시오(클래스를 만들 필요가 없습니다).
if (rgb > MAX) throw new RuntimeException("max color exceeded");
언급URL : https://stackoverflow.com/questions/3776327/how-to-define-custom-exception-class-in-java-the-easiest-way
'source' 카테고리의 다른 글
vue에서 사용자 지정 클래스 인스턴스화 (0) | 2022.07.27 |
---|---|
Vue.js 응용 프로그램은 Gitlab 페이지에서 실행되지 않습니다. (0) | 2022.07.27 |
「」의 개요WINAPI'는 주요 기능에서 무엇을 의미합니까? (0) | 2022.07.27 |
롬복 주석은 Intelliz 아이디어로 컴파일되지 않습니다. (0) | 2022.07.27 |
JWT 토큰은 어디에 보관해야 하나요? (0) | 2022.07.27 |