黑马程序员技术交流社区

标题: 请教结果为什么为1? [打印本页]

作者: 施俊    时间: 2012-3-19 10:11
标题: 请教结果为什么为1?
class StaticStuff
{
        static int x;
        static {x+=5;}
        public static void main(String[] args)
        {
                System.out.println("x="+x);
        }
        static {x/=5;}
}
静态代码块优先加载,两个静态代码块应该是从上到下执行吗?怎么算出来的x=1呢?
作者: 张开开    时间: 2012-3-19 10:13
不应该是1吗??

作者: 张开开    时间: 2012-3-19 10:17
从上往下优先加载,static {x+=5;}到这里x就是5了,再到static {x/=5;}这里 ,x就是1了,这两个代码快是优先于输出语句执行的
作者: 李深山    时间: 2012-3-19 10:21
static int x;      此时x被初始化为0,x=0;
static {x+=5;}   x=0+5=5;
static {x/=5;}    x=5/5=1;
然后执行打印,此时x=1;所以输出为1;
作者: 李创    时间: 2012-3-19 10:56
class StaticStuff
{
         static int x;
         static {x+=5;}
         public static void main(String[] args)
         {
                 System.out.println("x="+x);
         }
         static {x/=5;}
}
静态是属于类的  当类的字节码文件被加载到内存时,静态的对象引用,静态基本类型变量就分配了内存空间
所以
static int x;//初始化
static {x+=5;}//然后计算
static {x/=5;}
最后结果就是1了
作者: 刘元明    时间: 2012-3-19 11:00
static {x+=5;}     
static {x/=5;}
这两条是静态代码块,用于给类初始化用的,它们都随着类的加载而加载进内存,
而这两者之间没有优先权之分,所以就按顺序执行
作者: 杨华威    时间: 2012-3-19 11:18
static int x; //定义x时,系统会默认给x赋值为:0;(字符串默认赋值为:null ;变量默认赋值为:0)
        static {x+=5;}//静态代码块按照上下顺序优先执行,x=x+5; 结果x=5;
        static {x/=5;}//然后执行此句,x=x/5;结果x=1;
System.out.println("x="+x);//最后执行主函数输出语句:输出:x=1





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2