Java中静态变量有没有生命周期,java中能否定义共享全局变量?
我在一个地方给ClassA的静态变量publicStringstr传了个值“aa”,在另一个类为什么读不到?...
我在一个地方给Class A的静态变量 public String str传了个值“aa”,在另一个类为什么读不到?
展开
1个回答
展开全部
任何东西都有声明周期,简单点说一段代码所有线程运行结束,程序退出,jvm中所有对象都销毁,内存被回收.具体说你的问题.类静态变量和类元信息是保存在永久代(PermGen),在类被第一次加载时在内存中分配空间,通过类名引用指向静态变量的值.形如 A.name;这个变量跟具体的类A的对象没关系.通过类对象访问的只是类变量,数据具体的类,每个类各自分配独立的空间存储自己的类变量.或者说静态变量属于jvm级别的变量.至于静态变量的声明周期,何时被销毁内存被回收,要看具体GC的实现.sun的HotSpot好像是类的字节码类元信息和类对象都无引用时生命周期结束GC回收.jvm的这块东西我也是最近刚开始看,以上的解释仅供参考,有异议大家可以一起研究下.
追问
那有没有其他办法在几个生命周期不同的类之间共享变量?
追答
几个生命周期?没太懂这句的含义.类静态变量就是全局的,所有的类共享,JVM级别的.比如java.lang.Math中的E和PI在哪访问都是一样的.final修饰不可修改.如果不是final的所有的类都可以改,就像月亮是全世界的,你在中国把它咬一口,在美国看也是被咬了一口的月亮.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询