"Hai, Amigo. Kita bakal duwe pelajaran sing menarik banget dina iki. Aku bakal ngandhani babagan pengecualian. Pengecualian minangka mekanisme khusus sing ngidini kita ngatasi kesalahan ing program. Kene sawetara conto kesalahan sing bisa kedadeyan. ing program:

1. Program bisa nyoba kanggo nulis file nalika hard drive wis kebak.

2. Program bisa nyoba kanggo nelpon cara ing variabel nyimpen referensi null.

3. Program bisa nyoba kanggo mbagi nomer kanthi 0."

Kabeh tumindak kasebut nyebabake kesalahan. Biasane, asil program kasebut langsung mandheg, amarga ora ana gunane kanggo terus ngeksekusi kode ing kasus iki.

"Kenapa?"

"Apa ana gunane terus muter setir yen mobil wis metu saka dalan lan tiba saka jurang?"

"Apa program kudu mandheg mlaku, banjur?"

"Ya. Paling ora, iki kedadeyan. Apa wae kesalahan sing nyebabake program kasebut mandheg."

"Sing pendekatan sing pinter banget."

"Nanging ora bakal luwih apik kanggo nyoba lan terus mbukak program?"

"Ya, umpamane sampeyan ngetik teks sing akeh banget ing Word lan disimpen. Apa yen operasi nyimpen gagal, nanging program kasebut ndadékaké sampeyan yakin manawa kabeh apik? Lan sampeyan terus ngetik. Iku bakal bodho, ora. iku?"

"Ya wis."

"Banjur programer teka karo solusi sing menarik: saben fungsi bakal ngasilake status karyane. 0 tegese kerjane kaya sing dikarepake. Nilai liyane tegese ana kesalahan, lan nilai bali minangka kode kesalahan."

"Nanging, pendekatan kasebut uga duwe kekurangan. Sawise saben telpon fungsi (!), sampeyan kudu mriksa kode bali (nomer). Kaping pisanan, iki ora trep: kode penanganan kesalahan jarang dieksekusi nanging kudu dilebokake. Kapindho, fungsi asring ngasilake nilai sing beda - apa sing kudu sampeyan lakoni?"

"Bener. Aku uga mikir babagan iki."

"Banjur, masa depan sing cerah teka ing bentuk pengecualian lan mekanisme penanganan kesalahan. Mangkene cara kerjane:

1. Nalika ana kesalahan, Mesin Jawa nggawe obyek khusus - pangecualian - ngendi nyimpen kabeh informasi kesalahan. Ana pangecualian beda kanggo kasalahan beda.

2. Pangecualian nyebabake program langsung metu saka fungsi saiki, lan fungsi sabanjure, lan liya-liyane - nganti metu saka metode utama. Banjur program mandheg. Programer bisa uga ujar manawa Mesin Jawa 'mbukak tumpukan panggilan'.

"Nanging sampeyan ujar manawa program kasebut ora mesthi mandheg."

"Ya, amarga ana cara kanggo nyekel pangecualian. Kita bisa nulis kode khusus ing panggonan sing tepat kanggo nyekel pangecualian sing kita peduli lan nindakake apa-apa karo wong-wong mau. Iki penting banget."

"Kanggo mbantu kita nindakake iki, ana khusus nyoba-nyekel mbangun. Punika cara kerjane: "

Conto program sing nyekel pangecualian (divisi dening 0) lan terus digunakake.
public class ExceptionExample2
{
    public static void main(String[] args)
    {
        System.out.println("Program starts");

        try
        {
            System.out.println("Before calling method1");
            method1();
            System.out.println("After calling method1. This will never be shown");
        }
        catch (Exception e)
        {
           System.out.println("Exception has been caught");
        }

        System.out.println("Program is still running");
    }

    public static void method1()
    {
        int a = 100;
        int b = 0;
        System.out.println(a / b);
    }
}
Output layar:

Program starts
Before method1 calling
Exception has been caught
Program is still running

"Nanging kok 'Sawise nelpon method1. Iki ora bakal ditampilake' ditampilake ing layar?"

"Aku bungah sing takon. Ing baris 25, kita dibagi 0, kang ndadékaké kanggo kesalahan - pangecualian. Mesin Jawa nggawe obyek ArithmeticException karo informasi bab kesalahan. Obyek punika pangecualian."

"Pengecualian kasebut ana ing njero method1metode. Iki nyebabake cara kasebut langsung mandheg. Iki bakal nyebabake cara utama mandheg yen ora amarga blok nyoba-nyekel ."

"Yen ana pangecualian ing blok nyoba , kejiret ing blok nyekel . Sisa kode ing blok coba ora bakal dieksekusi. Nanging, blok nyekel bakal diwiwiti. "

"Aku ora ngerti."

"Ing tembung liyane, kode kasebut kaya mangkene:

1. Yen ana pangecualian ing pamblokiran nyoba , kode mandek kanggo kaleksanan ngendi pangecualian dumadi lan pemblokiran nyekel wiwit kaleksanan.

2. Yen ora ana pangecualian, banjur pemblokiran nyoba kaleksanan kanggo mburi , lan pemblokiran nyekel ora kaleksanan. "

"Hah?"

"Mbayangno yen sawise saben cara nelpon kita mriksa apa cara bali normal utawa tiba-tiba mungkasi minangka asil saka pangecualian. Yen ana pangecualian, banjur kita pindhah kanggo nglakokaké pamblokiran nyekel (yen ana) kanggo nyekel pangecualian. Yen ora ana pamblokiran nyekel, banjur kita mungkasi cara saiki, lan cara sing nelpon kita nindakake mriksa padha.

"Aku wis entuk saiki."

"Apik banget."

"Apa tegese 'Pengecualian' ing statement nyekel?"

" Kabeh pangecualian minangka kelas sing marisi kelas Pengecualian. Kita bisa nyekel pangecualian tartamtu kanthi nemtokake kelas pangecualian ing blok nyekel , utawa kita bisa nyekel kabeh pangecualian kanthi nemtokake kelas induk sing umum - Pengecualian. Banjur kita bisa entuk kabeh kesalahan sing dibutuhake. informasi saka variabel e (nyimpen referensi kanggo obyek pangecualian).

"Keren! Yen ana macem-macem pengecualian ing caraku, mula bisa aku ngolah kanthi cara sing beda?"

"Ora mung sampeyan bisa, nanging sampeyan kudu. Sampeyan bisa nindakake kaya iki:"

Tuladha:
public class ExceptionExample2
{
    public static void main(String[] args)
    {
        System.out.println("Program starts");

        try
        {
            System.out.println("Before calling method1");
            method1();
            System.out.println("After calling method1. This will never be shown");
        }
        catch (NullPointerException e)
        {
           System.out.println("Null reference. Exception has been caught");
        }
        catch (ArithmeticException e)
        {
            System.out.println("Division by zero. Exception has been caught");
        }
        catch (Exception e)
        {
            System.out.println("Any other errors. Exception has been caught");
        }

        System.out.println("Program is still running");
    }

    public static void method1()
    {
        int a = 100;
        int b = 0;
        System.out.println(a / b);
    }
}

" Blok nyoba bisa dipasangake karo sawetara blok nyekel , sing saben-saben bakal nyekel jinis pengecualian sing ditemtokake."

"Aku rumangsa ngerti. Aku durung bisa nulis iki dhewe, nanging yen aku teka ing kode, aku ora bakal wedi."