public class Test { public static void main(String[] args) { A[] employee = new A[3]; employee[0] = new A();//这里 a++ 的数值是 1 employee[1] = new A();//这里 a++ 的数值是 2 employee[2] = new A();//这里 a++ 的数值是 3 //最终你的 a 的数值是 3,所以下面你会打印3遍 3 for(A e: employee) { System.out.println(e.a); } } }
class A { public static int a = 0;//注意:你这里的变量是 static,也就是说这个变量是“类”变量。 public A() { a++; } } import java.util.*;
public class Test { public static void main(String[] args) { A m = new A();//这里 a++ 的数值是 1 System.out.println(m.a); //打印 1
A n = new A();//这里 a++ 的数值是 2 System.out.println(n.a);//打印 2
A x = new A();//这里 a++ 的数值是 3 System.out.println(x.a);//打印 3
} }
class A { public static int a = 0; public A() { a++; } }
但是相似的程序我用包来就又有点不明白了。package com.corejava; import java.util.*; public class Test2 { public int id; public static int count = 0; public Test2() { count++; id = count; } }import com.corejava.*; import java.util.*;public class Test { public static void main(String[] args) { Test2[] student = new Test2[3]; student[0] = new Test2(); student[1] = new Test2(); student[2] = new Test2();
当然,如果包中没有id只有count的话 package com.corejava; import java.util.*; public class Test2 {
public static int count = 0; public Test2() { count++;
} }主程序中改成输出count就真的会是3个3。 import com.corejava.*; import java.util.*;public class Test { public static void main(String[] args) { Test2[] student = new Test2[3]; student[0] = new Test2(); student[1] = new Test2(); student[2] = new Test2();
import java.util.*;
public class Test
{
public static void main(String[] args)
{
A[] employee = new A[3];
employee[0] = new A();//这里 a++ 的数值是 1
employee[1] = new A();//这里 a++ 的数值是 2
employee[2] = new A();//这里 a++ 的数值是 3
//最终你的 a 的数值是 3,所以下面你会打印3遍 3
for(A e: employee)
{
System.out.println(e.a);
}
}
}
class A
{
public static int a = 0;//注意:你这里的变量是 static,也就是说这个变量是“类”变量。
public A()
{
a++;
}
}
import java.util.*;
public class Test
{
public static void main(String[] args)
{
A m = new A();//这里 a++ 的数值是 1
System.out.println(m.a); //打印 1
A n = new A();//这里 a++ 的数值是 2
System.out.println(n.a);//打印 2
A x = new A();//这里 a++ 的数值是 3
System.out.println(x.a);//打印 3
}
}
class A
{
public static int a = 0;
public A()
{
a++;
}
}
import java.util.*;
public class Test2
{
public int id;
public static int count = 0;
public Test2()
{
count++;
id = count;
}
}import com.corejava.*;
import java.util.*;public class Test
{
public static void main(String[] args)
{
Test2[] student = new Test2[3];
student[0] = new Test2();
student[1] = new Test2();
student[2] = new Test2();
for(Test2 e: student)
{
System.out.println("id = " + e.id);
}
}
}
同样是先调用三次包,但是结果id却是1, 2, 3
package com.corejava;
import java.util.*;
public class Test2
{
public static int count = 0;
public Test2()
{
count++;
}
}主程序中改成输出count就真的会是3个3。
import com.corejava.*;
import java.util.*;public class Test
{
public static void main(String[] args)
{
Test2[] student = new Test2[3];
student[0] = new Test2();
student[1] = new Test2();
student[2] = new Test2();
for(Test2 e: student)
{
System.out.println("count = " + e.count);
}
}
}
这样的结果是
public class TeatAll {
/**
* 这里的staticNum是static修饰的,是“类”变量。 类变量,也就是被所有的类的实例共享的。
* 如果以实例改变了这个“类变量”,其他的所有实例的该数值都会变化。
*/
private static int staticNum;
/**
* 这里的 num 是没有 static 修饰的,它是类的成员变量。 成员变量,是每个类的实例所独享的。 这个是独享的,不会受到其他实例的影响。
*/
private int num; public void showStaticNum() {
staticNum++;
System.out.println("static num : " + staticNum
+ " , 哈哈,我是“类变量”,我是所有类的实例所共享的。你们其中一个类实例改变了我,所有的实例都可以看见我的变化。");
} public void showNum() {
num++;
System.out.println("num : " + num + " , 因为我是“成员变量”,所有我不会被其他的实例修改。");
} /**
* @param args
*/
public static void main(String[] args) { TeatAll a = new TeatAll();
a.showStaticNum();
a.showNum();
TeatAll b = new TeatAll();
b.showStaticNum();
b.showNum();
TeatAll c = new TeatAll();
c.showStaticNum();
c.showNum(); }}
你还是看《Java编程思想(第四版)》吧。里面关于static修饰的静态变量的描述,很详细。我比不了。