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 kuncicatch
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 kuncithrow
di akhir blokcatch
. - 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 blokfinally
untuk merilis sumber daya, misalnya untuk menutup aliran atau file apa pun yang dibuka di bloktry
. - 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#.