package test;public class test { static{ int x=5; } static int x,y; public static void main(String[] args) { x--; myMethod(); System.out.println(x + y + ++x);
} public static void myMethod(){ y = x++ + ++x; } } 结果是3 不知道为啥,高手给解释下
System.out.println("main before: x=" + x + ",y=" + y); System.out.println(x + y + ++x); System.out.println("main after: x=" + x + ",y=" + y); } } 结果: before: x=0 after: x=-1 myMethod before: x=-1,y=0 myMethod after: x=1,y=0 main before: x=1,y=0 3 main after: x=2,y=0
static{ int x=5;//局部变量,对全局没有影响 } static int x,y;//初始为0 public static void main(String[] args) { x--;//x=-1 myMethod(); System.out.println(x + y + ++x); //最后x+y=1+0=1 而++x的返回结果是x=2,记住此时虽然x=2,但是前面结果已经出来不能改变 所以最后是1+0+2=3 } public static void myMethod(){ y = x++ + ++x; x++使得x=0返回-1 ++x使得x=1返回1 y=-1+1=0 }
明显输出的x和static中的x不是一个变量,不过#1不解释我还真不知道,学习!!!!!!!
还好楼主发了,要是我做到也OVER了
不用多解释,这样看你就明白了public class test { static { int x = 5; } static int x, y; public static void main(String[] args) { System.out.println("x="+x+" y="+y); x--; System.out.println("x="+x+" y="+y); myMethod(); System.out.println("x="+x+" y="+y); System.out.println(x + y + ++x); System.out.println("x="+x+" y="+y); } public static void myMethod() { y = x++ + ++x; } }
myMethod(); y = x++ + ++x; -- y=-1 + 1 = 0; x=1; y = x++ + ++x; x++不是先把x的值给y嘛? 那现在y = -1 加 ++x 加加X不是先自加嘛 那现在x应该是1啊 y = 0 + 1 ; 为什么是 y = 1 +1 呢??
妈的也受骗了给 static{ int x = 5; }给这个int害了。。如果没有这个的话结果应该是23
static{ int x=5; } 叫初始化块。只有当类第一次加载时才会初始化。 package test;public class test { static{ int x=5; } static int x,y; public static void main(String[] args) { x--;//此时由于test类未被加载,即x未初始化,因为x类型为int,所以x本来是0,执行完后变为-1 myMethod();//test类依旧未被初始化,所以y=-1+1=0,x=1 System.out.println(x + y + ++x);//1+0+2=3
} public static void myMethod(){ y = x++ + ++x; } }
public class JdomXML {
static{ int x=5; }
static int x,y;
public static void myMethod(){ System.out.println("myMethod before: x=" + x + ",y=" + y); y = x++ + ++x; System.out.println("myMethod after: x=" + x + ",y=" + y); }
static{
int x=5;
}
里面的变量x是个临时变量
所以test类成员x的值为0
x--; -- x值为-1myMethod();
y = x++ + ++x; -- y=-1 + 1 = 0; x=1;System.out.println(x + y + ++x); -- 1+0+2=3
int x=5;
}
static int x,y;
public static void main(String[] args) {
x--;
myMethod();
System.out.println(x + y + ++x); } public static void myMethod(){
System.out.println("x=" + x + " ");
y = x++ + ++x;
System.out.println("x=" + x + " ");
}这样程序的输出为:
x=-1
x=1
3这样就能很清楚的看出myMethod方法执行的操作了
static{
int x=5;
}
里面的变量x是个临时变量
主要就是这个误导答题者
public class JdomXML {
static{
int x=5;
}
static int x,y;
public static void myMethod(){
System.out.println("myMethod before: x=" + x + ",y=" + y);
y = x++ + ++x;
System.out.println("myMethod after: x=" + x + ",y=" + y);
}
public static void main(String[] args) {
System.out.println("before: x=" + x);
x--;
System.out.println("after: x=" + x);
myMethod();
System.out.println("main before: x=" + x + ",y=" + y);
System.out.println(x + y + ++x);
System.out.println("main after: x=" + x + ",y=" + y);
}
}
结果:
before: x=0
after: x=-1
myMethod before: x=-1,y=0
myMethod after: x=1,y=0
main before: x=1,y=0
3
main after: x=2,y=0
static{
int x=5;//局部变量,对全局没有影响
}
static int x,y;//初始为0
public static void main(String[] args) {
x--;//x=-1
myMethod();
System.out.println(x + y + ++x);
//最后x+y=1+0=1
而++x的返回结果是x=2,记住此时虽然x=2,但是前面结果已经出来不能改变
所以最后是1+0+2=3
} public static void myMethod(){
y = x++ + ++x;
x++使得x=0返回-1
++x使得x=1返回1
y=-1+1=0
}
static {
int x = 5;
} static int x, y; public static void main(String[] args) {
System.out.println("x="+x+" y="+y);
x--;
System.out.println("x="+x+" y="+y);
myMethod();
System.out.println("x="+x+" y="+y);
System.out.println(x + y + ++x);
System.out.println("x="+x+" y="+y); } public static void myMethod() {
y = x++ + ++x;
}
}
y = x++ + ++x; -- y=-1 + 1 = 0; x=1;
y = x++ + ++x; x++不是先把x的值给y嘛? 那现在y = -1 加 ++x 加加X不是先自加嘛 那现在x应该是1啊
y = 0 + 1 ; 为什么是 y = 1 +1 呢??
int x = 5;
}给这个int害了。。如果没有这个的话结果应该是23
int x=5;
}
叫初始化块。只有当类第一次加载时才会初始化。
package test;public class test {
static{
int x=5;
}
static int x,y;
public static void main(String[] args) {
x--;//此时由于test类未被加载,即x未初始化,因为x类型为int,所以x本来是0,执行完后变为-1
myMethod();//test类依旧未被初始化,所以y=-1+1=0,x=1
System.out.println(x + y + ++x);//1+0+2=3
} public static void myMethod(){
y = x++ + ++x;
}
}
static{
int x=5;
}
static int x,y;
public static void myMethod(){
System.out.println("myMethod before: x=" + x + ",y=" + y);
y = x++ + ++x;
System.out.println("myMethod after: x=" + x + ",y=" + y);
}
public static void main(String[] args) {
System.out.println("before: x=" + x);
x--;
System.out.println("after: x=" + x);
myMethod();
System.out.println("main before: x=" + x + ",y=" + y);
System.out.println(x + y + ++x);
System.out.println("main after: x=" + x + ",y=" + y);
}
}
static {
int x= 5;
}
基本上可以理解为"无效",int x= 5的作用范围只在{}内,执行x--时,因为x没有初始化,默认为0,x--后x = -1;
y = x++ + ++x (-1 + 1,y = 0,x = 1)
执行MyMethod();
x + y ++x = 1+0+2=3