静态(static) 和 非静态(non-static)

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的...

 

静态(static)就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。

 

非静态(non-static)就是在编译时,通过new 来实例化和初始化以对象(即通过new在系统中开辟一内存来储存),直到改对象退出程序,才释放空间,也就是说只有对象存在,那块内存就会一直存在。

 

由于两者在系统中内存的分配方式不同,所以在调用静态对象和非静态对象的方法不同。他们的生命周期也不同。

 

例如:静态(static)

 

package StaticS;

class TStatic{ 
    static int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	System.out.println(TStatic.i);//声明对象引用,并实例化 
	TStatic tt = new TStatic(); //同上 
	System.out.println(TStatic.i); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
}

 

输入:

5
5
4
4
4
4

分析:

TStatic t = new TStatic(5); 给static int i 赋值为“5”

TStatic tt = new TStatic(); 又给static int i 赋值为“4”

由于 i 是static 所以 每一次都是在同一个 内存空间上修改 所以值也会变化...

 

例如:非静态(non-static)

package StaticS;

class TStatic{ 
     int i; 
    public TStatic(){ 
             i = 4; 
    } 

     public TStatic(int j){ 
     i = j; 
    } 

public static void main(String args[]){ 
	TStatic t = new TStatic(5);
	System.out.println(t.i); 
	TStatic tt = new TStatic(); 
	System.out.println(t.i); 
	System.out.println(tt.i); 
	System.out.println(t.i); 
} 
} 

 

输出:

5
5
4
5

 

分析:

TStatic t = new TStatic(5); 给static int i 赋值为“5”

TStatic tt = new TStatic(); 又给static int i 赋值为“4”

由于 i 不是 所以 每一次只是在 t or tt 分配的内存空间上修改i的值  所以值至于t or tt相关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值