首页 > 解决方案 > Java - “同步”和“最终”方法,声明排序

问题描述

我有一个关于方法的同步最终排序的问题。以下两者都被编译器接受,但它们之间有什么实际区别吗?

public synchronized final void update() {
    // Do stuff
}

public final synchronized void update() {
    // Do stuff
}

标签: javasynchronizedfinal

解决方案


JLS 8.4.3

如果两个或多个(不同的)方法修饰符出现在方法声明中,尽管不是必需的,但习惯上它们的出现顺序与上面在 MethodModifier 的产生式中显示的顺序一致。

并且生产 MethodModifier 顺序指定为(请参阅我提供的 JLS 链接):

MethodModifiers:
    MethodModifier
    MethodModifiers MethodModifier

MethodModifier: one of
    Annotation public protected private abstract
    static final synchronized native strictfp

所以 JLS 指定了它synchronized并且final可以以任何顺序出现。

因此,您的问题的答案是:没有区别


推荐阅读