java static {}的用法

public class PropertyMgr {
/**
*
*/
public static Properties props = new Properties();

static {
try {
props.load(PropertyMgr.class.getClassLoader().getSystemResourceAsStream("config/tank.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
}

/**
* 返回配置文件中参数key的值
* @param key 配置文件中的参数
* @return 配置文件中参数key的值
*/
public static String getProperty(String key) {
return props.getProperty(key);
}
}

我想知道的是 怎么static{}的用法是怎么回事 这个是什么意思

static 关键字很有意思哦

public static String getProperty(String key) { 这里不用说了,静态方法

就说说static{}

称为static代码块 ,也叫静态代码块,

是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次

利用静态代码块可以对一些static变量进行赋值

例子

public class Test5 {
private static int a;
private int b;

static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}

运行结果:
3
hhahhahah
1000
4
5
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-03
static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量
class B {static int a=0;}
B b1=new B();..................;B bn=new B();
b1~bn 都是类B的实例,每个实例都共享 变量a,a是全局变量,属于类B的属性,每个实例都能引用变量a,
加入执行b1.a=1;后 那么b2.a,b3.a,b4.a......bn.a 都等于1了,

static 方法也是类似的

需要注意的是 静态属性和方法属于类方法,加载类后,就已经存在静态属性和方法,实例是需要用new构造出来后 才会有引用
根据先后顺序,就有以下两条规则
1、非静态的方法可以调用静态的或者非静态的属性和方法;
2、静态的方法不可以调用非静态的属性和方法,因为非静态的还不一定存在,只能先构造出来后,再通过实例引用
例如 在main方法中 可以直接调用static 的方法,调用非static方法 需要先构造出类的实例,通过实例才能调用方法
第2个回答  2011-01-08
这个问题是 实例变量和类变量的区别。用static修饰的变量是类变量,而没有的为实例变量。

不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所以对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。
当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类实例成员变量不会被分配内存。但是,类中的类变量被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。类变量是与类相关联的这个类变量就同时改变了其他对象的这个类变量。因此,类变量不仅可以通过某个对象访问,也可以直接通过类名访问。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。
第3个回答  2011-01-07
首先,你需要知道static{}(静态代码块)在程序加载中static是先于构造方法加载的,并且只会加载一次。
两外static块中只能使用static修饰的属性。
程序中的static{}块只是为了加载properties文件信息,这个加载只会被加载一次。
第4个回答  2011-01-07
静态的啦;
就是在程序中只初始化一次而已,只声明一次而已,全局的唯一的。
这段代码的意思就是在程序创建时就加载这个配置文件。
相似回答