在声明java方法之前使用了几个修饰符,例如public
,static
,synchronized
等。
我只想知道 java 方法可以包含的最大修饰符数量或所有修饰符组合。
参见 Java 语言规范,第 8.4 章:
MethodDeclaration:
{MethodModifier} MethodHeader MethodBody
和:
MethodModifier:
(one of)
Annotation public protected private
abstract static final synchronized native strictfp
您不能混合使用:
- 访问修饰符(因此您获得了这 3 个中的一个,或者没有包保护(
- 抽象、静态、最终
- 抽象与(私有、静态、最终、本机、严格FP、同步(
- 最后:原生和严格FP
把所有这些放在一起(感谢用户Andreas的出色措辞(:
使用正则表达式语法,我们可以:
[ public | protected | private] static final synchronized [native | strictfp]
因此,最大数量为5;以及这5个关键字的6种不同组合。
根据 Java 规范 §8.4.3。方法修饰符,修改的总列表是(不包括注释(:
public protected private abstract static final synchronized native strictfp
public
、protected
和private
是互斥的,尽管该部分没有这么说。
该规范还说:
如果包含关键字的方法声明
abstract
还包含关键字中的任何一个private
、static
、final
、native
、strictfp
或synchronized
,则编译时错误。
因此,如果您包括仅剩public | protected
abstract
,则最多为 2。
规范中的下一条规则说:
如果包含关键字的方法声明
native
也包含strictfp
,则编译时错误。
所以,这意味着没有abstract
,你可以按如下方式混合:
public | protected | private
static
final
synchronized
native | strictfp
最大长度为 5,并且该长度有 3 * 2 = 6 种组合。