FULL PRODUCT VERSION : java version "1.5.0_05" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_05-b05) Java HotSpot(TM) Client VM (build 1.5.0_05-b05, mixed mode, sharing) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows XP [Version 5.1.2600] A DESCRIPTION OF THE PROBLEM : If a variable is declared final but is not assigned a value, compilation fails if the variable is assigned different values in different catch blocks, and the only assignments occur in the catch blocks. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : This was not working in 1.4.2, but it did work in earlier versions, including 1.4.1_01, 1.3.1_04, and 1.1.8. There's no option in the bug report form for JDK earlier than 1.4.2. To reproduce, declare a final variable but do not assign it a value. Write a try/catch block with multiple catch blocks, and in each catch block, assign the variable. The compile will fail with the message "variable x might already have been assigned". If only one catch block is present, no compile error occurs. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Compilation should succeed if a final variable can be assigned only once in multiple catch blocks and no previous assignment was made. ACTUAL - Compilation fails with message "variable x might already have been assigned" ERROR MESSAGES/STACK TRACES THAT OCCUR : variable x might already have been assigned REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- import java.io.IOException; public class TestFinals { public void function() { final String v; try { doSomething(); } catch ( IOException e ) { v = "value1"; } catch ( InterruptedException ie ) { v = "value2"; } } private void doSomething() throws IOException, InterruptedException { boolean a = true; boolean b = false; if ( a ) throw new IOException(); if ( b ) throw new InterruptedException(); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : Remove the final modifier from the variable declaration.