C# – Exception Handling
Exception adalah masalah yang muncul waktu kita lagi jalanin program. Exception dalam C# itu respon buat situasi yang diluar dugaan pas program lagi berjalan, misalnya kalo kita coba bagi angka dengan nol.
Penanganan exception dalam C# itu berdasarkan empat kata kunci: try, catch, finally, dan throw.
- try − Blok try itu tempat buat nyoba kode yang mungkin bikin exception. Bisa ada satu atau lebih blok catch yang menyusulnya.
- catch − Program bisa nangkep exception dengan penangan exception di tempat yang ditentukan buat atasi masalahnya. Kata kunci catch nunjukin kalo kita lagi nangkep exception.
- finally − Blok finally dipake buat jalanin serangkaian pernyataan, apa pun yang terjadi, baik ada exception atau enggak. Misalnya, kalo kita buka file, file-nya harus ditutup, ga peduli ada exception atau enggak.
- throw − Blok throw dipake buat “ngelempar” masalahnya kalo ada yang enggak beres. Jadi, program nyamperin masalahnya dan kasih tau, “Eh, ada yang salah nih!”
Syntax
Kalo ada blok yang munculin exception, sebuah method bisa tangkep exception pake kombinasi kata kunci try dan catch. Blok try/catch itu dipake buat nangkep kode yang bisa bikin exception. Kode yang ada di dalam blok try/catch bisa disebut kode yang dilindungi, berikut ini cara menggunakan try/catch:
try {
// statements causing exception
} catch( ExceptionName e1 ) {
// error handling code
} catch( ExceptionName e2 ) {
// error handling code
} catch( ExceptionName eN ) {
// error handling code
} finally {
// statements to be executed
}
Kamu bisa bikin beberapa blok catch buat tangkep macem-macem exception kalo blok try-nya munculin lebih dari satu exception dalam situasi yang berbeda.
Exception Classes in C#
Exception dalam C# itu bisa dianggap sebagai kelas-kelas yang mewakili masalah-masalah yang muncul. Kelas-kelas exception dalam C# sebagian besar berasal dari kelas System.Exception secara langsung atau tidak langsung. Beberapa contoh kelas exception yang turunan dari kelas System.Exception adalah kelas System.ApplicationException dan System.SystemException.
Kelas System.ApplicationException mendukung exception yang dihasilkan oleh program aplikasi. Oleh karena itu, exception yang didefinisikan oleh para programer sebaiknya diturunkan dari kelas ini.
Kelas System.SystemException adalah kelas dasar untuk semua exception sistem yang udah ditentuin sebelumnya.
Berikut ini tabel yang berisi beberapa kelas exception bawaan yang diturunkan dari kelas Sytem.SystemException:
Sr.No. | Exception Class & Description |
---|---|
1 | System.IO.IOException Menangani error I/O (input/output). |
2 | System.IndexOutOfRangeException Menangani error yang muncul kalo method mencoba akses index yang di luar batas array. |
3 | System.ArrayTypeMismatchException Menangani error yang muncul kalo tipe data enggak cocok dengan tipe data array. |
4 | System.NullReferenceException Menangani error yang muncul ketika nyoba akses objek null. |
5 | System.DivideByZeroException Menangani error yang muncul ketika nyoba bagi angka dengan nol. |
6 | System.InvalidCastException Menangani error yang muncul saat ada kesalahan dalam ngubah tipe data.. |
7 | System.OutOfMemoryException Menangani error yang muncul saat memori yang tersedia udah abis. |
8 | System.StackOverflowException Menangani error yang muncul saat stack (tumpukan) udah kelebihan kapasitas. |
Handling Exceptions
C# nyediain solusi yang terstruktur buat penanganan exception pake blok try dan catch. Dengan blok-blok ini, pernyataan-pernyataan utama program dipisahin dari pernyataan-pernyataan penanganan error.
Blok-blok penanganan error ini diimplementasikan pake kata kunci try, catch, dan finally. Berikut contohnya kalo mau ngeluarin exception pas kondisi pembagian dengan nol terjadi:
using System;
namespace ErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void Division(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
DivNumbers d = new();
d.Division(25, 0);
Console.ReadKey();
}
}
}
Kalo kode di atas di-compile dan dijalankan, hasilnya bakal muncul seperti ini:
Exception caught: System.DivideByZeroException: Attempted to divide by zero.
at ...
Result: 0
Creating User-Defined Exceptions
Kamu juga bisa bikin exception sesuai kebutuhanmu. Kelas exception yang kamu definisikan sendiri itu turunan dari kelas Exception. Contohnya bisa dilihat di bawah ini:
using System;
namespace UserDefinedException {
class TestTemperature {
static void Main(string[] args) {
Temperature temp = new Temperature();
try {
temp.ShowTemp();
} catch(TempIsZeroException e) {
Console.WriteLine("TempIsZeroException: {0}", e.Message);
}
Console.ReadKey();
}
}
}
public class TempIsZeroException: Exception {
public TempIsZeroException(string message): base(message) {
}
}
public class Temperature {
readonly int temperature = 0;
public void ShowTemp() {
if(temperature == 0) {
throw (new TempIsZeroException("Zero Temperature found"));
} else {
Console.WriteLine("Temperature: {0}", temperature);
}
}
}
Ketika kode di atas di-compile dan dijalankan, hasilnya bakal muncul seperti ini:
TempIsZeroException: Zero Temperature found
Throwing Objects
Kamu bisa melempar sebuah objek jika objek tersebut merupakan turunan langsung atau tidak langsung dari kelas System.Exception. Kamu bisa menggunakan pernyataan throw di blok catch untuk melemparkan objek tersebut.
Catch(Exception e) {
...
Throw e
}