黑马程序员技术交流社区
标题:
请问 这个程序的结果为什么是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