黑马程序员技术交流社区

标题: 大神 急救 帮我看看下面的程序 [打印本页]

作者: 环球信息中心    时间: 2014-4-15 18:06
标题: 大神 急救 帮我看看下面的程序
本帖最后由 环球信息中心 于 2014-4-18 20:11 编辑

public class Ky extends Thread{
   static String sName="kkmmm";
   public static void main(String[] args){
     Ky ky=new Ky();
       ky.mg(sName);
       System.out.println(sName);
}
public void mg(String sName){
       sName=sName+"ggggg";
       start();
}
public void run(){
  for(int i=0;i<10;i++)
    sName=sName+""+i;
}
}
为什么答案是 kkmmm而不是Kkmmmgggg123456789啊。我是个新手自学java.求大神帮我解释解释代码。

作者: sheng6699    时间: 2014-4-15 18:11
1   ky.mg(sName);     // 此处是sName静态变量。
2    mg(String,sName){    // 此方法调用后sName是形式参数不是静态变量了
3    start();    // 开起线程运行run方法
4   public void run(){     //   此处与mg方法一致Sname不是静态变量。
     所以 打印的数据时kkmmm。
作者: 环球信息中心    时间: 2014-4-15 18:13
sheng6699 发表于 2014-4-15 18:11
1   ky.mg(sName);     // 此处是sName静态变量。
2    mg(String,sName){    // 此方法调用后sName是形 ...

嗯,三可油啦
作者: sheng6699    时间: 2014-4-15 18:15
环球信息中心 发表于 2014-4-15 18:13
嗯,三可油啦

呵呵。。。
作者: 坏米饭    时间: 2014-4-15 18:28
start()方法调用后,会产生新的线程运行run()方法里的内容。而main()不会停下,所以直接打印了sName。
你改成这样。public class ky extends Thread{
           static String sName="kkmmm";
           public static void main(String[] args) throws Exception{
             ky ky=new ky();
               ky.mg(sName);
               Thread.sleep(5000);
               System.out.println(sName);
        }
        public void mg(String sName){
               this.sName=sName+"ggggg";
               start();
        }
        public void run(){
          for(int i=0;i<10;i++)
            sName=sName+""+i;
        }
        }
作者: 环球信息中心    时间: 2014-4-15 18:44
嗯,谢谢了。祝你好运:)
作者: 天山    时间: 2014-4-15 19:44
this.sName = sName, 加个this 啊, RUN 方法还没运行完 ,线程就打印完了
作者: 环球信息中心    时间: 2014-4-15 19:47
很高兴能得到你的回复,谢谢。加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2