Rumah >Java >javaTutorial >Mengapakah kod pengendalian pengecualian Java menghasilkan \'132Exception dalam utas utama MyExc1\' dan bukannya \'13Exception dalam utas utama MyExc2\'?
Pengendalian Pengecualian dalam Java: Membongkar Kekaburan
Dalam senario pengendalian pengecualian Java yang membingungkan, soalan universiti mengemukakan coretan kod berikut:
<code class="java">// Exception Heirarchy class MyExc1 extends Exception {} class MyExc2 extends Exception {} class MyExc3 extends MyExc2 {} // Main Class public class C1 { public static void main(String[] args) throws Exception { try { System.out.print(1); q(); } catch (Exception i) { throw new MyExc2(); } finally { System.out.print(2); throw new MyExc1(); } } static void q() throws Exception { try { throw new MyExc1(); } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); } } }</code>
Soalan bertanyakan outputnya, dan jawapan yang diberikan ialah "13Exception in thread main MyExc2". Walau bagaimanapun, jawapan yang betul ialah "132Exception in thread main MyExc1".
Menjelaskan Kekaburan
Untuk menguraikan teka-teki ini, adalah penting untuk memahami keutamaan pengecualian:
Akibatnya :
Menjejaki Semula Pelaksanaan
Menggunakan prinsip ini pada kod:
Pelaksanaan Awal:
Catch Block Pengecualian:
Sambungan Pelaksanaan di Blok Percubaan Utama:
Akhirnya Sekat Pengecualian:
Output:
Output akhir ialah "132Exception dalam utas utama MyExc1" kerana pengecualian yang merambat keluar daripada kaedah utama ialah MyExc1 yang dibaling dalam baris 16. MyExc2 yang dilemparkan dalam baris 19 dibatalkan apabila MyExc1 dilemparkan dalam baris 16.
Atas ialah kandungan terperinci Mengapakah kod pengendalian pengecualian Java menghasilkan \'132Exception dalam utas utama MyExc1\' dan bukannya \'13Exception dalam utas utama MyExc2\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!