Hierarki class Exception
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 59 dari 87.
Sistem penanganan exception Java dibangun berdasarkan hierarki class yang tersusun rapi dan berakar pada class Throwable. Memahami hierarki ini membantumu menangkap dan menangani exception dengan lebih efektif.
Di bagian paling atas terdapat Throwable, induk dari semua exception dan error. Throwable memiliki dua subclass langsung:
Throwable
├── Error // Masalah serius (jangan tangkap ini)
└── Exception // Masalah yang bisa ditangani
└── RuntimeException // Exception yang tidak diperiksaerror menunjukkan masalah serius yang sebaiknya tidak coba ditangani oleh aplikasi, seperti OutOfMemoryError atau StackOverflowError. Masalah ini menunjukkan adanya masalah mendasar pada JVM itu sendiri.
Exception adalah cabang yang paling sering kamu gunakan. Cabang ini terbagi menjadi dua kategori: exception yang diperiksa (subclass langsung dari Exception) dan exception yang tidak diperiksa (subclass dari RuntimeException).
// Class exception yang umum
Exception
├── IOException // Masalah file atau jaringan
├── SQLException // Masalah database
└── RuntimeException
├── NullPointerException
├── ArrayIndexOutOfBoundsException
└── IllegalArgumentExceptionKarena exception adalah class, exception mengikuti aturan pewarisan. Saat kamu menangkap tipe exception induk, kamu juga menangkap semua turunannya:
try {
// beberapa kode
} catch (Exception e) {
// Menangkap SEMUA exception (biasanya terlalu luas)
}try {
// beberapa baris kode
} catch (RuntimeException e) {
// Hanya menangkap pengecualian runtime dan subclass-nya
}Hierarki ini memungkinkan kamu menentukan penanganan error secara spesifik atau umum sesuai kebutuhan, dan menjadi dasar untuk membuat exception kustommu sendiri.
Tantangan
MudahMari buat penganalisis exception yang menunjukkan cara kerja hierarki exception Java dalam praktik! Kamu akan membuat sistem yang menangkap exception pada tingkat kekhususan yang berbeda dan melaporkan jenis yang tertangkap.
Kamu akan menyusun kodemu dalam tiga file:
ExceptionThrower.java: Buat class yang dapat memicu berbagai jenis exception berdasarkan input. Class-mu harus memiliki tiga fungsi static:triggerRuntime(String type)- Berdasarkan string jenisnya, lempar berbagai exception runtime:- Jika jenisnya
"null", lemparNullPointerExceptiondengan pesan"Null value encountered" - Jika jenisnya
"index", lemparArrayIndexOutOfBoundsExceptiondengan pesan"Invalid index" - Jika jenisnya
"argument", lemparIllegalArgumentExceptiondengan pesan"Bad argument"
triggerArithmetic()- LemparArithmeticExceptiondengan pesan"Division error"triggerGeneric()- LemparIllegalStateExceptiondengan pesan"Generic runtime error"(hierarkinya adalah Exception > RuntimeException > IllegalStateException)- Jika jenisnya
ExceptionAnalyzer.java: Buat class yang menangkap exception pada berbagai tingkat hierarki dan mengidentifikasi exception yang tertangkap. Sertakan fungsi static berikut:analyzeSpecific(String type)- PanggilExceptionThrower.triggerRuntime(type)di dalam blok try. Gunakan blok catch terpisah untukNullPointerException,ArrayIndexOutOfBoundsException, danIllegalArgumentException. Untuk masing-masing, cetak:Caught specific: [exception class simple name]diikutiMessage: [exception message]analyzeWithParent()- PanggilExceptionThrower.triggerArithmetic()di dalam blok try. Tangkap exception tersebut menggunakanRuntimeException(jenis induknya). Cetak:Caught via parent: RuntimeExceptiondiikutiActual type: [exception class simple name]analyzeWithGrandparent()- PanggilExceptionThrower.triggerGeneric()di dalam blok try. Tangkap exception tersebut menggunakanException(tingkatnya lebih tinggi lagi dalam hierarki). Cetak:Caught via grandparent: ExceptiondiikutiActual type: [exception class simple name]Main.java: Satukan penganalisis exception-mu! Kamu akan menerima satu input: string jenis exception (yaitu"null","index", atau"argument").Pertama, cetak
=== Specific Catch ===dan panggilanalyzeSpecificdengan inputmu.Lalu cetak satu baris kosong,
=== Parent Catch ===, dan panggilanalyzeWithParent.Terakhir, cetak satu baris kosong,
=== Grandparent Catch ===, dan panggilanalyzeWithGrandparent.
Kamu akan menerima satu input: jenis exception yang akan dipicu ("null", "index", atau "argument").
Gunakan e.getClass().getSimpleName() untuk mendapatkan nama class exception dan e.getMessage() untuk mengambil pesannya. Tantangan ini menunjukkan bahwa menangkap jenis exception induk juga menangkap semua turunannya. Ini adalah konsep penting saat menentukan seberapa spesifik penanganan exception yang perlu kamu gunakan!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
// TODO: Cetak "=== Specific Catch ===" dan panggil ExceptionAnalyzer.analyzeSpecific(type)
// TODO: Cetak baris kosong, lalu "=== Parent Catch ===", kemudian panggil ExceptionAnalyzer.analyzeWithParent()
// TODO: Cetak baris kosong, lalu "=== Grandparent Catch ===", kemudian panggil ExceptionAnalyzer.analyzeWithGrandparent()
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online