共计 1058 个字符,预计需要花费 3 分钟才能阅读完成。
download:图灵 JAVA 互联网架构师五期
java 中的 static 关键字说明显还得靠 JVM
前言
Java 中 Static 想必大家肯定使用过吧。他是用来润饰类或者成员变量或者方法的。
对于 Static 的用法还是很简略的,因为他就是一个修饰词。然而如果不理解他润饰的作用原理的话,可能会闹出 bug 来
变量
那么咱们拜访对象中的属性天然也就存放在堆中的。
然而当 static 润饰属性之后他就发生了变动了。
class Demo {
// 成员变量
public int num = 100;
// 动态成员变量
public static int count = 200;
// 动态方法
public static void method(){
System.out.println(count);
}
}
复制代码
num 属性属于惯例属性,count 属性属于动态变量。他们不只仅是名称上的不同。从 JVM 的角度看他的存放地位也不同。
首先 num 依赖于具体的对象,所以他和对象存放在一起都是堆中。
而 count 独立于对象。JVM 中顺便有一块空间用于存放动态变量。这个空间咱们叫做方法区。
方法
除了润饰变量外,static 还可能润饰方法。被润饰的方法咱们叫做动态方法。动态方法的个性和动态变量一样都属于类而不是对象。动态方法外部只能拜访动态变量而无奈通过 this 对象进行拜访对象属性。
总结下来就是动态方法外部只能拜访动态变量无法访问非动态变量。
除了动态方法外,还有一个非凡的方法叫做动态代码块。这个方法不需要咱们筹备方法名,入参,出参等等。只需要筹备方法体。对于方法体外部和动态方法外部申请是一样的。
对于动态代码块和动态方法他们和一般方法还有一个重要的区别就是执行时机。动态变量与一般变量的区别就是内存分布地位,而方法是在栈中操作的,不涉及内存的存储,所以区别就是方法执行的时机。这里需要咱们提前了解点类加载机制。
首先咱们一个类的加载分为五个过程。首先是加载 class 元信息,最初一步是进行初始化。至于后面三步咱们这里可能不理解。重点知道在类加载的最初阶段会进行初始化,而初始化的操作就是执行动态方法和动态代码块。
从类加载过程中咱们也能够看的进去动态方法是不依赖于对象的调用的。因为动态方法中只能使用到动态属性。也就是说动态属性使用时还没有创建对象。这也佐证了动态变量不依赖对象的说法。
总结
本文次要讲解 Java 基础,请原谅我没有华丽的词藻渲染杰出的文章。诚然基础但经常是咱们容易忽略的学识点。
只有不断的学习,才能不断的提高,对于 static 的进一步使用场景,目前我能想到的就是单例模式中会使用。