首页 > 编程语言 > 详细

java基础

时间:2015-11-23 18:35:55      阅读:228      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!