Unreachable Code Error
Compile-time error: คอมไพเลอร์ตรวจพบโค้ดที่ ไม่มีทางรันถึงได้ แน่นอน
สาเหตุหลัก
- Statement หลัง
return,throw,break,continue(ใน loop) - Infinite loop (
while(true),for(;;)) ที่ไม่มี break if (false) { ... }หรือ condition ที่ compile-time constant เป็น false
ตัวอย่าง: Infinite Loop
public class Demo {
public static void main(String[] args) {
int val = 5;
for (;;) { // infinite loop
if (val == 5) {
break;
System.out.println("Unreachable!"); // ERROR
}
}
}
}
Compile Error
Demo.java:7: error: unreachable statement
System.out.println("Unreachable!");
^
1 error
ตัวอย่างอื่นๆ
// 1. หลัง return
void foo() {
return;
System.out.println("Unreachable"); // ERROR
}
// 2. หลัง throw
void bar() {
throw new RuntimeException();
System.out.println("Unreachable"); // ERROR
}
// 3. If false constant
void baz() {
if (false) {
System.out.println("Unreachable"); // ERROR
}
}
// 4. Switch case fallthrough (บางกรณี)
void test(int x) {
switch(x) {
case 1: return;
case 2: System.out.println("x=2"); break;
}
System.out.println("After switch"); // OK - อาจถึงได้
}
ความแตกต่าง: Unreachable vs Dead Code
- Unreachable Code: Compile error (Java spec กำหนดชัดเจน)
- Dead Code: รันได้แต่ไม่มีผลกระทบ (ไม่ error, IDE warn เฉพาะ)
ข้อยกเว้น: assert
assert false; // OK - assert อาจถูก disable (-da)
System.out.println("After assert"); // OK - ไม่ error