Java中的static关键字

2023-03-14 17:15:08 浏览数 (1)

关于Java中的Static关键字

Static关键字的解释

Static关键字,即静态关键字,他在Java中是一个修饰性的关键字,不仅仅可以用于修饰方法,也可以的修饰属性,也可以直接修饰代码块。通过他的修饰,原本的方法、属性或者是代码块就会变成静态的。

通过这样的解释,似乎真的是听君一席话,如听一席话。

下面我会进行详细的解释。

Static关键字带来的影响

众所周知,Java程序是运行在Java虚拟机中的,而虚拟机中有三个部分,栈、堆、和方法区。

在程序开始运行的时候,Java虚拟机首先会将main程序入栈,所使用的的基本数据类型被用于创建某个变量的时候,这个变量会被加载到栈中;当对定义的基本数据类型进行赋值的时候,Java虚拟机会在堆中开辟一个空间用于存放这个变量的值。而方法区则用于存放字节码文件。

由此可见,一般情况下程序在加载的时候,一个变量的生成,需要先去堆中去开辟空间再进行存值,当变量发生变化的时候,可能就需要重新进行加载,并指向新的位置。在使用的时候也需要在栈中先找到这个变量,再去读取堆中这个变量的值。

当添加了Static关键字后,所有被Static关键字修饰的都会在程序初始化的时候在方法区内进行加载,并且只加载一次。变量需要改变或者使用的时候,可以直接去方法区内进行修改或者调用。相比于普通的调用方法,效率会更高。

Static关键字的具体使用

修饰方法

当Static用于修饰某个方法时,这个方法可以直接进行调用

如果这个方法没有static修饰,必须在这个方法所在的类中进行实例化之后才能进行调用

例如:

代码语言:javascript复制
Thread.sleep(5000);//这里暂停5秒

//这里直接调用了sleep这个方法,之所以可以直接调用是因为他是被static修饰的
//这里展示了sleep的源码
public static native void sleep(long millis) throws InterruptedException;

属性修饰

当Static用于修饰一个属性的时候,这个属性随着类的加载而加载,存放在方法区内,且仅被加载一次

代码语言:javascript复制
private static String name;
//这样使用static修饰的变量,叫做静态变量,会随着类的加载而加载,存放的地址是方法区,并且只加载一次

静态代码块

使用Static加载一块代码,这块代码也会类似于被Static修饰的变量,随着类的加载而加载,在程序最开始的时候就会被执行,且只被加载一次。

代码语言:javascript复制
static {
    System.out.println("我是静态代码块中的内容");
}
//这个会随着类的加载而加载,即在整个程序的最开始的时候进行执行。而且只加载一次就可以,不管其出现在什么地方

0 人点赞