Java 静态变量分析

本人第一次写博客,这个冲动的来源于敬爱的陈宇明博主的一篇程序人生,本人开发也没有多久,一年时间也经历了很多坑。一直只拿别人的知识,我也想奉献一点自己的。为我们码农同胞献上我的微薄之力。有不对之处一定要指出。我选择Java静态变量分析的原因,是最开始我对这个静态变量就很不懂,觉得这是一个很神奇有很危险的东西(至今我也觉得它比较危险),废话不多说直接讲解。
  1. static含义:与类共存,static修饰的变量,供静态方法和对象公用(单独的空间存取,不用每个对象都有一份,节约内存),static修饰的方法(类方法)中不能定义this,super关键字,能被成员方法调用,但不能调用成员方法。
  2. 静态变量初始化的具体流程:当首次创建class对象时,或者class类中的静态方法/静态域首次被访问时,Java解释器会载入这个class文件,完成所有的静态初始化动作,故静态变量只在类加载时候进行一次。
  • public class TextClass {
static Bowl bowl = new Bowl(0);
public static void main(String[] args) {
System.out.println("Creating new TextClass() in main");
Bowl bowl1 = new Bowl(0);
System.out.println("bowl:"+bowl+",bowl1:"+bowl1);
}

static class Bowl{
Bowl(int marker){
System.out.println("Bowl("+marker+")");
}
}
}
上面的代码说明初始化静态变量(静态变量bowl)是在对象创建之前,并且每次打印变量bowl 和 bowl1的地址都是不变的这也说明了他们初始化化动作只在类加载时进行一次。
     3. 静态变量存储的位置:
  • data包含静态初始化的数据,所以有初值的全局变量和static变量在data区。段的起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你的程序大小没有关系,但和程序使用到的全局变量,常量数量相关。[后续博客写内存分析时详细讲解]
4.静态优缺点:
  • 优点:对对象的共享数据进行单独空间的存储,节约空间,没有必要每个对象都储存一份。即使对象没有创建也可以直接调用,与对象分离开。
  • 缺点:生命周期较长(内存不能有效的进行回收),多进程进行访问时出现数据错误(典型的买票机制),访问出现局限性。

你可能感兴趣的:(Java 静态变量分析)