我有两节课。课程Test
和课程Application
。测试类implements Runnable
,当然是一个线程。
这两个类都有public static void main。
首先:
首先,我启动Test
类,其中有一个类级变量" a"
public static String a = "abc";
指向一个字符串对象,在线程内部我只是为它分配一个新值并打印该值。
其次:
我启动了我的Application
类,它也有一个主方法,我只是在课程Static String
中打印了Test
,而且令人惊讶的是它打印了#34; 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);
}
}
答案 0 :(得分:3)
每个进程都有自己的静态字段副本。
但是,每个进程也会运行类初个化程序,因此该字段的每个副本都会初始化为abc
。