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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangyuyus 中级黑马   /  2013-11-21 15:51  /  1191 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {

        /**
         * @param args
         */
        static int x=10;
        static{x+=5;}
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println("x="+x);
        }
        static {x/=3;}
}

程序的输出结果为什么是5呀?


评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

5 个回复

倒序浏览
x+=5 执行 x=x+5  你把x赋值为10  x=15   x/=3 也就是 x=x/3  所以x=5
回复 使用道具 举报
+=5 执行 x=x+5  你把x赋值为10  x=15  
"x="+x;  这个+是连接字符串的功能,所以不会再赋值
x/=3 也就是 x=x/3  所以x=5
回复 使用道具 举报
静态区的代码要先于main方法执行,所以输出的是5
回复 使用道具 举报
(1) static int x=10;
      首先在static区定义了一个静态变量X,并赋初值为10。
(2) 下面这两句是构造代码块,作用和构造函数差不多。
static{x+=5;}
static {x/=3;}
在这儿你吧构造代码块放在了static区,相当于静态绑定x的值,代码在编译时就会得到x的值。
而构造函数是在建立对象的时候才会调用。

(3)静态代码块在编译时绑定了x的值,所以
static int x = 10 ; ==>x = 10
static { x + = 5 ;} ==>x = 15
static { x / = 3 ;} ==>x = 5


回复 使用道具 举报
楼上说的很对。再加一点,因为先执行的静态变量静态代码块,再执行构造代码块,再就是构造函数。一个对象的初始化过程。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马