java为什么要这样选?

来源:百度知道 编辑:UC知道 时间:2024/09/21 07:01:20
public class Exercise extends Thread{
static String name = "Hello";

public static void main(String[] args){
Exercise ex = new Exercise();
ex.set(name);
System.out.println(name);
}

public void set(String name){
name = name + " world";
start();
}

public void run(){
for(int i=0;i < 4; i++)
name = name + " " + i;
}
}

在编译或运行时下列说法哪一个是正确的?( 4 )
(1) 编译出错
(2) 编译通过并可能输出“Hello world”
(3) 编译通过并可能输出“Hello world 0 1 2 3”
(4) 编译通过并可能输出“Hello”或“Hello 0 1 2 3”
还是不懂。。

这个问题其实很简单,一共有两个name,第一个name是静态变量name(static String name = "Hello"; ),第二个name是set方法输入参数name( public void set(String name) ),你在set方法中改变的是输入参数name,而你在run方法中改变的及以后输出的都是类中的静态方法name。

package com.test;
public class Exercise extends Thread {
static String name = "Hello";

public static void main(String[] args) {
Exercise ex = new Exercise();
ex.set(name);
System.out.println(name);
}

public void set(String name) {
//这样输出的是Hello world;也就是说 Exercise.name ,name不是同一个变量。name是方法的传入的参数。
Exercise.name = Exercise.name + " world";
//name = name + " world";
start();
}

public void run() {
for (int i = 0; i < 4; i++)
name = name + " " + i;
}
}

按上面的代码来看答案应该是2
因为该线程并没有被启动,所以run()不会被执行

run()方法不要直接调用的啊。
选4是因为看当执行ex.set(name); 的时候,main线程有没有正在运行。因为一次只能运行一个线程