Exceptions and Exception Handling

Fitur exception handling pada bahasa C# akan membantumu berurusan dengan situasi yang tidak terduga (unexpected) atau situasi yang istimewa (exceptional) yang terjadi ketika program berjalan. Exception handling menggunakan keyword try, catch, dan finally untuk 'mencoba' (try) suatu aksi yang mungkin tidak berhasil, untuk menangani (handle) kesalahan ketika kamu pikir itu hal yang tepat untuk dilakukan, dan untuk membersihkan sumber daya setelahnya. Exception dapat di hasilkan oleh common language runtime (CLR), oleh .NET, library pihak ketiga, ataupun kode aplikasi. Exception dibuat menggunakan keyword throw.

Di berbagai kasus, sebuah exception mungkin akan di 'lempar' (thrown) bukan dari method yang dipanggil oleh kodemu secara langsung, tetapi dari method lain jauh di dalam call stack. Ketika suatu exception di throw, CLR akan melepaskan stack, dan mencari suatu tipe exception dalam method dengan block catch, lalu ia akan mengeksekusi block catch pertama yang sesuai yang ia temukan. Jika ia tidak dapat menemukan catch block yang sesuai di manapun dalam call stack, ia akan mengakhiri proses dan menampilkan pesan ke user.

Pada contoh berikut, sebuah method menguji pembagian dengan nol dan 'menangkap' (catch) error nya. Tanpa exception handling, program ini akan berakhir dengan error DivideByZeroException was unhandled.

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

    public static void Main()
    {
        // Input untuk uji coba. Ganti nilai untuk melihat
        // perilaku exception handling.
        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

Exception memiliki ciri sebagai berikut:

  • Exception adalah tipe yang pada akhirnya diturunkan dari System.Exception

  • Gunakan block try disekitar statement yang mungkin akan melemparkan exception.

  • Ketika sebuah exception terjadi dalam block try, aliran kontrol akan melompat ke exception handler yang sesuai pertama yang ada dimanapun dalam call stack. Di C#, keyword catch digunakan untuk mendefinisikan exception handler.

  • Jika tidak ada exception handler untuk exception yang diberikan, program akan berhenti dan menampilkan pesan error.

  • Jangan tankap (catch) exception kecuali memang kamu dapat menanganinya dan mengembalikan aplikasi ke kondisi yang diketahui. Jika kamu menangkap System.Exception, lempar kembali menggunakan keyword throw di akhir block catch.

  • Jika suatu catch block mendefinisikan sebuah variable exception, kamu dapat menggunakannya untuk mengambil lebih banyak informasi dari suatu tipe exception yang terjadi.

  • Exception dapat secara eksplisit dihasilkan oleh program menggunakan keyword throw

  • Objek exception berisi informasi mendetail mengenai error, seperti keadaan dari call stack dan text deskripsi dari error.

  • Kode dalam block finally akan dieksekusi tanpa memedulikan apakah ada exception yang dilempar. Gunakan block finally untuk melepaskan sumber daya, contohnya menutup stream apa pun atau files yang dibuka dalam block try.

C# Language Specification

Untuk informasi lebih lanjut, lihat Exceptions di C# Language Specification

Sumber: Exceptions and Exception handling | Microsoft Docs

Last updated