调用静态方法是否必须通过类?子类直接调用父类静态方法解析
静态方法的简化调用场景与你的Java代码示例解析
直接回答你的问题:
- 静态方法确实存在无需以
Class.method()形式调用的场景; - 你代码里直接调用
sleep()是完全合法的,和Thread.sleep()的执行效果完全一致。
为什么这种写法有效?
核心原因是你的ThreadNoJoin类继承自Thread类,而Thread.sleep()是一个静态方法。在Java语法规则中,当你在某个类(或它的子类)的内部调用该类的静态方法时,编译器会自动补全类名,等价于用类名.静态方法()的形式调用。
换句话说,你在run()方法里写的sleep(...),编译器会自动将其解析为Thread.sleep(...)——因为ThreadNoJoin继承了Thread,父类的静态方法可以被子类直接访问,省略类名的写法是语法允许的。
额外提醒:不推荐这种写法
虽然语法合法,但这种省略类名的写法可读性极差。静态方法属于类本身,而非实例对象,直接写sleep()很容易让其他开发者误以为这是一个实例方法(比如this.sleep()),但实际上Thread.sleep()的作用是让当前执行的线程休眠,和调用它的Thread实例没有任何关联(甚至用null调用该静态方法都能执行,只是不符合编码规范)。
所以最佳实践还是明确写出Thread.sleep(),让代码的意图更清晰。
内容的提问来源于stack exchange,提问作者rifleking
相关产品推荐
相关产品推荐

