当前位置:编程学习 > JAVA >>

Java中static修饰的变量问题

public class TestThis {

private static int i;

public static void main(String[] args) {

TestThis t = new TestThis();

t.get();
t.set(1);
t.get();

TestThis c = new TestThis();

c.get();
c.set(5);
c.get();
}

public TestThis() {

}

public static void get() {

System.out.println("i的初始值---" + i);

System.out.println("隐示调用i的值 ---" + set(i));

System.out.println("显示调用this i的值--" + set(i));

}

public static int set(int i) {

return i++;
}
}


为啥输出的结果是0000000呢??????? java static --------------------编程问答--------------------
public static int set(int i) {

return i++;
}

你调用的i只不过是函数里面的i而已,返回之后没有赋值给全局变量i(方法里面的i和全局的i完全没关系),这个问题和静态也没关系,只有一个类而已 --------------------编程问答-------------------- 帮你改了一下。自己再运行一下吧!!

package pkg;

public class TestThis {

 private static int i;

 public static void main(String[] args) {

 TestThis t = new TestThis();

 t.get();
 t.set(1);
 t.get();

 TestThis c = new TestThis();

 c.get();
 c.set(5);
 c.get();
 }

 public TestThis() {

 }

 public static void get() {

 System.out.println("i的初始值---" + i);

 System.out.println("隐示调用i的值 ---" + set(i));

 System.out.println("显示调用this i的值--" + set(i));

 }

 public static int set(int j) {//这里的i换成j 因为在最上面已经定义了一个全局的静态变量i
 
 i=j;//把j赋值给上文中定义的全局变量i
 
 return i++;
 }
 }

--------------------编程问答-------------------- 非常感谢。。。。。 --------------------编程问答--------------------
引用 2 楼 csdt_csdt 的回复:
帮你改了一下。自己再运行一下吧!!

package pkg;

public class TestThis {

 private static int i;

 public static void main(String[] args) {

 TestThis t = new TestThis();

 t.get();
 t.set(1);
 t.get();

 TestThis c = new TestThis();

 c.get();
 c.set(5);
 c.get();
 }

 public TestThis() {

 }

 public static void get() {

 System.out.println("i的初始值---" + i);

 System.out.println("隐示调用i的值 ---" + set(i));

 System.out.println("显示调用this i的值--" + set(i));

 }

 public static int set(int j) {//这里的i换成j 因为在最上面已经定义了一个全局的静态变量i
 
 i=j;//把j赋值给上文中定义的全局变量i
 
 return i++;
 }
 }




return i++;貌似没什么意义,要么return i; 要么return ++i;
--------------------编程问答-------------------- 我想你是被i这个变量给搞糊涂了,你set方法中参数i和你成员变量i不是一回事,这个你要知道。
分析代码:
首先你调用get,那么get方法输出的都是0,这个没问题。
在调用set方法,你传了个参数1,在set方法中放回1后再+1,这个方法是有返回值的,但是你t.set后并没有接受返回来的值,也就是你调用这个方法没有任何意义。
然后你在调用t.get方法,其实和第一部调用get是一回事,你的成员变量i并没有因为你调用set方法而改变。
		t.get();
t.set(1);
t.get();

画图说明:


下面这段代码,不知道是不是你想要的结果。
package com.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test {
private static int i;

public static void main(String[] args) {

Test t = new Test();

t.get();
i = t.set(1);
t.get();

Test c = new Test();

c.get();
i = c.set(5);
c.get();
}

public Test() {

}

public static void get() {

System.out.println("i的初始值---" + i);

System.out.println("隐示调用i的值 ---" + set(i));

System.out.println("显示调用this i的值--" + set(i));

}

public static int set(int i) {
return i++;
}
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,