Bagikan melalui


Pengecualian dan Penanganan Pengecualian

Fitur penanganan pengecualian bahasa C# membantu Anda menangani situasi tak terduga atau luar biasa yang terjadi saat program berjalan. Penanganan pengecualian menggunakan kata kunci try, catch, dan finally untuk mencoba tindakan yang mungkin tidak berhasil, untuk menangani kegagalan ketika Anda merasa perlu melakukannya, dan untuk merapikan sumber daya setelahnya. Pengecualian dapat dihasilkan oleh runtime bahasa umum (CLR), .NET, pustaka pihak ketiga, atau kode pada aplikasi. Pengecualian dibuat dengan menggunakan throw kata kunci.

Dalam banyak kasus, pengecualian dapat dipicu bukan oleh metode yang dipanggil secara langsung oleh kode Anda, melainkan oleh metode lain yang lebih jauh ke bawah di tumpukan panggilan. Ketika pengecualian dilemparkan, CLR akan membuka tumpukan, mencari metode dengan blok catch untuk jenis pengecualian tertentu, dan CLR akan menjalankan blok pertama catch yang ditemukannya. Jika tidak menemukan blok yang sesuai catch di mana pun dalam tumpukan panggilan, itu akan mengakhiri proses dan menampilkan pesan kepada pengguna.

Dalam contoh ini, metode menguji pembagian dengan nol dan menangkap kesalahan. Tanpa penanganan pengecualian, program ini akan berakhir dengan kesalahan DivideByZeroException tidak tertangani .

public class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new DivideByZeroException();
        return x / y;
    }

    public static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine($"{a} divided by {b} = {result}");
        }
        catch (DivideByZeroException)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Gambaran Umum Pengecualian

Pengecualian memiliki properti berikut:

  • Pengecualian adalah jenis yang pada akhirnya berasal dari System.Exception.
  • try Gunakan blok di sekitar pernyataan yang mungkin melemparkan pengecualian.
  • Setelah terjadi pengecualian di blok try, alur kontrol melompat ke pengendali pengecualian pertama yang terkait yang ada di mana saja dalam tumpukan panggilan. Di C#, catch kata kunci digunakan untuk menentukan handler pengecualian.
  • Jika tidak ada handler pengecualian untuk pengecualian tertentu yang ada, program berhenti mengeksekusi dengan pesan kesalahan.
  • Jangan menangkap pengecualian kecuali Anda dapat menanganinya dan meninggalkan aplikasi dalam kondisi yang dikenal. Jika Anda menangkap System.Exception, lempar kembali menggunakan kata kunci throw di akhir blok catch.
  • catch Jika blok mendefinisikan variabel pengecualian, Anda dapat menggunakannya untuk mendapatkan informasi selengkapnya tentang jenis pengecualian yang terjadi.
  • Pengecualian dapat dihasilkan secara eksplisit oleh program dengan menggunakan throw kata kunci.
  • Objek pengecualian berisi informasi terperinci tentang kesalahan, seperti status tumpukan panggilan dan deskripsi teks kesalahan.
  • Kode dalam finally blok dijalankan terlepas dari apakah pengecualian dilemparkan. Gunakan blok finally untuk merilis sumber daya, misalnya untuk menutup stream atau file apa pun yang dibuka di blok try.
  • Pengecualian terkelola di .NET diimplementasikan di atas mekanisme penanganan pengecualian terstruktur Win32. Untuk informasi selengkapnya, lihat Penanganan Pengecualian Terstruktur (C/C++) dan Pengantar Singkat tentang Kedalaman Penanganan Pengecualian Terstruktur Win32.

Spesifikasi Bahasa C#

Untuk informasi selengkapnya, lihat Pengecualian dalam Spesifikasi Bahasa C#. Spesifikasi bahasa adalah sumber definitif untuk sintaks dan penggunaan C#.

Lihat juga