黑马程序员技术交流社区
标题:
关于多线程中的静态修饰的问题! 已解决谢谢
[打印本页]
作者:
贾成龙
时间:
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