ใช่ เราสามารถเขียนคำสั่ง return ของเมธอดในบล็อก catch และ finally ได้
- มีสถานการณ์ที่เมธอดจะมีชนิดการคืนค่า และเราสามารถคืนค่าบางค่าที่ส่วนใดส่วนหนึ่งของเมธอดได้ตามเงื่อนไข
- หากเราคืนค่าในบล็อก
catchและเราสามารถคืนค่าที่ปลายทางของเมธอด โค้ดจะทำงานสำเร็จ - หากเราคืนค่าในบล็อก
catchและเราเขียนคำสั่งที่ปลายทางของเมธอดหลังจากคืนค่า โค้ดจะไม่ทำงาน จึงกลายเป็นโค้ดที่ไม่สามารถเข้าถึงได้ (unreachable code) เนื่องจาก Java ไม่รองรับ unreachable code - หากเราคืนค่าในบล็อก
finallyจะไม่จำเป็นต้องมีคำสั่งreturnที่ปลายทางของเมธอด
ตัวอย่าง 1
public class CatchReturn { int calc() { try { int x=12/0; } catch (Exception e) { return 1; } return 10; } public static void main(String[] args) { CatchReturn cr = new CatchReturn(); System.out.println(cr.calc()); } }ผลลัพธ์
1
ตัวอย่าง 2
public class FinallyReturn { int calc() { try { return 10; } catch(Exception e) { return 20; } finally { return 30; } } public static void main(String[] args) { FinallyReturn fr = new FinallyReturn(); System.out.println(fr.calc()); } }ผลลัพธ์
30