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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class test{
static{
   int x=6;
}
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;
}
}

1 个回复

倒序浏览
个人理解,希望能帮到你
首先,
public static void myMethod(){
  y=x+++++x;
}在这个方法中,你的代码有问题,我改成的是y=(x++)+(++x);
1、这个程序中存在一个静态代码块
static{
   int x=6;
}
一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化,但是这里面的x对后面中的调用的x没有影响,因为第二点
2、在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),所在在主函数main()方法和myMethod()这个两个静态的方法中的x,y的值调用的是在类中定义的静态变量x,y,因为想x,y没有进行赋值操作,所以调用的是它们的默认值0
3、在主函数中
public static void main(String args[]){
  x--;  //执行代码后,此时x的值为-1,即此时在内存中x的值为-1,y的值是0
  myMethod();
  System.out.println(x+y+++x);
}

执行myMethod()时
public static void myMethod(){
  y=(x++)+(++x);     //x++的值为-1,先赋值后运算,x的值为0;  ++x先运算后赋值,x的值为1,++x的值为1,所以y=-1+1=0
}
执行结束后,在内存中x的值为1,y的值是0
所以最后输出x+y+++x中,等价于x+(y++)+x,所以先进行的是y++操作,先赋值后运算,y++的结果为0,所以最后的输出结果是2
最后在内存中x的值为1,y的值也是1
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马