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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值