为什么在同步之前使用 void 关键字会在 Java 中抛出错误,但反过来工作正常


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是有效的。

你要回来什么?您是同步返回,还是无效返回?由于同步不是您可以返回的内容,因此它必须是无效的。您会看到,返回类型必须始终紧靠函数名称之前。

相关内容

最新更新