Saya mencoba mendefinisikan kelas pengecualian saya sendiri dengan cara termudah, dan inilah yang saya dapatkan:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Inilah yang dikatakan kompiler Java:
cannot find symbol: constructor MyException(java.lang.String)
Saya merasa bahwa konstruktor ini harus diwarisi java.lang.Exception
, bukan?
java
exception
inheritance
yegor256
sumber
sumber
if your class has no constructor, you get the default even if the superclass does not have it
Bagian terakhir tidak mungkin, kecuali superclass memiliki konstruktor default yang dapat diakses ke kelas ini (mungkin dilindungi atau dilindungi paket). Kalau tidak, Anda harus secara eksplisit memanggil salah satu konstruktor induk, atau kompilasi akan gagal.MyException(Throwable)
danMyException(String, Throwable)
konstruktor untuk mendukung chaining pengecualian dengan benar .Pengecualian khusus yang saya tentukan adalah sesuatu seperti ini:
Saya bahkan membuat template menggunakan Eclipse jadi saya tidak perlu menulis semua hal berulang kali.
sumber
Jika Anda menggunakan dialog kelas baru di Eclipse Anda bisa mengatur bidang Superclass ke
java.lang.Exception
dan centang "Konstruktor dari superclass" dan itu akan menghasilkan yang berikut:Menanggapi pertanyaan di bawah ini tentang tidak memanggil
super()
konstruktor defualt, Oracle mengatakan ini :sumber
super()
?Alasan untuk ini dijelaskan dalam artikel Warisan dari Platform Java yang mengatakan:
sumber
sumber
Kelas pengecualian memiliki dua konstruktor
public Exception()
- Ini membangun Pengecualian tanpa informasi tambahan. Sifat pengecualian biasanya disimpulkan dari nama kelas.public Exception(String s)
- Membangun pengecualian dengan pesan kesalahan yang ditentukan. Pesan detail adalah String yang menggambarkan kondisi kesalahan untuk pengecualian khusus ini.sumber
public Exception(Throwable)
danpublic Exception(String, Throwable)
. Mereka diperlukan untuk mendukung dengan benar rantai pengecualian .Jika Anda mewarisi dari Pengecualian, Anda harus menyediakan konstruktor yang menggunakan String sebagai parameter (itu akan berisi pesan kesalahan).
sumber
dan jangan lupa cara termudah untuk melempar pengecualian (Anda tidak perlu membuat kelas)
sumber