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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zc332750 中级黑马   /  2014-2-8 10:44  /  1467 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StaticStuff
{
static int x=10;
static { x+=5;}
public static void main(String args[])
{
System.out.println("x=" + x);
}
static { x/=3;}
}
为何打印出来是5?

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 神马都是浮云

查看全部评分

4 个回复

倒序浏览
程序运行:   加载类 , 静态代码块对类初始化 , 静态代码块 优先于main()函数 15/3 =5

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
是5就是对的,本来是10,静态代码块会先执行,第一次后是15,第二次后变成5了,然后才输出
回复 使用道具 举报
首先应明白的一个问题是:类中函数的优先级问题。
优先级由高到低依次是:静态代码块>构造代码块>构造方法>自定义方法

你定义了两个静态代码块,先开始定义m=10,然后执行第一个静态代码块x+=5变成15,然后执行第二个静态代码块x/=3变成5,最后执行main函数,输出x=5。

希望可以帮到你

--------手打内容,请勿copy,也勿paste,可以照写---------

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
程序先运行 静态代码块static { x+=5;},这里x又调用static int x=10;    ===》x=15  ;接着运行静态代码块static { x/=3;}====》x=5

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马