照 JPer 的指点,改写了代码 如下,旨在说明 " 如果调用方法 a() 的过程还没有结束,JAVA虚拟机 JVM绝不会去解释并执行下一行,即绝不会去创建JSONObject 对象 jsonObject, 接着返回这个对象,以结束(完成)方法 cs() 调用"。
简单定义了 OSCHINA 类 来替代 JSONObject 类。它有一个属性 name。 一旦调用它的有参构造方法,这个字符串参数值,就将赋予属性 name。
执行方法 cs()的最后两行代码 所返回的 结果, 是一个 name 是”开源中国”的 OSCHINA类的对象。
a() 方法的执行代码包括两步:
a. 首先, 创建一个 线程A_Thread 类的对象 a_thread,并启动这个线程。
b. 这个线程每半秒输出一次信息:"执行方法 a() 被调用的线程正在运行。"
c. 创建并启动线程后 休眠 2 秒钟,才结束方法 a() 的调用。这期间线程会不时发出信息。
class OSCHINA { //用来替代 JSONObject 的类定义
String name; //字符串属性
public OSCHINA(String s){//构造方法
name=s;
System.out.println("OSCHINA 类的构造方法被调用.");
}
}
public class A{
public void a() {//起始方法 a的定义
new Thread(new Runnable(){ //创建一个线程
@Override
public void run(){
while(true) {
try{
Thread.sleep(500);//每半秒输出一次信息
}catch(InterruptedException e){};
System.out.println("执行方法 a() 被调用的线程正在运行。");
}
}
}).start();
try{
Thread.sleep(2000);//休眠2秒后才结束a 的调用
} catch(InterruptedException e) {};
System.out.println("执行 a 结束。");
}//方法 a 的定义 完成
private OSCHINA cs() {
System.out.println("调用 cs(), 开始处理...");
a();
OSCHINA o= new OSCHINA("开源中国");
return o;
}
public static void main(String args[]){
A t= new A();
System.out.println((t.cs()).name);
}
}
输出表明,只有调用方法 a() 的任务完成之后,才得以执行下面的代码 ( 调用 OSCHINA的构造方法, 创建 对象,然后返回这个对象以结束 cs() 的调用) 。就是说:跳过方法 a() 的执行时间,直接返回结果" 是不可能的(错误的)。
调用 cs(), 开始处理...
执行方法 a() 被调用的线程正在运行。
执行方法 a() 被调用的线程正在运行。
执行方法 a() 被调用的线程正在运行。
执行 a 结束。
OSCHINA 类的构造方法被调用.
开源中国
执行方法 a() 被调用的线程正在运行。
执行方法 a() 被调用的线程正在运行。
执行方法 a() 被调用的线程正在运行。
本文通过一个具体的Java示例代码展示了如何通过启动新线程并利用休眠机制来控制方法调用的顺序。重点说明了在方法a()执行完毕前,JVM不会继续执行后续代码。

被折叠的 条评论
为什么被折叠?



