import java.util.*;
public class Deadlock extends Thread{
private String name;
public static void main(String[] args) {
}
public class MyObject{
public void synchronized foo(String name) { //throws error saying 'Syntax error on token "void", volatile expected'
}
}
}
但如果,public void synchronized
更改为 public synchronized void
,一切都很好。
为什么?
查看 Java 规范 8.4.3。方法修饰符,其中说:
MethodModifier:
(one of)
Annotation public protected private
abstract static final synchronized native strictfp
这些必须在返回类型之前,返回类型是最后一个。修饰符顺序实际上无关紧要,因为它们尊重返回类型作为最后一个。这就是为什么public synchronized void
是有效的。
你要回来什么?您是同步返回,还是无效返回?由于同步不是您可以返回的内容,因此它必须是无效的。您会看到,返回类型必须始终紧靠函数名称之前。