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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 贾成龙 于 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--);
  }
  }
  }
  }
  }
请问:加注释的地方为什么不加静态能编译通过呢?不理解,求大家给解释一下!

评分

参与人数 1黑马币 +15 收起 理由
张立江 + 15

查看全部评分

5 个回复

正序浏览
静态方法只能访问静态成员。并没有要求访问静态变量的就一定要是静态方法。所以run方法不用必须被static修饰。
回复 使用道具 举报
加static是出错的,因为Thread继承了Runnable接口,实现了该接口的run方法,Thread类源码中run方法前面就是public void修饰,你加了static会提示隐藏Thread的方法!
回复 使用道具 举报
子类的run方法是覆盖父类的run方法,而父类的run方法不是静态的,子类的也不能加上静态修饰符。但是有个问题要注意!:即便父类有个静态的run方法,子类可以继承使用,但也不能覆盖,如果你也写了个静态run方法,也可以调用,但是并不是覆盖,而是子类自己写了一个静态的run方法,不是覆盖的
回复 使用道具 举报
静态方法只能访问静态成员;
非静态方法既可以访问静态成员,也可以访问非静态成员
回复 使用道具 举报
run()继承父类!覆写父类或者父接口中的run()方法,是不可以填上static的,因为static不属于面向对象的东西,加上就没有多态了。
方法调用:run方法是一个普通方法,里面引用或者调用了此类中的非静态成员变量,所以添加static会报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马