research this code:
public class TestFinalAndCatch {
private final int i;
TestFinalAndCatch(String[] args) {
try {
i = method1();
} catch (IOException ex) {
i = 0; // error: variable i might already have been assigned
}
}
static int method1() throws IOException {
return 1;
}
}
compiler says that java: variable i might already have been assigned
But for me it is looks like impossible situation.
i
is final, so it can only be assigned once. The compiler is probably not smart enough to realize that if an exception is thrown, the first assignment won't take place, and if an exception isn't thrown, the second assignment won't take place.The problem is that in this case compiler works syntax-based not semantic-based. There are 2 workarounds: First base on moving exception handle on method:
Second base on using temporar variable:
https://bugs.openjdk.java.net/browse/JDK-6326693?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
Looks like JDK bug. And now status - Fixed. But I cannot find from which version.
To overcome this problem, use a local variable in the try catch block and then assign that result to the instance variable.