A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施俊 中级黑马   /  2012-3-19 10:11  /  1645 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StaticStuff
{
        static int x;
        static {x+=5;}
        public static void main(String[] args)
        {
                System.out.println("x="+x);
        }
        static {x/=5;}
}
静态代码块优先加载,两个静态代码块应该是从上到下执行吗?怎么算出来的x=1呢?

6 个回复

正序浏览
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
回复 使用道具 举报
static {x+=5;}     
static {x/=5;}
这两条是静态代码块,用于给类初始化用的,它们都随着类的加载而加载进内存,
而这两者之间没有优先权之分,所以就按顺序执行
回复 使用道具 举报
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了
回复 使用道具 举报
static int x;      此时x被初始化为0,x=0;
static {x+=5;}   x=0+5=5;
static {x/=5;}    x=5/5=1;
然后执行打印,此时x=1;所以输出为1;
回复 使用道具 举报
从上往下优先加载,static {x+=5;}到这里x就是5了,再到static {x/=5;}这里 ,x就是1了,这两个代码快是优先于输出语句执行的
回复 使用道具 举报
不应该是1吗??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马