黑马程序员技术交流社区

标题: 关于多线程中的静态修饰的问题! 已解决谢谢 [打印本页]

作者: 贾成龙    时间: 2012-8-14 23:13
标题: 关于多线程中的静态修饰的问题! 已解决谢谢
本帖最后由 贾成龙 于 2012-8-15 00:37 编辑

class TicketDemoTest extends Thread{
  private static int ticket=100;
  static Object obj=new Object();
  public void run(){//这个地方要不要加静态(为什么不用加static)
  while(true){
  synchronized(obj){
  if(ticket>0){
  try{
  sleep(100);
  }
  catch(InterruptedException e)
  {
  e.printStackTrace();
  }
  System.out.println(Thread.currentThread().getName()+"::"+ticket--);
  }
  }
  }
  }
  }
请问:加注释的地方为什么不加静态能编译通过呢?不理解,求大家给解释一下!
作者: 樊占江    时间: 2012-8-14 23:16
run()继承父类!覆写父类或者父接口中的run()方法,是不可以填上static的,因为static不属于面向对象的东西,加上就没有多态了。
方法调用:run方法是一个普通方法,里面引用或者调用了此类中的非静态成员变量,所以添加static会报错。
作者: 黑马张涛    时间: 2012-8-14 23:25
静态方法只能访问静态成员;
非静态方法既可以访问静态成员,也可以访问非静态成员

作者: 周世阳    时间: 2012-8-14 23:40
子类的run方法是覆盖父类的run方法,而父类的run方法不是静态的,子类的也不能加上静态修饰符。但是有个问题要注意!:即便父类有个静态的run方法,子类可以继承使用,但也不能覆盖,如果你也写了个静态run方法,也可以调用,但是并不是覆盖,而是子类自己写了一个静态的run方法,不是覆盖的
作者: 黑马张涛    时间: 2012-8-14 23:49
加static是出错的,因为Thread继承了Runnable接口,实现了该接口的run方法,Thread类源码中run方法前面就是public void修饰,你加了static会提示隐藏Thread的方法!
作者: 左建飞    时间: 2012-8-15 00:16
静态方法只能访问静态成员。并没有要求访问静态变量的就一定要是静态方法。所以run方法不用必须被static修饰。




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