0

我有两节课。班级Test和班级Application。测试类implements Runnable,是一个线程..当然。

这两个类都有 public static void main。

第一的:

首先,我启动Test有一个类级别变量“a”的类

public static String a = "abc";

这指向一个字符串对象,在线程内部,我只是为其分配一个新值并打印该值。

第二:

我启动了我的Application类,它也有一个 main 方法,我刚刚Static String在课堂上打印了Test,令人惊讶的是它打印了“abc”。请注意,我在上课后开始了第二节Test课。理想情况下,它应该NULL像 Java Sandbox 一样打印,每个进程都在其中运行,一个进程不应访问其他进程。

现在我的问题是为什么?为什么它不应该打印新分配的字符串。我在下面上两门课

import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author AZ
 */
public class Test implements Runnable {

   public static String a = "abc";


    @Override
   public void run(){

        while(true){
           System.out.println(a); 
           a = new Date().toString();
           try {
               Thread.sleep(2000);
           } catch (InterruptedException ex) {
               Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
           }
        }      
   }
}
class ThreadRunner {
   static public void main(String args[]){
       new Thread(new Test()).start();
   }
}

二等舱

import com.springhibernate.beans.MessageBean;
import com.springhibernate.beans.Test;
import org.springframework.beans.factory.annotation.Autowired;

/**
 *
 * @author AZ
 */
public class Application {


    public static void main(String args[]){


         System.out.println("Test of printing String " + Test.a);

    }
}
4

1 回答 1

3

每个进程都有自己的静态字段副本。

但是,每个进程也运行类初始化程序,因此该字段的每个副本都被初始化为abc.

于 2013-10-22T14:34:27.570 回答