A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 环球信息中心 中级黑马   /  2014-4-15 18:06  /  1122 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 环球信息中心 于 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.求大神帮我解释解释代码。

7 个回复

倒序浏览
1   ky.mg(sName);     // 此处是sName静态变量。
2    mg(String,sName){    // 此方法调用后sName是形式参数不是静态变量了
3    start();    // 开起线程运行run方法
4   public void run(){     //   此处与mg方法一致Sname不是静态变量。
     所以 打印的数据时kkmmm。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
sheng6699 发表于 2014-4-15 18:11
1   ky.mg(sName);     // 此处是sName静态变量。
2    mg(String,sName){    // 此方法调用后sName是形 ...

嗯,三可油啦
回复 使用道具 举报

呵呵。。。
回复 使用道具 举报
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 19:44:50
7#
this.sName = sName, 加个this 啊, RUN 方法还没运行完 ,线程就打印完了
回复 使用道具 举报
很高兴能得到你的回复,谢谢。加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马