Exception Kustom
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 60 dari 87.
Exception bawaan Java mencakup banyak skenario error yang umum, tetapi terkadang kamu memerlukan exception yang khusus untuk domain aplikasimu. Exception kustom memungkinkanmu membuat tipe error yang bermakna dan menjelaskan dengan jelas apa yang salah.
Untuk membuat exception kustom, cukup perluas class exception yang sudah ada. Untuk exception yang diperiksa, perluas Exception:
public class InsufficientFundsException extends Exception {
public InsufficientFundsException(String message) {
super(message);
}
}Untuk exception yang tidak diperiksa, extend RuntimeException:
public class InvalidAgeException extends RuntimeException {
public InvalidAgeException(String message) {
super(message);
}
}Pemanggilan super(message) meneruskan pesan error ke class induk, sehingga pesan tersebut dapat diakses melalui getMessage(). Kamu kemudian dapat melempar dan menangkap exception kustommu seperti exception lainnya:
public void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException("Balance too low: " + balance);
}
balance -= amount;
}
// Menggunakannya
try {
account.withdraw(1000);
} catch (InsufficientFundsException e) {
System.out.println(e.getMessage());
}Exception kustom membuat kodemu lebih mudah dibaca dan memungkinkan pemanggil menangani kondisi error tertentu dengan cara berbeda. Exception ini sangat berguna saat membangun API atau library yang membutuhkan komunikasi error yang jelas.
Tantangan
MudahMari kita bangun sistem pemesanan tiket yang menggunakan pengecualian khusus untuk menangani berbagai situasi error! Kamu akan membuat tipe pengecualian yang bermakna dan menjelaskan dengan jelas penyebab masalah saat memesan tiket.
Kamu akan mengatur kodemu dalam empat file:
TicketSoldOutException.java: Buat pengecualian terperiksa khusus (extendsException) untuk kondisi saat tiket tidak lagi tersedia. Pengecualianmu harus menerima pesan di konstruktornya dan meneruskannya ke class induk menggunakansuper(message).InvalidSeatException.java: Buat pengecualian tidak terperiksa khusus (extendsRuntimeException) untuk kondisi saat seseorang mencoba memesan nomor kursi yang tidak valid. Pengecualian ini juga harus menerima pesan dan meneruskannya ke class induknya.TicketBooth.java: Buat class yang mengelola penjualan tiket. Loketmu harus melacak jumlah total kursi yang tersedia dan nomor kursi valid tertinggi. Sertakan:Konstruktor yang menerima jumlah total kursi yang tersedia.
Method
bookTicket(int seatNumber)yang memvalidasi pemesanan. Jika tidak ada tiket yang tersisa (jumlah kursi yang tersedia 0 atau kurang), lemparTicketSoldOutExceptiondengan pesan"No tickets remaining". Jika nomor kursi kurang dari 1 atau lebih besar dari jumlah total kursi, lemparInvalidSeatExceptiondengan pesan"Seat [seatNumber] does not exist". Jika tidak, kurangi jumlah kursi yang tersedia sebanyak 1 dan cetakBooked seat [seatNumber] successfully.Method
getAvailableSeats()yang mengembalikan jumlah kursi yang tersedia saat ini.Main.java: Satukan sistem tiketmu! Kamu akan menerima dua input: jumlah total kursi dan nomor kursi yang akan dipesan.Buat
TicketBoothdengan jumlah total kursi yang diberikan. Lalu, coba pesan nomor kursi yang ditentukan di dalam blok try-catch. KarenaTicketSoldOutExceptionadalah pengecualian terperiksa, kamu harus menanganinya. TangkapTicketSoldOutExceptionterlebih dahulu dan cetakBooking failed: [exception message]. Lalu tangkapInvalidSeatExceptiondan cetak format yang sama:Booking failed: [exception message].Setelah blok try-catch, cetak
Remaining seats: [count]menggunakan method getter.
Kamu akan menerima dua input secara berurutan: jumlah total kursi (bilangan bulat) dan nomor kursi yang akan dipesan (bilangan bulat).
Perhatikan bahwa pengecualian terperiksa mengharuskan pemanggil untuk menanganinya (dengan try-catch atau throws), sedangkan pengecualian tidak terperiksa tidak memerlukan penanganan eksplisit. Pilih tipe pengecualian berdasarkan apakah pemanggil seharusnya mengantisipasi dan menangani error tersebut!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int totalSeats = scanner.nextInt();
int seatNumber = scanner.nextInt();
// TODO: Buat TicketBooth dengan jumlah kursi yang diberikan
// TODO: Gunakan blok try-catch untuk mencoba memesan kursi
// - Tangkap TicketSoldOutException terlebih dahulu dan cetak "Booking failed: [exception message]"
// - Tangkap InvalidSeatException dan cetak "Booking failed: [exception message]"
// TODO: Setelah try-catch, cetak "Remaining seats: [count]"
}
}
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