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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康大玮 中级黑马   /  2012-10-30 23:19  /  1639 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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; }
        }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

5 个回复

倒序浏览
静态代码块里的x 和 静态属性x 不是同一个x
回复 使用道具 举报
l两次定义int x,编译会报错!
回复 使用道具 举报
本帖最后由 林晓泉 于 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; }
         }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
说下我个人的理解,坦白讲,至于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.        
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
  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
复制代码
不知道我的理解对不对,求高手帮忙解释下~~~~~~~~~~~

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

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