欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中静态变量与非静态变量的区别

程序员文章站 2024-02-21 15:14:28
...

java在类加载的过程中,再把.class文件加载进内存的时候就为静态变量在运行时数据区的方法区中分配内存,而且只分配一次.
而非static变量每创建一个实例的时候就会在堆中被分配一次内存,每个实例都有一个独立的非static变量
简而言之,static变量属于整个类,而不属于任何一个实例,生命周期取决于类.
非static变量,属于实例,生命周期跟着实例走

public class Test {
int b=10;
public static void main(String[] args) throws Exception {
Test t1 = new Test(); //创建Test类实例的时候,为这个实例在堆内存创建一个b=10的对象
t1.b=20; //修改了堆内存中,该t1对象的b=20,与类以及类的其他实例对象无关.
System.out.println(t1.b);
Test t2 = new Test(); //重新创建一个类对象,就重新为这个对象在堆中分配一次内存
System.out.println(t2.b);

}

结果:20 ,10

public class Test {
static int a=10;
public static void main(String[] args) throws Exception {
Test t1 = new Test(); //创建Test类实例的时候,不会给a在堆中分配内存,因为a是static变量,在类加载的时候就已经被分配过了
t1.a=20; //a是static变量,所有实例共享,因为修改t1对象a的值,就是修改Test类在方法区中的值
System.out.println(t1.a);
Test t2 = new Test(); //重新创建一个,仍然不会分配a对象的内存,因为所有实例共享一个位于方法区的static的a变量
System.out.println(t2.a); //获取的a是在方法区,之前被t1实例修改过,所有为20
}

结果:20 ,20