Seperti yang ditunjukkan dalam rajah, pertama sekali, anda mesti faham bahawa apabila tiada dalam finally1, return: akan melaksanakan kandungan di dalam try terlebih dahulu, dan pulangan akan dilaksanakan tetapi tiada pulangan sebenar Pada masa ini, pergi Pernyataan dalam akhirnya dilaksanakan, dan kemudian kembali untuk melaksanakan pulangan, jadi seperti dalam soalan di atas x1:1, dan kemudian kembalikan x++; 1, tetapi akhirnya akan dilaksanakan juga, jadi ia tidak kembali serta-merta, tetapi Pernyataan dalam akhirnya dilaksanakan terlebih dahulu, dan kemudian x3:3 diperolehi Namun, perkara utama ialah : kerana ada tiada pulangan masuk akhirnya, perubahan kepada x masuk akhirnya tidak akan menjejaskan nilai pulangan sebelumnya, kerana pulangan sebelumnya Apa yang keluar ialah 1 jadi walaupun nilai x akhirnya diubah kemudian, dan kemudian kembali dilaksanakan semula, 1 sebelumnya masih akan dikembalikan. Maksudnya, pulangan adalah sama apabila ia keluar Ia tidak akan berubah melainkan anda akhirnya kembali lagi 2 Apabila ada pulangan dalam akhirnya : Percubaan akan dilaksanakan dahulu, pulangan akan dilaksanakan tetapi tiada pulangan sebenar Pada masa ini, akhirnya akan dilaksanakan, dan kemudian pulangan masuk akhirnya akan dilaksanakan dan kembali secara langsung.
Aliran kod Isytiharkan pembolehubahx = 1 Ditangkap pengecualian dan dilaksanakan return x++ pada masa ini x = 2, tetapi nilai x++ ialah 1, tetapi tindakan return tidak dilaksanakan akhirnya dilaksanakan, x = 3, kemudian return melompat kembali.
Mula-mula buang pengecualian, kemudian kembalikan nilai x (1), dan kemudian x dalam kelas akan meningkat sebanyak 1. Saya tidak tahu sama ada ia betul atau tidak.
1. Di mana sahaja terdapat pengembalian dalam tangkapan cuba akhirnya, nilai semasa disimpan ke dalam tindanan dahulu, tetapi ia tidak kembali serta-merta. Walau bagaimanapun, nilai pulangan telah diletakkan pada tindanan terlebih dahulu, jadi nilai pulangan masih 1. Jika anda meletakkan penyata pulangan dalam try catch akhirnya, anda boleh melihat hasil pelaksanaan yang berbeza dalam urutan.
http://m.blog.csdn.net/articl...
Seperti yang ditunjukkan dalam rajah, pertama sekali, anda mesti faham bahawa apabila tiada
dalam
finally
1,return
:akan melaksanakan kandungan di dalam
try
terlebih dahulu, dan pulangan akan dilaksanakan tetapi tiada pulangan sebenar Pada masa ini, pergi Pernyataan dalam akhirnya dilaksanakan, dan kemudian kembali untuk melaksanakan pulangan, jadi seperti dalam soalan di atasx1:1
, dan kemudian kembalikan x++; 1, tetapi akhirnya akan dilaksanakan juga, jadi ia tidak kembali serta-merta, tetapi Pernyataan dalam akhirnya dilaksanakan terlebih dahulu, dan kemudianx3:3
diperolehi Namun, perkara utama ialah : kerana ada tiada pulangan masuk akhirnya, perubahan kepada x masuk akhirnya tidak akan menjejaskan nilai pulangan sebelumnya, kerana pulangan sebelumnya Apa yang keluar ialah 1 jadi walaupun nilai x akhirnya diubah kemudian, dan kemudian kembali dilaksanakan semula, 1 sebelumnya masih akan dikembalikan. Maksudnya, pulangan adalah sama apabila ia keluar Ia tidak akan berubah melainkan anda akhirnya kembali lagi2 Apabila ada pulangan dalam akhirnya :
Percubaan akan dilaksanakan dahulu, pulangan akan dilaksanakan tetapi tiada pulangan sebenar Pada masa ini, akhirnya akan dilaksanakan, dan kemudian pulangan masuk akhirnya akan dilaksanakan dan kembali secara langsung.
Semoga ia akan diterima pakai.
Aliran kod
Isytiharkan pembolehubah
x = 1
Ditangkap pengecualian dan dilaksanakan
return x++
pada masa inix = 2
, tetapi nilaix++
ialah1
, tetapi tindakanreturn
tidak dilaksanakanakhirnya dilaksanakan,
x = 3
, kemudianreturn
melompat kembali.Mula-mula buang pengecualian, kemudian kembalikan nilai x (1), dan kemudian x dalam kelas akan meningkat sebanyak 1. Saya tidak tahu sama ada ia betul atau tidak.
kembali operator x++, kembalikan bahagian kiri dahulu, kemudian x bertambah 1. pulangan ++x sepatutnya mengembalikan 2
Maksud ungkapan ++X ialah: X tambah satu, dan nilai ungkapan ialah X tambah satu;
Maksud ungkapan X++ ialah: X tambah satu, tetapi nilai ungkapan itu masih X.1. Di mana sahaja terdapat pengembalian dalam tangkapan cuba akhirnya, nilai semasa disimpan ke dalam tindanan dahulu, tetapi ia tidak kembali serta-merta. Walau bagaimanapun, nilai pulangan telah diletakkan pada tindanan terlebih dahulu, jadi nilai pulangan masih 1. Jika anda meletakkan penyata pulangan dalam try catch akhirnya, anda boleh melihat hasil pelaksanaan yang berbeza dalam urutan.