**从0开始说java(3.2)从static说起

本节可能令人感到不适,谨慎观看(本节为编译原理的引申节)

上一个程序我们写的时候,出现了一个关键字,static,这是什么东西呢?
static称为静态,被它修饰的变量称为静态变量(也称全局变量和类变量,之所以有这么多名字是观察它的点不同)。

静态变量:

静态变量具有全局属性,即一旦被静态变量修饰,在本类的所有位置,均可使用,这也是静态变量称为全局变量的原因。这不同于普通变量,类属性下的普通变量(也称类的属性)也要被普通方法使用需要this关键字,普通变量也不能被主方法直接使用(因为主方法是一个典型的静态方法)
那为什么静态变量右被称为类变量?因为静态变量是归属于类来初始化的,而普通变量归属于实例。所以其他类想使用本类的静态属性,只需类名.变量名即可。
ps:静态变量还有一个注意点是,它是被所有本类实例共享的变量,这在下一次课上解释了面向对象编程后再做说明。
停,就到这了,剩下的不说了。

是不是听的有点迷糊,那在加点料。

静态方法:

上面提到主方法是静态方法,在程序中显而易见,main方法的确被static修饰过嘛。静态方法有两个特点。
1:同静态变量,如果其他类想使用本类的静态方法,只需类名.方法名即可。
2:静态方法内部不能使用普通变量(类的属性)和普通方法,因此也不能使用this关键字。
ps:this关键字:本类方法调用本类属性,或本类方法调用本类方法使用。

静态代码块:

静态代码块是指在类加载过程中,只会执行一次的语句块。
ps:所谓的类加载过程,其实是字节码文件由jvm执行并分配空间的过程。
需要注意的是,并不是生成了class文件,就一定会触发类加载。
那么你是不是会有疑问,为什么static变量是全局的?为什么静态代码块只执行一次?为什么他们不需要创建实例就可以执行?
有想了解的,可以看我写的关于java代码如何一步步被虚拟机执行的,以及虚拟机在执行时,各部分又干了什么?
3.jvm的类加载机制
4.虚拟机内存图解及字节码执行过程
从jvm的角度来分析静态变量和静态方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容