在Java中常会使用到static去定义一个属性、方法、或代码块。那么这些static的内容有什么特点呢?
首先,要知道类中的static内容是什么时候创建、加载或执行的呢?对于static的属性(就是静态域),它的创建是在类加载的时候进行的,创建的静态域如果是引用类型,就会存在堆空间中,但是要知道,这个时候是没有这个类的对象的,后续在创建这个类的对象的时候是不会再去创建静态域的引用实体的,如果要使用,就是通过实体对象的meta数据指向方法区中的静态域,来使用,所以,可以得出一个结论,就是对于所有的实体对象,他们的静态域都是同一个引用对象。
下面的代码中可以看出来:
public class Calculate {
private static Object o = new Object();
public Object get(){
return o;
}
@Test
public void test0() {
for(int i = 0;i<5;i++){
Calculate calculate = new Calculate();
Object o = calculate.get();
System.out.println(o);
}
}
}
输出的结果是:
java.lang.Object@1ed02dcb
java.lang.Object@1ed02dcb
java.lang.Object@1ed02dcb
java.lang.Object@1ed02dcb
java.lang.Object@1ed02dcb