-4

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

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

4

2 回答 2

6

请参阅 Java 语言规范,第 8.4 章

MethodDeclaration:
  {MethodModifier} MethodHeader MethodBody

和:

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

你不能混合:

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

将所有这些放在一起(感谢用户 Andreas 出色的措辞):

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

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

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

于 2017-04-14T19:12:59.377 回答
1

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

public protected private
abstract static final synchronized native strictfp

public, protected, 和private是互斥的,尽管该部分没有这么说。

规范还说:

如果包含关键字的方法声明还包含关键字、、、、或abstract中的任何一个,则为编译时错误。privatestaticfinalnativestrictfpsynchronized

因此,如果您abstract仅包含叶子public | protected,则最多为 2。

规范中的下一条规则说:

如果包含关键字的方法声明native还包含strictfp.

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

public | protected | private
static
final
synchronized
native | strictfp

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

于 2017-04-14T19:43:23.230 回答