Unreachable statement compile error in Java

Unreachable statement compile error in Java

Does it mean that compiler checks whether it is able to compile for all branches/lines of code ?

It means the compiler checks that every statement is reachable.

From section 14.21 of the JLS:

It is a compile-time error if a statement cannot be executed because it is unreachable.

This section is devoted to a precise explanation of the word reachable. The idea is that there must be some possible execution path from the beginning of the constructor, method, instance initializer, or static initializer that contains the statement to the statement itself. The analysis takes into account the structure of statements.

The section then documents how reachability is defined.

In particular, the relevant points in your case are:

Every other statement S in a non-empty block that is not a switch block is reachable iff the statement preceding S can complete normally.

A break, continue, return, or throw statement cannot complete normally.

So your line 1 statement is preceded by a statement (break;) which cannot complete normally, and therefore its unreachable.

The compiler is also able to make that conclusion, and assumes you are making a mistake. And yes, the Java compiler does a pretty good amount of Data-Flow Analysis. The most common related message is the one about variables not initialized. The second most frequent is, I believe, precisely this one, about code not reachable.

Unreachable statement compile error in Java

Does it mean that compiler checks whether it is able to compile for
all branches/lines of code ?

Yes compiler compiles the whole body of code and make byte code according to your code, it smarter enough to detects unreachable code also dead code. Immediate break in the for-loop makes unreachable other statements.

for(;;){
   break;
   ... // unreachable statement
}


int i=1;
if(i==1)
  ...
else
  ... // dead code

Leave a Reply

Your email address will not be published.