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关键字说分明还得靠JVM】本文主要解说Java根底,请原谅我没有华美的词藻渲染出色的文章。固然根底但常常是我们容易疏忽的学问点。
只要不时的学习,才干不时的进步,关于static的进一步运用场景,目前我能想到的就是单例形式中会运用。
推荐阅读
- Java|525、Java工程师的进阶之路 -【 RocketMQ (二)】 2022.01.06
- leetcode|优先级队列(堆)
- java|java 链表 最小堆优先级队列_堆和优先队列
- rabbitMQ|通过两种方式手写一个消息队列
- spring|阿里内部进阶学习SpringBoot+Vue全栈开发实战文档
- 技术书籍推荐|技术书籍推荐1(Java并发编程的艺术、深入浅出MyBatis技术原理与实战、RabbitMQ实战、微服务架构与实践、架构探险:从零开始写分布式服务框
- 分布式技术原理与算法解析|分布式数据(缓存技术)
- Redis|27 Redis 缓存污染问题
- 编程|手写Spring核心原理MVC实现