This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
The values of local variables live on the stack; unless a value is specifically inserted by every path through the method, it is possible that you could return whatever was there on the stack beforehand. So the compiler sees that the "try" might not necessarily set a value to i (even if you don't write an actual Exception) so it insists you set a value to i before the "try."
You may also get "unreachable code" problems with that method.