Adakah Kesalahan Akan Ditangkap oleh Catch Block di Java?

1. Gambaran keseluruhan

Dalam artikel pendek ini, kami akan menunjukkan cara menangkap kesalahan Java dengan betul, dan kami akan menerangkan kapan tidak masuk akal untuk melakukannya.

Untuk maklumat terperinci mengenai Throwable s di Java, lihat artikel kami mengenai Pengecualian Pengendalian di Java.

2. Kesalahan Menangkap

Oleh kerana kelas java.lang.Error di Java tidak diwarisi dari java.lang.Exception , kita mesti menyatakan kelas asas Ralat - atau subkelas Kesalahan tertentu yang ingin kita tangkap - dalam pernyataan tangkapan untuk menangkapnya .

Oleh itu, jika kita menjalankan kes ujian berikut, ia akan lulus:

@Test(expected = AssertionError.class) public void whenError_thenIsNotCaughtByCatchException() { try { throw new AssertionError(); } catch (Exception e) { Assert.fail(); // errors are not caught by catch exception } }

Walau bagaimanapun, ujian unit berikut menjangkakan penyataan tangkapan dapat menangkap kesalahan:

@Test public void whenError_thenIsCaughtByCatchError() { try { throw new AssertionError(); } catch (Error e) { // caught! -> test pass } }

Harap diperhatikan bahawa Mesin Maya Java melemparkan kesalahan untuk menunjukkan masalah teruk yang tidak dapat dipulihkan , seperti kekurangan memori dan limpahan tumpukan, antara lain.

Oleh itu , kita mesti mempunyai alasan yang sangat baik untuk mengatasi kesilapan!

3. Kesimpulannya

Dalam artikel ini, kami melihat kapan dan bagaimana Kesalahan dapat ditangkap di Java. Contoh kod boleh didapati dalam projek GitHub.