Bayangkan senario di mana pelaksanaan kaedah merentasi berbilang penyataan pulangan dalam blok cuba-akhir. Soalan semula jadi timbul: Pernyataan pulangan manakah yang akhirnya menentukan nilai pulangan akhir kaedah? Untuk menyelidiki teka-teki ini, mari kita analisis coretan kod tertentu:
String test() { try { return "1"; } finally { return "2"; } }
Tipu tipu daya terletak pada pemahaman sama ada nilai pulangan daripada panggilan untuk menguji() adalah konsisten merentas semua Mesin Maya Java (JVM). Spesifikasi Bahasa Java memegang kunci kepada misteri ini.
Menurut Spesifikasi Bahasa Java, pulangan daripada blok akhirnya akan menimpa pulangan daripada blok cuba. Oleh itu, "2" ditetapkan secara jelas sebagai nilai pulangan akhir, tanpa mengira JVM yang digunakan.
Secara empirik, Sun JVM mematuhi spesifikasi ini, secara konsisten menjadikan "2" sebagai nilai pulangan untuk test(). Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pematuhan ini bukan semata-mata kelainan khusus JVM.
Spesifikasi secara eksplisit mewajibkannya, dan mana-mana JVM yang menyimpang daripadanya dianggap tidak mematuhinya. Oleh itu, adalah selamat untuk menegaskan bahawa nilai pulangan muktamad akan sentiasa "2" dalam mana-mana JVM yang mematuhi spesifikasi.
Sementara spesifikasi memberikan kejelasan tentang tingkah laku nilai pulangan, adalah dinasihatkan agar tidak menggunakan berbilang pulangan dalam satu kaedah. Amalan pengekodan sedemikian memperkenalkan kekeliruan yang tidak perlu dan melanggar prinsip pengekodan asas.
Penyusun selalunya akan mengeluarkan amaran terhadap pendekatan yang boleh dipersoalkan ini, seperti yang ditunjukkan oleh penegasan Eclipse bahawa blok pemulangan ujian() tidak akan dilaksanakan (secara salah). Hayati kebijaksanaan spek bahasa dan elakkan pengekodan yang keji ini.
Atas ialah kandungan terperinci Penyata Pemulangan Mana Yang Merajai Tertinggi: Membongkar Nilai Definitif dalam Blok Cuba-Akhirnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!