java 方法最多可以包含多少个修饰符?

What are the maximum number of modifiers, a java method can contain?

在声明 java 方法之前使用了几个修饰符,例如 publicstaticsynchronized 等。

我只想知道一个 java 方法可以包含的修饰符的最大数量或所有修饰符的组合。

请参阅 Java 语言规范,chapter 8.4

MethodDeclaration:
  {MethodModifier} MethodHeader MethodBody

和:

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

不能混用:

  • 访问修饰符(所以你得到了这 3 个中的一个,或者 none 用于受保护的包)
  • 抽象、静态、最终
  • 抽象为(私有、静态、最终、本机、strictfp、同步)
  • 最后:native 和 strictfp

综上所述(感谢用户 Andreas 的出色措辞):

使用正则表达式语法,我们得到:

 [ public | protected | private] static final synchronized [native | strictfp]

所以,最大数量是5;以及这 5 个关键字的 6 种不同组合。

根据 Java 规范,§8.4.3. Method Modifiers,修改的总列表是(不包括注释):

public protected private
abstract static final synchronized native strictfp

publicprotectedprivate 是互斥的,尽管那部分没有这么说。

规范还说:

It is a compile-time error if a method declaration that contains the keyword abstract also contains any one of the keywords private, static, final, native, strictfp, or synchronized.

因此,如果您包括 abstract,则只剩下 public | protected,那么最多 2 个。

规范中的下一条规则是:

It is a compile-time error if a method declaration that contains the keyword native also contains strictfp.

所以,这意味着没有abstract,你可以混合如下:

public | protected | private
static
final
synchronized
native | strictfp

最大长度为 5,该长度有 3 * 2 = 6 种组合。