java中static的用法

如题所述

static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。拿以下程序为例

class Value{
static int c=0;
Value(){
c=15;
}
Value(int i){
c=i;
}
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
Value v=new Value(10);
static Value v1,v2;
static{
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1=new Value(27);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v2=new Value(15);
prt("v1.c="+v1.c+" v2.c="+v2.c);
}

public static void main(String[] args){
Count ct=new Count();
prt("ct.c="+ct.v.c);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
prt("ct.c="+ct.v.c);
}
}

运行结果如下:

v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11

这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的主题,在此不做详细讨论,请参考Think in Java中的讲解。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-30
java中static作为一个静态的全局变量,可以在函数,类方法中使用,如果定义时在前面加上public,还可在外部使用
第2个回答  2011-04-30
static 这个就不用多说了 是用来申明方法、属性为静态的。如果一个方法、属性申明为静态那访问他时不需有一个实例对象,直接类名.方法名、属性名即可访问。用他申明的方法、变量可以用以全局。比如可以计算一个类实例了多少次
第3个回答  2011-04-29
static 声明成变量例如 static int a = 1; 就是全局变量,只有一份 也就是成员变量, 也可以不初始化的好处
static {} 静态代码块, 程序运行的时候加载
public static void method() {} 静态方法可以直接调用, 和上面的静态属性也是一样, 直接类名调用就可以了不用在new.
== 很多, 不一一列举
第4个回答  2011-04-30
记住是 class级别的,不是实例级别的,加载类时执行的
相似回答