Second.java文件中的变量a、b就重新定义赋值了,,,只是为空而已,所以打印输出为null。
解决方案 »
- 关于string的疑问
- 在线等!!!!!
- 提问:jar 包里打数字签名的 签名版本号,和JAR本身版本号的具体使用
- 备分和存档数据库的程序
- 如何在文件中随机选取一行输入到另一个文件中?
- System对象的方法资料在那里能找到?API文档里没有.
- 求指导,为什么我的程序没有办法实现题目的要求,总是报错呢?
- Jbuilder如何在一个Jpanel放两个Jpanel?
- 继承object类的clone方法,为什么要写为super.clone()?
- 求质数并打印,下面是我的写法,求改进,求其他写法。我的感觉很没逻辑
- 请教一个Swing Java编程的“代码实现与预期不符”的故障原因.
- 求创建三个线程打印ABC问题
Second.main(args);
再运行First
菜鸟意见
/**
*
* @author pu_ruidong
*
*/
public class Test {
public static void main(String[] args) {
//TestA second = new TestA();
System.out.println("a:"+TestA.a);
System.out.println("b:"+TestA.b);
System.out.println("**************************************************");
TestA.a = "a";
TestA.b = "b";
System.out.println("a:"+TestA.a);//这个地方获取的就是TestA类里面的值.
System.out.println("b:"+TestA.b);//同上.
}
}另外一个类:/**
*
* @author pu_ruidong
*
*/public class TestA {
public static String a="1";
public static String b="2";
}
执行完First.java后,内存就回收了,所以不会保留a、b的值了
楼主看书的话,应该可以看到java有内存自动回收功能。
静态变量的前提,是同一个进程的
再执行Second.java时 已是另一个JVM实例
二者互不影响
所以 LZ 执行完 First.java 再执行Second.java 的结果就是这样的
public static void main(String args[]) throws InterruptedException {
Second s =Second.getSecond();
s.setA(2);
s.setB(4);
System.out.println(s.getA());
System.out.println(s.getB());
for(;;){
Thread.sleep(10000);
System.out.println(s.getA());
System.out.println(s.getB());
}
}
}
package com.hou.tomain;public class Second {
private int a = 0;
private int b = 0;
private Second() {
}
public static Second second = new Second();
public static Second getSecond() {
return second;
}
public static void main(String args[]) {
System.out.println(second.getA());
System.out.println(second.getB());
} public int getA() {
return a;
} public void setA(int a) {
this.a = a;
} public int getB() {
return b;
} public void setB(int b) {
this.b = b;
}
}
看这2段代码,我认为2楼得说法有问题,我认为的是想当与起来两个虚拟机环境,不互通的两个虚拟机进程是不能通过虚拟机内存互相取值的。你运行两个main的时候其实有两个javaw.exe
看这2段代码,我认为2楼的说法有问题,应该是起来两个虚拟机环境,两个不同虚拟机进程(环境)是不能通过虚拟机内存互相取值的,除非做了些其他操作,比如session复制过程(但我认为即使是复制也是通过网络手段互传信息,起到初始复制作用的)。你运行两个main的时候其实有两个javaw.exe
如果是new的化无法对类的变量惊醒实例, 他获得时新的对象,所以在first中得到的是新结果,这个结果只针对这个对象,没有对secod进行实例。 secod的实例类名.属性名
20楼市正确的。确实是两个javaw.exe