黑马程序员技术交流社区
标题:
求解
[打印本页]
作者:
康大玮
时间:
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!
package test;
public class Test4 {
static {
int x = 5;
}
static int x, y;
public static void main(String[] args) {
x--; //这个x,是static int x,y的 x,上去就--,此时x值为-1
myMethod(); //转到myMethod()方法中
System.out.println(x); //输出1,x的两次++
System.out.println("y:"+y); //不知道为什么是0
System.out.println(x + y + ++x); //x是1, ++x是2,y是0,所以结果是3
}
public static void myMethod(){
y = x++ + ++x; //两次++,此时x值为1,至于y为什么是0,不解
}
}
复制代码
作者:
坚持不懈
时间:
2012-10-31 00:52
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; }
}
一进入主函数 类代码快先执行 int x=5 存放在方法区中
静态成员 5被int x=0删除, int y=0 存放在方法区中
方法区中x-- 结果是-1 ,
往下执行myMethod(); 在栈内存中分配一个内存, 遇见 y=x++ + ++x 结果是x++结果是0(因为上面算X=-1 -1+1) + ++x 结果是1,方法中的X自加后变1 栈内存中的Y的值是1
X的值得是1 , 打印输出 X=1
方法区中的y 结果没变一直都是0 (初使值) y=0
1+0+2=结果输出3
复制代码
不知道我的理解对不对,求高手帮忙解释下~~~~~~~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2