This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
16.1.8 Operators ++ and -- V is definitely assigned after ++a, --a, a++, or a-- iff either a is V or V is definitely assigned after the operand expression. V is definitely unassigned after ++a, --a, a++, or a-- iff a is not V and V is definitely unassigned after the operand expression. V is [un]assigned before a iff V is [un]assigned before ++a, --a, a++, or a--.
A variable that is declared final cannot be incremented, because when an access of a final variable is used as an expression, the result is a value, not a variable. Thus, it cannot be used as the operand of a prefix increment operator.
The code compile if final is left out. However preincrementing a final variable gives an error either in a method, constructor or static block.