This code from jls does not work on Jdk1.2 and gives some compile time errors.It is from section 8.3.2.3 Even when i remove the lines which JLS says will give errors then also it does not work fine. class UseBeforeDeclaration { static { x = 100; // ok - assignment
int v = x = 3; // ok - x at left hand side of assignment int z = UseBeforeDeclaration.x * 2; // ok - not accessed via simple name Object o = new Object(){ void foo(){x++;} // ok - occurs in a different class {x++;} // ok - occurs in a different class }; } { j = 200; // ok - assignment
int k = j = j + 1; int n = j = 300; // ok - j at left hand side of assignment //int h = j++; // error - read before declaration int l = this.j * 3; // ok - not accessed via simple name Object o = new Object(){ void foo(){j++;} // ok - occurs in a different class { j = j + 1;} // ok - occurs in a different class }; } int w = x= 3; // ok - x at left hand side of assignment int p = x; // ok - instance initializers may access static fields static int u = (new Object(){int bar(){return x;}}).bar(); // ok - occurs in a different class static int x; int m = j = 4; // ok - j at left hand side of assignment int o = (new Object(){int bar(){return j;}}).bar(); // ok - occurs in a different class int j; } Can any one help? Pls its urgent
Your answer should be based upon what the JLS says. If the JLS says it works one way, it does (even if the compiler has a bug in it). That's why we call it a "compiler bug." The compiler isn't working the way the JLS says it should. The JLS is always the definitive source. Corey