Saya telah mempelajari mekanisme pengecualian dalam dua hari terakhir, yang mana try...catch...finally merupakan bagian penting menurut saya. Berkaitan dengan pernyataan yang saya pelajari sebelumnya, saya menemui masalah yang menarik tentang return dan akhirnya percobaan, saya menemukan bahwa bahasa komputer Hubungan logis ini memang halus. Berikut pendapat saya sendiri, jika ada yang salah, saya harap kalian para senior bisa menunjukkannya:
Pertama lihat potongan kode pertama
kelas publik return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Pengecualian e){ System.out.println( "kesalahan: "+e }akhirnya{ if(i>10){ Sistem.keluar.println( saya ); } Sistem.keluar.println( "akhirnya" } kembalikan saya;
Output dari potongan kode pertama adalah sebagai berikut:
awal
20
Akhirnya
20
Perlu diperhatikan bahwa return yang kedua berada di luar pernyataan final saat ini. Sesuai dengan peraturan yang muncul pada saat yang bersamaan, dapat dipahami bahwa return yang pertama hanyalah sebuah kondisi. Faktanya, ia hanya menjalankan operasi i+= 10, lalu langsung memasukkan pernyataan akhirnya, dan akhirnya mengembalikan hasilnya.
Mari kita lihat potongan kode kedua:
kelas publik return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Pengecualian e){ System.out.println( "kesalahan: "+e }akhirnya{ if(i>10){ Sistem.keluar.println( saya ); } Sistem.keluar.println( "akhirnya" );
Perbedaan antara potongan kode kedua dan potongan pertama adalah bahwa hasil akhir ditempatkan pada pernyataan akhirnya. Kita dapat menebak hasil keluarannya:
awal
20
Akhirnya
50
Pengembalian yang dieksekusi saat ini telah menimpa 20 yang diperoleh dari hasil operasi sebelumnya dan mengembalikan nilai 50. Artinya, pengembalian dalam pernyataan akhirnya telah dieksekusi
Ada juga potongan kode ketiga, silakan nikmati perlahan:
kelas publik return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i; }catch(Pengecualian e){ System.out.println( "kesalahan: "+e }akhirnya{ if(i>10){ Sistem.keluar.println( saya ); } Sistem.keluar.println( "akhirnya" );
Saat ini, ada tambahan i=50 pada pernyataan akhirnya, jadi apa hasilnya?
awal
Akhirnya
10
Inilah hasilnya. Tidak ada pernyataan return pada pernyataan final, sehingga nilai return asli tidak akan berubah.
Jadi melalui ketiga contoh ini, dapatkah kita memahaminya seperti ini:
Saat menemukan return dalam pernyataan try, pertama-tama simpan nilainya di suatu tempat, lalu cari pernyataan akhirnya. Jika ada algoritma baru dalam pernyataan tersebut, keluarkan nilai dari ruang itu dan lakukan operasi jika ada pengembalian pada akhirnya, cukup masukkan "nilai baru" "Timpa" nilai lama "di ruang itu dan akhirnya kembali; jika tidak ada pengembalian pada akhirnya, keluarkan saja" nilai lama "di ruang itu dan kembalikan.
Di atas murni untuk pengertian, saya harap Anda dapat memberi saya lebih banyak saran, terima kasih atas bantuan Anda!