黑马程序员技术交流社区

标题: 下列代码的运行结果是(要有思路哈,不能只写答案) [打印本页]

作者: mischen    时间: 2016-5-14 22:32
标题: 下列代码的运行结果是(要有思路哈,不能只写答案)
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;
}
}
作者: 我是你岁哥❤环    时间: 2016-5-16 23:49
个人理解,希望能帮到你
首先,
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





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