JAVA学习之Static

[IMG]upload/sun.gif[/IMG]
Static涉及到的有类(static)变量、类(static)方法、静态初始化。
结合[URL=http://www.javaresearch.org/article/showarticle.jsp?column=544&thread=9703]JR中Java中static、this、super、final用法简谈(一)[/URL]这篇文章及《Thinking in java》用一个完整的程序来呈现Static关键字的用法!

[IMG]upload/sun.gif[/IMG]
Static涉及到的有类(static)变量、类(static)方法、静态初始化。
结合[URL=http://www.javaresearch.org/article/showarticle.jsp?column=544&thread=9703]JR中Java中static、this、super、final用法简谈(一)[/URL]这篇文章及《Thinking in java》用一个完整的程序来呈现Static关键字的用法!

[CODE_LITE]1. /**
2. *MyClass.java
3. *www.blueclassic.net
4. *2005.08.31
5. */
6.
7. class MyClass {
8. static int statInt = 4;
9. static Double statDouble = 16.0;
10. int instInt;
11. double instDouble;
12.
13. public static void statMethod(){
14. System.out.println (”statInt=”+statInt+
15. “;statdouble=”+statDouble);
16. }
17. public static void instMethod(){
18. System.out.println(”instInt=”+instInt+
19. “;instdouble=”+instDouble);
20. }
21. public MyClass(int intArg, double doubleArg){
22. instInt = intArg;
23. instDouble = doubleArg;
24. }
25. public static void main(string args[]){
26. MyClass instance1 = new MyClass(1,2.0);
27. MyClass instance2 = new MyClass(3,4.0);
28.
29. MyClass.statMethod(); //Outputs:statInt=4;
30. //statDouble=16.0
31.
32. instance1.instMethod(); //Outputs:instInt=1;
33. //instDouble=2.0
34. instance1.statMethod(); //Outputs:statInt=4;
35. //statDouble=16.0
36.
37. instance2.instMethod(); //Outputs:instInt=3;
38. //instDouble=4.0
39. instance2.statMethod(); //Outputs:statInt=4;
40. //statDouble=16.0
41. }
42. } [/CODE_LITE]

[ALIGN-CENTER][IMG]upload/myclass.gif[/IMG]
MyClass的框架图[/ALIGN-CENTER]
从图中Static方法和数据的单个(共享)副本是因为类和该类的所有实例而存在。通过一个实例或通过类本身可以访问static成员。

====类(static)变量=====

[CODE_LITE]public class Count {
private int serialNumber;
private static int counter = 0;
public Count() {
counter++;
serialNumber = counter;
}
}[/CODE_LITE]
在这个例子中,被创建的每个对象被赋于一个独特的序号,从1开始并继续往上。变量counter在所有实例中共享,所以,当一个对象的构造函数增加counter时,被创建的下一个对象接受增加过的值。
Static变量在某种程度上与其它语言中的全局变量相似。Java编程语言没有这样的全局语言,但static变量是可以从类的任何实例访问的单个变量。
如果static变量没有被标记成private,它可能会被从该类的外部进行访问。要这样做,不需要类的实例,可以通过类名指向它。
[CODE_LITE]public class StaticVar {
public static int number;
}
public class OtherClass {
public void method() {
int x = StaticVar.number;
}
}[/CODE_LITE]

[B]======类(static)方法======[/B]

[CODE_LITE] public class GeneralFunction {
public static int addUp(int x, int y) {
return x + y;
}
}
public class UseGeneral {
public void method() {
int a = 9;
int b = 10;
int c = GeneralFunction.addUp(a, b);
System.out.println(”addUp() gives ” + c);
}
}[/CODE_LITE]
因为static方法不需它所属的类的任何实例就会被调用,因此没有this值。结果是,static方法不能访问与它本身的参数以及static变量分离的任何变量。访问非静态变量的尝试会引起编译错误。

[CODE_LITE]public class Wrong {
int x;
public static void main(String args[]) {
x = 9; // COMPILER ERROR!
}
}[/CODE_LITE]

Main()是静态的,因为它必须在任何实例化发生前被顺序地访问,以便应用程序的运行。
静态方法不能被覆盖成非静态。

[FLASH=128,15,]http://doubleaf.com/wp-content/plugins//AsySound.swf?http://blog.ekoala.net/music/newage/era/the.mass/05.MP3[/FLASH]

4 Responses to “JAVA学习之Static”

  1. Gravatar Icon E.Qiang Says:

    呵呵~看不懂:(
    好久没联系啦,祝生活快乐!
    [F]Sly smile[/F]

  2. Gravatar Icon airblue Says:

    哈哈!~~~就是哦,忙着给学生上课了吧!

  3. Gravatar Icon airblue Says:

    E.Qiang这家伙看也不看清楚,是Opera的生日!晕哦!~~~~

  4. Gravatar Icon E.Qiang Says:

    哈哈~失误失误啦。需要时再找你啦~~

Leave a Reply