JAVA 中static 关键字深入理解

JAVA 接触也有一阵子了,又要开始IOS 上的单测,OC 和JAVA 中对static 关键字的处理逻辑基本一致,因此,再次理解了static 关键字的原理。

首先,你可能已经知道,static 的方法有以下几点特征:

  1. 不能直接引用非static 变量
  2. 只会在内存中创建一次,可以被重复调用
  3. 被所有对象共享
  4. 直接被类名调用

但是,这篇文章不想只告诉这些条条文文,而要让我们知道背后的一些原因。

Java 程序运行的过程

Java 程序运行时,有下面三个过程:

  1. 加载
    可以理解为将.java 文件动态编译为.class ,然后将.class 文件中的二进制数据读入内存的过程。加载的最终产物是位于 堆 中class 对象。

  2. 连接
    主要是将已经读到内存的类的二进制数据合并到虚拟机的 运行时 环境中去。

  3. 初始化
    在这个阶段主要执行类的构造方法,比如new 一个实例化对象。

    首先,static 的成员是在类加载的时候完成初始化的,而 非static 成员在那之后的初始化阶段完成初始化。

    那么,在加载的时候,非static 还没有完成加载,则必然不能访问。这就解释了为什么static 成员不能访问 非static 成员。因为初始化的时序有先后。
    那 static 成员如何才能访问 非static 成员呢?

static 成员访问 非static 成员

从上面的理解可以知道,只有当 非static 成员完成初始化之后才能被分配内存空间,这之后才能去访问 static 成员。
访问方式:

public class 类名{
    public int ddlxz;
    public static  func(){
        new 类名().ddlxz;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值