Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 (extends Exception) untuk kondisi saat tiket tidak lagi tersedia. Pengecualianmu harus menerima pesan di konstruktornya dan meneruskannya ke class induk menggunakan super(message).
  • InvalidSeatException.java: Buat pengecualian tidak terperiksa khusus (extends RuntimeException) 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), lempar TicketSoldOutException dengan pesan "No tickets remaining". Jika nomor kursi kurang dari 1 atau lebih besar dari jumlah total kursi, lempar InvalidSeatException dengan pesan "Seat [seatNumber] does not exist". Jika tidak, kurangi jumlah kursi yang tersedia sebanyak 1 dan cetak Booked 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 TicketBooth dengan jumlah total kursi yang diberikan. Lalu, coba pesan nomor kursi yang ditentukan di dalam blok try-catch. Karena TicketSoldOutException adalah pengecualian terperiksa, kamu harus menanganinya. Tangkap TicketSoldOutException terlebih dahulu dan cetak Booking failed: [exception message]. Lalu tangkap InvalidSeatException dan 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]"
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online