java 方法最多可以包含多少个修饰符?
What are the maximum number of modifiers, a java method can contain?
在声明 java 方法之前使用了几个修饰符,例如 public
、static
、synchronized
等。
我只想知道一个 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
public
、protected
和 private
是互斥的,尽管那部分没有这么说。
规范还说:
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 种组合。
在声明 java 方法之前使用了几个修饰符,例如 public
、static
、synchronized
等。
我只想知道一个 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
public
、protected
和 private
是互斥的,尽管那部分没有这么说。
规范还说:
It is a compile-time error if a method declaration that contains the keyword
abstract
also contains any one of the keywordsprivate
,static
,final
,native
,strictfp
, orsynchronized
.
因此,如果您包括 abstract
,则只剩下 public | protected
,那么最多 2 个。
规范中的下一条规则是:
It is a compile-time error if a method declaration that contains the keyword
native
also containsstrictfp
.
所以,这意味着没有abstract
,你可以混合如下:
public | protected | private
static
final
synchronized
native | strictfp
最大长度为 5,该长度有 3 * 2 = 6 种组合。