Second.java文件中的变量a、b就重新定义赋值了,,,只是为空而已,所以打印输出为null。

解决方案 »

  1.   

    执行完First之后,java虚拟机就死了,再执行Second的时候原来赋的值就木有了。
      

  2.   

    在System.out.println("b:"+b);句后面加上
    Second.main(args);
    再运行First
    菜鸟意见
      

  3.   

    貌似不能一次执行两个main()方法的.
      

  4.   

    改了一下,可以了.
    /**
     * 
     * @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";
    }
      

  5.   

    支持2楼,第一个main执行完后,生存期都结束了,再执行第2个,跟第一个设置的没什么关系了
      

  6.   


    执行完First.java后,内存就回收了,所以不会保留a、b的值了
    楼主看书的话,应该可以看到java有内存自动回收功能。
      

  7.   

    两个main方法,这是两个进程,两个进程之间是不会有任何关系的。
    静态变量的前提,是同一个进程的
      

  8.   

    First.java 执行完 该JVM实例的生命周期已结束
    再执行Second.java时 已是另一个JVM实例
    二者互不影响
    所以 LZ 执行完 First.java 再执行Second.java 的结果就是这样的
      

  9.   

    First执行结束,虚拟机清理内存,a,b不在了
      

  10.   

    package com.hou.tomain;public class Main {
    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
      

  11.   

    有错别字纠正下:
    看这2段代码,我认为2楼的说法有问题,应该是起来两个虚拟机环境,两个不同虚拟机进程(环境)是不能通过虚拟机内存互相取值的,除非做了些其他操作,比如session复制过程(但我认为即使是复制也是通过网络手段互传信息,起到初始复制作用的)。你运行两个main的时候其实有两个javaw.exe 
      

  12.   

      静态的变量只能实例化一次,并且是   类名.属性名
       如果是new的化无法对类的变量惊醒实例, 他获得时新的对象,所以在first中得到的是新结果,这个结果只针对这个对象,没有对secod进行实例。  secod的实例类名.属性名
      

  13.   


    20楼市正确的。确实是两个javaw.exe
      

  14.   

    2楼是正确的,你两次运行main函数,实际是启动了2个虚拟机,里面的ab不会重用的。你应该在一次执行完成上面的操作