static的详细理解

来源:互联网 发布:北大青鸟软件学费 编辑:程序博客网 时间:2024/05/17 22:06

被static修饰的变量 称为类变量或者静态变量,在类加载的时候就会被分配空间, 生命周期取决于类的生命周期. 实例变量也就是属于对象的, 在new对象的时候被分配空间,生命周期取决于对象也就是实例的生命周期.

静态修饰符叫静态修饰符呢大家都知道程序任何变量或者代码都编译时由系统自动分配内存来存储而所谓静态指编译所分配内存会直存直程序退出内存才会释放空间也只要程序运行块内存会直存样做有意义呢 Java程序里面所有东西都对象而对象抽象类对于类而言要使用成员普通情况下必须先实例化对象通过对象引用才能够访问些成员有种情况例外该成员用static声明(里所讲排除了类访问控制)例: 未声明static class ClassA{ int b; public void ex1(){ … } } class ClassB{ void ex2{ int i; ClassA a = new ClassA(); i = a.b; //里通过对象引用访问成员变量b a.ex1; //里通过对象引用访问成员函数ex1 } } 声明static class ClassA{ static int b; static void ex1(){ … } } class ClassB{ void ex2{ int i; i = ClassA.b; //里通过类名访问成员变量b ClassA.ex1; //里通过类名访问成员函数ex1 } } 通过上两种比较知道static用来修饰类成员主要作用了java类库当有多类成员都声明static让用户需要实例化对象引用成员基本有Integer.parseInt()Float.parseFloat()等等用来把对象转换所需要基本数据类型样变量和方法我们又叫做类变量和类方法 接下来讲下被static修饰变量值问题刚才前面讲过被static修饰成员编译时由内存分配块内存空间直程序停止运行才会释放说该类所有对象都会共享块内存空间看下下面例子: 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); //声明对象引用并实例化 TStatic tt = new TStatic(); //同上 System.out.println(t.i); System.out.println(tt.i); System.out.println(t.i); } } 段代码里面Tstatic类有staticint变量I有两构造函数第用于初始化I4第二用于初始化i传进函数值main所传值5程序首先声明对象引用t调用带参数构造函数实例化对象此时对象t成员变量I值5接着声明对象tt调用无参数构造函数把对象tt成员变量i值初始化4了注意了里istatic说该类所有对象都共享该内存也说实例化对象tt时候改变了i值实际上对象ti值也变了因实际上们引用同成员变量打印结三4呵呵写里大家否明白了呢明白再看看书或者多写几例子印证下呵呵

0 0
原创粉丝点击