Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why this is not compiling in Java?

Tags:

java

If you give

    public class test
    {
        public static void main(String ar[])
        {
            if (true)
                int i=0;
        }
    }

It's not compiling but the same code with braces is:

    public class test
    {
        public static void main(String ar[])
        {
            if (true)
                {int i=0;}
        }
    }

What is the explanation?

like image 480
siva Avatar asked Dec 29 '09 13:12

siva


2 Answers

Variable declarations can only be declared in blocks, basically.

Looks at the grammar for "statement" in the Java Language Specification - it includes Block, but not LocalVariableDeclarationStatement - the latter is part of the grammar for a block.

This is effectively a matter of pragmatism: you can only use a single statement if you don't have a brace. There's no point in declaring a variable if you have no subsequent statements, because you can't use that variable. You might as well just have an expression statement without the variable declaration - and that is allowed.

This prevents errors such as:

if (someCondition)
    int x = 0;
    System.out.println(x);

which might look okay at first glance, but is actually equivalent to:

if (someCondition)
{
    int x = 0;
}
System.out.println(x);

Personally I always use braces anyway, as it makes that sort of bug harder to create. (I've been bitten by it once, and it was surprisingly tricky to spot the problematic code.)

like image 109
Jon Skeet Avatar answered Oct 15 '22 21:10

Jon Skeet


Since you are defining a variable inside if block you need to have brackets.

But below code will compile with a compiler warning.

int i;
if(true)
  i = 0;
like image 24
Upul Bandara Avatar answered Oct 15 '22 23:10

Upul Bandara