CodeGym /Blog Java /rawak /Cuba Java - Tangkap
John Squirrels
Tahap
San Francisco

Cuba Java - Tangkap

Diterbitkan dalam kumpulan
Ralat boleh berlaku semasa program melaksanakan. Ia adalah masalah biasa bagi setiap pengaturcara, daripada seorang pemula hingga profesional sebenar. Tidak semua kesilapan timbul kerana kesalahan pembangun. Sesetengah daripada mereka sukar untuk diramal, dan kadangkala ia tidak mungkin. Contohnya, semasa memuat turun program, sambungan rangkaian mungkin tiba-tiba terputus atau kuasa mungkin terputus. Situasi sedemikian dipanggil pengecualian. Try and catch ialah bahagian pembinaan yang digunakan untuk mengendalikan pengecualian.

Java try and catch block

Apabila ralat berlaku, Java biasanya berhenti dan menjana mesej ralat. Proses ini dipanggil "Java throws an exception". Java menyediakan kemudahan khas untuk mengendalikan pengecualian. Salah satunya ialah cuba...tangkap...akhirnya pembinaan. Berikut ialah sintaks try block, catch block dan akhirnya block.

//try block
try {
  // Block of code to try
}
//try catch 
catch(Exception e) {
  // Block of code to handle errors
}
finally {
 // Optional block of code 
          }
Apabila pengecualian berlaku dalam blok cuba, kawalan beralih ke blok tangkapan, yang boleh mengendalikan pengecualian. Jika tiada blok sedemikian ditemui, mesej pengecualian yang tidak dikendalikan dipaparkan kepada pengguna dan pelaksanaan program selanjutnya dihentikan. Untuk mengelakkan perhentian kecemasan sedemikian, anda perlu menggunakan blok try..catch. Cuba Java - Tangkap - 1

Secara ringkas tentang cuba, tangkap, akhirnya, melontar kata kunci

Pengendalian pengecualian dalam Java adalah berdasarkan penggunaan kata kunci berikut dalam program:
  • cuba — mentakrifkan blok kod di mana pengecualian boleh berlaku;
  • catch — mentakrifkan blok kod di mana pengecualian dikendalikan;
  • akhirnya — mentakrifkan blok kod yang menjadi pilihan, tetapi jika ada, dilaksanakan juga, tanpa mengira keputusan blok percubaan.
Kata kunci ini digunakan untuk membuat binaan pemprosesan khas dalam kod program: cuba tangkap, dan cuba tangkap akhirnya}.
  • membuang - digunakan untuk menimbulkan pengecualian;
  • throws — digunakan dalam tandatangan kaedah untuk memberi amaran bahawa kaedah mungkin membuang pengecualian.

Contoh mudah pembinaan cuba-tangkap

Katakan kita mempunyai program dengan beberapa tatasusunan.

public class TryTest {
   public static void main(String[] args) {
       int[] myArray = new int[5];
       myArray[7] = 8;
       System.out.println(myArray[7]);
   }
}
Memandangkan kami cuba mengakses elemen tatasusunan dengan indeks yang tidak wujud, program akan keluar dengan ralat:
Pengecualian dalam benang "utama" java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar had untuk panjang 5 pada hari.TryTest.main(TryTest.java:6) Proses selesai dengan kod keluar 1
Mari kita ubah suai program ini dan kendalikan pengecualian ini dengan cuba-tangkap. Mula-mula datang cuba blok, kemudian — tangkap blok.

//try catch example
public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (Exception myEx) {
           System.out.println("The exception was handled...");
       }

       System.out.println("This is the end of the program...");
   }
}
Sekarang output telah berubah:
Pengecualian telah dikendalikan... Ini adalah penghujung program... Proses selesai dengan kod keluar 0 Proses selesai dengan kod keluar 0
Dalam kes ini, program selesai dengan betul, mesej kami dipaparkan pada skrin. Penamatan program yang betul ditandakan oleh kod 0 pada penghujung proses, manakala salah — 1. Apabila menggunakan blok try...catch, semua pernyataan antara pernyataan try dan catch dilaksanakan terlebih dahulu. Jika pengecualian berlaku dalam blok cuba, maka perintah pelaksanaan biasa berhenti dan meneruskan ke pernyataan tangkapan. Oleh itu, apabila pelaksanaan program mencapai nombor[7]=8; baris, program akan berhenti dan pergi ke blok tangkapan Dalam kes kami, kami telah mengisytiharkan pembolehubah myEx dengan jenis Exception. Ini ialah kelas asas untuk semua pengecualian, jadi mereka boleh berbeza. Sebagai contoh, terdapat pengecualian yang bertanggungjawab untuk limpahan tindanan, melangkaui pengindeksan tatasusunan, seperti dalam kes kami, menunjuk ke Null, dan seterusnya. Jika kita tidak meneka dengan jenis pengecualian, maka program itu juga akan ditamatkan secara tidak betul. Walau bagaimanapun, kami memilih jenis Pengecualian untuk kesederhanaan contoh, dan ia adalah kelas asas untuk semua pengecualian. Jadi kenyataan tangkapan (Exception myEx) akan mengendalikan hampir semua pengecualian. Mengendalikan pengecualian dalam kes ini Selepas blok tangkapan selesai, atur cara meneruskan kerjanya, melaksanakan semua arahan lain selepas blok tangkapan. Jika anda ingin melihat pengecualian yang berlaku, anda boleh meminta program mencetak surih tindanan panggilan kaedah. Inilah yang JVM lakukan apabila pengecualian yang tidak ditangkap berlaku: ia menghentikan pelaksanaan program dan mencetak surih tindanan selepas melaksanakan kod blok akhirnya, jika ada.

public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (Exception myEx) {
          
         myEx.printStackTrace();
       }

       System.out.println("This is the end of the program...");
   }
}
Mengendalikan pengecualian dalam kes ini adalah untuk mencetak tindanan surih ralat ke konsol menggunakan kaedah printStackTrace() yang ditakrifkan dalam kelas Pengecualian .
java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar had untuk panjang 5 pada hari.TryTest.main(TryTest.java:7) Ini adalah penghujung program... Proses selesai dengan kod keluar 0
Walau bagaimanapun, program itu keluar dengan betul.

Akhirnya! Selepas menangkap

Dalam contoh dan dalam takrifan kata kunci untuk pengendalian pengecualian, kami menyebut blok akhirnya. Ia adalah pilihan, tetapi jika ada, ia akan dilaksanakan tanpa mengira keputusan blok cuba. Mari tukar jenis pengecualian kepada NullPointerException.

public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (NullPointerException myEx) {
           System.out.println("The exception was handled...");

       }

       finally{
           System.out.println(" finally");
       }

       System.out.println("This is the end of the program...");
   }
}
Berikut adalah outputnya:
Pengecualian dalam benang "utama" java.lang.ArrayIndexOutOfBoundsException: Indeks 7 di luar had untuk panjang 5 pada hari.TryTest.main(TryTest.java:7) akhirnya Proses selesai dengan kod keluar 1
Dengan cara ini, kita boleh menentukan jenis pengecualian yang betul. Ini ialah IndexOutOfBoundsException.

public class TryTest {
   public static void main(String[] args) {
       try {
           int[] myArray = new int[5];
           myArray[7] = 8;
           System.out.println(myArray[7]);
       } catch (IndexOutOfBoundsException myEx) {
           System.out.println("The exception was handled...");

       }

       finally{
           System.out.println(" finally");
       }

       System.out.println("This is the end of the program...");
   }
}
Dalam kes ini, output adalah seperti berikut:
Pengecualian telah dikendalikan... akhirnya Ini adalah penghujung program... Proses selesai dengan kod keluar 0

Bagaimanakah cara pengecualian berfungsi?

Maksudnya ialah semua perkataan ini —tangkap, baling, baling hanya boleh digunakan dengan java.lang.Throwable atau keturunannya. Sebagai contoh, anda boleh melakukan ini:

public class MyClass {
    public static void main(String[] args) {
        try {
        } catch (Throwable thr) {
}
    }
}
Walau bagaimanapun, anda tidak boleh melakukannya seperti ini:

public class MyClass {
public static void main(String[] args) {
        try {
        } catch (String thr) {
}
    }
}
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION