I'm mencoba untuk mendefinisikan saya sendiri kecuali kelas cara termudah, dan ini adalah apa yang saya'm mendapatkan:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Ini adalah apa yang Java compiler mengatakan:
cannot find symbol: constructor MyException(java.lang.String)
Aku punya perasaan bahwa ini konstruktor harus diwariskan dari jawa.lang.Pengecualian
, isn't itu?
Tidak, anda don't "mewarisi" non-default konstruktor, anda perlu menentukan satu mengambil String di kelas anda. Biasanya anda menggunakan super(pesan)
dalam konstruktor anda untuk memanggil orang tua konstruktor. Misalnya, seperti ini:
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
Khas pengecualian kustom I'd tentukan adalah sesuatu seperti ini:
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable throwable) {
super(message, throwable);
}
}
Aku bahkan membuat template menggunakan Eclipse jadi saya don't harus menulis semua hal-hal yang lebih dan lebih lagi.
Jika anda menggunakan dialog kelas baru di Eclipse anda hanya dapat mengatur Superclass lapangan untuk jawa.lang.Pengecualian
dan memeriksa "Konstruktor dari superclass" dan itu akan menghasilkan berikut ini:
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
}
}
Dalam menanggapi pertanyaan di bawah ini tentang tidak memanggil super()
dalam defualt konstruktor, Oracle telah mengatakan:
Catatan: Jika sebuah konstruktor tidak secara eksplisit memanggil superclass constructor, Java compiler secara otomatis menyisipkan panggilan ke no-argumen constructor dari superclass.
Alasan untuk hal ini dijelaskan dalam Warisan artikel dari Platform Java yang mengatakan:
"Sebuah subclass mewarisi semua anggota (bidang, metode, dan bersarang kelas) dari superclass. Konstruktor bukan anggota, sehingga mereka tidak diwarisi oleh subkelasnya, tapi konstruktor dari superclass dapat dipanggil dari subclass."
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());
}
}
}
Pengecualian kelas memiliki dua konstruktor
publik Pengecualian ()
- Ini konstruksi Pengecualian tanpa informasi tambahan.Sifat pengecualian biasanya disimpulkan dari nama kelas.publik Pengecualian(String s)
-- Konstruksi terkecuali dengan yang ditentukan pesan kesalahan.Detail pesan adalah String yang menggambarkan kondisi kesalahan untuk ini pengecualian tertentu.