Pengecualian dan Penanganan Pengecualian

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

Dalam banyak kasus, pengecualian dapat dilemparkan bukan dengan metode yang telah dipanggil oleh kode Anda secara langsung, tetapi dengan metode lain lebih jauh ke bawah dalam tumpukan panggilan. Ketika pengecualian dilemparkan, CLR akan melepas tumpukan, mencari metode dengan blok catch untuk jenis pengecualian tertentu, dan itu akan menjalankan catch blok pertama yang ditemukannya. Jika tidak menemukan catch blok yang sesuai di mana saja 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("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Gambaran Umum Pengecualian

Pengecualian memiliki properti berikut:

  • Pengecualian adalah jenis yang semuanya pada akhirnya berasal dari System.Exception.
  • Gunakan blok try di sekitar pernyataan yang mungkin melemparkan pengecualian.
  • Setelah pengecualian terjadi di blok try, alur kontrol melompat ke handler pengecualian terkait pertama yang ada di mana saja dalam tumpukan panggilan. Di C#, kata kunci catch digunakan untuk menentukan handler pengecualian.
  • Jika tidak ada pengecualian handler untuk pengecualian tertentu hadir, program akan berhenti mengeksekusi dengan pesan kesalahan.
  • Jangan menangkap pengecualian kecuali Anda dapat menanganinya dan meninggalkan aplikasi dalam keadaan yang diketahui. Jika Anda menangkap System.Exception, tangkap kembali menggunakan kata kunci throw di akhir blok catch.
  • Jika blok catch mendefinisikan variabel pengecualian, Anda dapat menggunakannya untuk mendapatkan informasi selengkapnya tentang jenis pengecualian yang terjadi.
  • Pengecualian dapat dihasilkan secara eksplisit oleh program dengan menggunakan kata kunci throw.
  • Objek pengecualian berisi informasi terperinci tentang kesalahan tersebut, seperti status tumpukan panggilan dan deskripsi teks kesalahan.
  • Kode dalam blok finally dijalankan terlepas dari apakah pengecualian dilemparkan. Gunakan blok finally untuk merilis sumber daya, misalnya untuk menutup aliran 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 Kursus 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