java基础(1)

class test  
{
    static {
       
        a=3;
        //System.out.println(a);
    }
    
    static int a = 1;
	String b = "ff";
	

    

	public static void main (String[] args) throws java.lang.Exception
	{
		System.out.println("hi");
		new test();
		
	}
	

}

  这样的代码有没语法错误呢?  实际上是没有的。可能有人认为是不行的,变量定义在代码块赋值后面,先赋值了。既然这样是对的,那么看下面这段代码对不对呢。

class test  
{
    static {
       
        a=3;
        System.out.println(a);
    }
    
    static int a = 1;
	String b = "ff";
	

    

	public static void main (String[] args) throws java.lang.Exception
	{
		System.out.println("hi");
		new test();
		
	}
	

}

  在静态代码块中有一条输出语句,应该有挺多人看了上面的例子以为这段代码的语法是正确的吧。其实System.out.println(a);这段代码是有错误的。

a=3;是赋值

System.out.println(a);是调用   两个是不一样概念的。

 

为什么错呢?这个是编译期异常。遵循一个先定义后使用的原则。不过能赋值这里就不太能够理解了。难道是先加载类的结构信息,构造函数,方法,属性等。即使变量定义在最后一行,还是可以在第一行进行赋值。

posted @ 2015-11-23 16:35  Hong_Jerry  阅读(193)  评论(0编辑  收藏  举报