Di Java, ketika mencoba dan akhirnya pernyataan pengembalian, apa situasi eksekusi? Apakah kode di akhirnya dieksekusi, ada banyak pendapat berbeda. Sekarang mari kita jelaskan dengan contoh berikut:
Kasus pertama: Coba berisi pernyataan pengembalian, dan akhirnya tidak mengandungnya.
Test Class Public {Static String S = ""; {System.out.println ("Coba ......");Di sini kita mendefinisikan string S, menetapkan "A" untuk mencoba, dan langsung mengembalikannya, dan menetapkan "B" ke S di akhirnya. Di bawah ini adalah hasil eksekusi
coba ..... 17 b 8 a
Kami menemukan bahwa hasil akhirnya adalah A, tetapi B dicetak dengan prioritas di atas. Mengapa ini? Melalui debug langkah demi langkah debugging, kami menemukan bahwa sebelum mengeksekusi pengembalian dalam mencoba, kode di akhirnya akan dieksekusi, dan kemudian pernyataan pengembalian akan dieksekusi. Jika pernyataan pengembalian akhirnya disertakan, apa yang akan terjadi?
Kasus kedua: Coba dan akhirnya berisi pernyataan pengembalian.
Test Class Public {Static String S = ""; {System.out.println ("coba ......");Hasil apa yang akan terjadi jika S = "B"; dalam akhirnya diubah untuk mengembalikan S = "B";? Apakah string S A atau B?
coba ..... 8 b
Kami menemukan bahwa hasil cetak terakhir adalah b.
Kami tahu bahwa pernyataan pengembalian digunakan dalam metode tertentu. , yang digunakan untuk mengakhiri metode ini saat ini.
public int print () {int c = 1; (Exception e) {E.PrintStackTrace (); C;Hasil eksekusi program adalah:
berlari:
Coba eksekusi ...
Akhirnya mengeksekusi ...
3
Berhasil dibangun (total waktu: 0 detik)
Perhatikan bahwa hanya ada satu pernyataan pengembalian di posisi 2 dan 3, dan harus ada satu pernyataan pengembalian dalam 2, 3, dan 4. Jika 2 dieksekusi, metode ini akan berakhir dan pernyataan pada 3 tidak dapat dieksekusi.
Ketika Blok Pernyataan Coba dieksekusi pada 1, nilai pengembalian fungsi akan disimpan dalam variabel sementara lainnya (variabel yang berbeda dari C, nilainya adalah 102) karena tidak ada pengecualian, pernyataan akhirnya akan dieksekusi segera. Blok pernyataan lain ditemui pada 2, dan nilai pengembalian disimpan dalam variabel sementara (nilai 3).
public int print () {int c = 1; -1} akhirnya {c ++;Dalam kode di atas, tidak ada pernyataan pengembalian di blok pernyataan akhirnya.
Jalankan: tryfinals102 berhasil dibangun (total waktu: 0 detik)
Kesimpulan: 1. Terlepas dari apakah ada pernyataan pengembalian dalam mencoba, pernyataan akhirnya pasti akan dieksekusi (akhirnya, dan namanya bagus).
2. Jika tidak ada pernyataan pengembalian di akhirnya dan ada pengembalian dalam coba, lalu sebelum menjalankan pernyataan pengembalian di Coba, kode di akhirnya akan dieksekusi terlebih dahulu, dan kemudian pernyataan pengembalian dalam coba; Termasuk di akhirnya, itu akan kembali secara langsung dan tidak lagi menjalankan pernyataan pengembalian dalam mencoba.