马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 连帅帅 于 2021-8-17 10:52 编辑
技术点:静态变量和静态代码块的使用
题目:请看以下代码输出的结果是什么?public class Test {
static {
int x = 5;
}
static int x, y;
public static void main(String args[]) {
x--;
myMethod();
System.out.println(x + y + ++x);
}
public static void myMethod() {
y = x++ + ++x;
}
}
涉及到的知识点:
静态属性和静态代码块只在类加载的时候执行一次,随后被该类共用,其值存储在jvm的常量池中
在类中加载顺序为:静态属性(静态代码块) > 构造方法 > 普通属性(普通代码块),小括号中的是平等的,如果同时出现,或者有多个,则按出现顺序执行
静态代码块中变量不为类共用,类中的静态变量才为类共用
注意i++是先用后加,++i是先加后用
明白了以上几点,我们来看这道题
类进入编译阶段,首先执行代码块int x=5,注意看第三条,该变量不为类共用
然后定义了两个静态变量,x和y,并有初始默认值0
将main方法和myMethod方法进行编译,至此编译阶段结束
然后main方法运行,执行x--,因为其默认值为0,所以,此处x变为-1
然后执行myMethod方法,执行等式y=x++ + ++x;注意看第四条,此等式可转换为y=-1+1,得出此时y=0,x=1(进行了两次自增)
方法回到main方法(感兴趣的可以参考JVM的程序计数器,了解一下为什么会准确无误的又回来了了呢?)
执行输出语句x+y + ++x,即1+0+2,最后输出3
|