Am'm încercat să-mi definesc propria excepție de clasă cel mai simplu mod, și aceasta este ceea ce am'm:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Aceasta este ceea ce compilatorul Java spune:
cannot find symbol: constructor MyException(java.lang.String)
Am avut un sentiment că acest constructor are să fi moștenit de la java.lang.Excepție
, e't-l?
Nu, nu't "mostenesc" non-default constructori, aveți nevoie pentru a defini o lua un Șir în clasa ta. De obicei folosesc super(mesaj) în constructorul a invoca părinte constructor. De exemplu, ca aceasta:
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
Un tipic personalizate excepție I'd defini este ceva de genul:
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable throwable) {
super(message, throwable);
}
}
Eu chiar crea un șablon folosind Eclipse deci eu nu't trebuie să scrie toate lucrurile de peste si peste din nou.
Dacă utilizați cea mai nouă clasă de dialog în Eclipse puteți seta doar Superclasa domeniul a java.lang.Excepție
și verificați "Constructori de superclasa" și va genera următoarele:
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
}
}
Ca răspuns la întrebarea de mai jos nu se suna super()` în defualt constructor, Oracle are să spun:
Notă: Dacă un constructor nu invocă explicit o superclasa constructor, compilatorul Java introduce automat un apel la nici un argument constructor din superclasa.
Motivul pentru acest lucru este explicat în Moștenire articol de Platforma Java care spune:
"O subclasă moștenește toți membrii (câmpuri, metode, și imbricate clase) din superclasa. Constructori nu sunt membri ai, astfel încât acestea nu sunt moștenite de subclase, dar constructorul de superclasa pot fi invocate de subclasa."
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());
}
}
}
Excepție clasa are doi constructori