首页 / JAVA / Java:不同执行中的静态字段行为
Java:不同执行中的静态字段行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:不同执行中的静态字段行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2274字,纯文字阅读大概需要4分钟。
内容图文
![Java:不同执行中的静态字段行为](/upload/InfoBanner/zyjiaocheng/757/99fd0d0c79654d518f52633380c76bfb.jpg)
我有这门课:
package scripts;
public class TestStatic {
public static void main(String[] args) {
new IncrA().incrStatic();
}
}
class Static {
public static int CPT = 0;
}
class IncrA{
public void incrStatic(){
for (int i:Range.ints(0,100)){
System.out.println("Now with "+this.toString()+" : Static.CPT="+Static.CPT);
Static.CPT++;
try{
Thread.sleep(100);
}
catch(Exception e){
e.printStackTrace();
}
}
System.out.println("Finally for execution of "+this.toString()+" : Static.CPT="+Static.CPT);
}
}
现在我从命令行在java中运行类TestStatic两次.
javaw -cp ... scripts.TestStatic > 1.txt
javaw -cp ... scripts.TestStatic > 2.txt
我原以为第一次和第二次执行会干扰,最后得到Static.CPT == 200的值,因为我认为JVM只会加载一次Static类.似乎并非如此.虽然我喜欢它,但我想知道我的这个例子是否足以得出结论JVM完全分离了exectutions.实际上,当我读取输出时,我的IncrA对象的hashCode在两次执行中通常是相同的:
从1.txt:
...
Now with scripts.IncrA@19f953d : Static.CPT=72
Now with scripts.IncrA@19f953d : Static.CPT=73
Now with scripts.IncrA@19f953d : Static.CPT=74
Now with scripts.IncrA@19f953d : Static.CPT=75
...
从2.txt:
...
Now with scripts.IncrA@19f953d : Static.CPT=72
Now with scripts.IncrA@19f953d : Static.CPT=73
Now with scripts.IncrA@19f953d : Static.CPT=74
Now with scripts.IncrA@19f953d : Static.CPT=75
...
@ 19f953d在两次执行中共享.
我搜索了关于static关键字的深层解释但没有找到关于这些问题的任何内容.有人可以解释或给出一个很好的指针吗?
解决方法:
简短的回答:静态变量仅在单个JVM运行中持久存在,因此在第一次执行退出之后,CPT设置为100的事实实际上已丢失.有关静态和非静态变量的入门,请参见http://java.sun.com/docs/books/tutorial/java/javaOO/classvars.html.简而言之,唯一的区别是静态变量由类的所有实例共享 – 否则,它们的行为基本相同.
长(呃)答案是静态变量有点像实例变量,但对于类的Class对象.当JVM退出时,所有类都被卸载,因此静态变量不再存在,就像该类的任何实例不再存在一样.当您为第二次运行重新启动Java时,它会从您的(已编译的)源文件重新读取类的定义,并按照您的要求将CPT设置为零.
(在你提到的情况下,一次运行两个JVM会导致两个ClassLoader和两个不同的Class对象,每个JVM一个,所以它们每个都有自己的静态变量版本.)
如果要在Java执行之间保留任何信息,则需要将其存储在外部(例如文件或数据库)的某个位置,并在启动时加载此信息.如果要在运行的Java进程之间共享信息,则需要让它们相互通信以共享此信息(例如,通过TCP连接).无论所讨论的变量是否是静态的,都是如此.
内容总结
以上是互联网集市为您收集整理的Java:不同执行中的静态字段行为全部内容,希望文章能够帮你解决Java:不同执行中的静态字段行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。