码迷,mamicode.com
首页 > 编程语言 > 详细

java基础

时间:2015-11-23 18:38:11      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

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);是调用   两个是不一样概念的。

 

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

java基础

标签:

原文地址:http://www.cnblogs.com/hjy9420/p/4988832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!