黑马程序员技术交流社区

标题: 请问 这个程序的结果为什么是5呀? [打印本页]

作者: wangyuyus    时间: 2013-11-21 15:51
标题: 请问 这个程序的结果为什么是5呀?
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呀?



作者: 荣晓鹤    时间: 2013-11-21 16:05
x+=5 执行 x=x+5  你把x赋值为10  x=15   x/=3 也就是 x=x/3  所以x=5
作者: qq316525598    时间: 2013-11-21 16:27
+=5 执行 x=x+5  你把x赋值为10  x=15  
"x="+x;  这个+是连接字符串的功能,所以不会再赋值
x/=3 也就是 x=x/3  所以x=5
作者: 悠然的我    时间: 2013-11-21 16:51
静态区的代码要先于main方法执行,所以输出的是5
作者: smileven    时间: 2013-11-21 17:06
(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



作者: 汪洋大海    时间: 2013-11-21 17:15
楼上说的很对。再加一点,因为先执行的静态变量静态代码块,再执行构造代码块,再就是构造函数。一个对象的初始化过程。




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