在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的...
静态(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相关