首先我们先看以下一段代码试着得出结果,若能正确得出结果,那说明你理解了static用法:
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);
}
}
======================================================
static 在java里可理解为全局变量,数据是全局共享的,被修饰的属性或方法,可用类名直接方问,当然也可以用对象访问!
static 修饰的属性、静态块、方法 中的代码按顺序执行。
先初始化属性c;
定义v1,v2;
static 语句块;
再执行 Value v=new Value(10);
最后按照main里的执行下去!
在开发过程中,Value.c 可能会遇到Syntax error ...,因为static修饰的属性在获取时需要完成表达式(被使用)
======================================================
运行结果如下:
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