黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: 康大玮    时间: 2012-10-30 23:19
标题: 求解
public class Static {
        static {
                int x = 5;
        }
        static int x, y;

        public static void main(String args[]) {
                x--;
                myMethod();
                System.out.println(x);
                System.out.println(y);
                System.out.println(x + y + ++x);
        }

        public static void myMethod(){ y = x++ + ++x; }
        }
作者: 袁艳超    时间: 2012-10-30 23:41
静态代码块里的x 和 静态属性x 不是同一个x
作者: 陈小红    时间: 2012-10-30 23:53
l两次定义int x,编译会报错!
作者: 林晓泉    时间: 2012-10-31 00:07
本帖最后由 林晓泉 于 2012-10-31 00:50 编辑

public class Static {
            static {
                  x = 5;//这个是对static int x初始化
              //int x=5; 定义变量,与下面的x 不一样
         }//静态代码块只执行一次,类加载完之后就没有了
  static int x,y;//类加载之后一直在

        public static void main(String args[]) {
     x--;//
     System.out.println(x);
                 myMethod();
                 System.out.println(x);
                 System.out.println(y);
                 System.out.println(x + y + ++x);
         }

        public static void myMethod(){
     System.out.println(x);
   y = x++ + ++x; }
         }


作者: 崔政    时间: 2012-10-31 00:27
说下我个人的理解,坦白讲,至于y为什么是0,我也不清楚,坐等高人,
我运行了一下,进行了分析
还有,对于楼主能问出这样的问题,用毕老师的话说就是,很DIAO!
  1. package test;

  2.         public class Test4 {
  3.                  static {
  4.              int x = 5;
  5.      }
  6.      static int x, y;


  7.                 public static void main(String[] args) {
  8.                         x--;                //这个x,是static int x,y的 x,上去就--,此时x值为-1
  9.             myMethod();        //转到myMethod()方法中
  10.             System.out.println(x);        //输出1,x的两次++
  11.             System.out.println("y:"+y);                        //不知道为什么是0
  12.             System.out.println(x + y + ++x);        //x是1, ++x是2,y是0,所以结果是3

  13.                 }
  14.                 public static void myMethod(){
  15.                         y = x++ + ++x;                         //两次++,此时x值为1,至于y为什么是0,不解
  16.                        
  17.                 }
  18.     }

  19.        
复制代码

作者: 坚持不懈    时间: 2012-10-31 00:52
  1. public class Static
  2. {
  3.         static
  4.         {
  5.                 int x = 5;
  6.         }
  7.         static int x, y;

  8.         public static void main(String args[])
  9.        {
  10.                 x--;
  11.                 myMethod();
  12.                 System.out.println(x);
  13.                 System.out.println(y);
  14.                 System.out.println(x + y + ++x);
  15.         }

  16.         public static void myMethod()
  17.         { y = x++ + ++x; }
  18. }

  19. 一进入主函数  类代码快先执行 int x=5 存放在方法区中

  20. 静态成员 5被int x=0删除,  int y=0 存放在方法区中

  21. 方法区中x-- 结果是-1 ,   

  22. 往下执行myMethod();  在栈内存中分配一个内存,    遇见  y=x++ + ++x     结果是x++结果是0(因为上面算X=-1 -1+1)  + ++x 结果是1,方法中的X自加后变1  栈内存中的Y的值是1


  23. X的值得是1 ,  打印输出 X=1
  24. 方法区中的y 结果没变一直都是0 (初使值) y=0

  25. 1+0+2=结果输出3
复制代码
不知道我的理解对不对,求高手帮忙解释下~~~~~~~~~~~




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