Masih menggulir ke bawah? Ini dia!
Pertanyaan ini memberi saya waktu yang sulit beberapa saat.
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
apa yang akan dicetak dalam skenario di atas? Ya, tebak dengan benar:
mis. Pesan - apa pun itu (mungkin mencoba membagi dengan nol)
Terakhir blok
Setelah akhirnya
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
Apa yang akan dicetak ini? Tidak ada! Itu melempar kesalahan karena blok tangkap memunculkan kesalahan.
Dalam struktur pemrograman yang baik, pengecualian Anda akan disalurkan, dalam artian kode ini akan ditangani dari lapisan lain. Untuk merangsang kasus seperti itu saya akan mencoba kode ini bersarang.
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
Dalam hal ini, hasilnya adalah:
- Terakhir blok
- ex.Message - apapun itu.
Jelas bahwa ketika Anda menangkap pengecualian dan melemparkannya lagi ke lapisan lain (Funneling), kode setelah lemparan tidak dijalankan. Kerjanya mirip dengan bagaimana pengembalian di dalam suatu fungsi bekerja.
Anda sekarang tahu mengapa tidak menutup sumber daya Anda pada kode setelah blok catch. Tempatkan mereka di blok terakhir.