【发布时间】:2017-04-14 19:09:39
【问题描述】:
在声明java方法之前使用了几个修饰符,如public、static、synchronized等。
我只想知道一个java方法可以包含的修饰符的最大数量或所有修饰符的组合。
【问题讨论】:
-
确实如此。实时调频。那应该可以。
在声明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
你不能混:
将所有这些放在一起(感谢用户 Andreas 出色的措辞):
使用正则表达式语法,我们得到:
[ public | protected | private] static final synchronized [native | strictfp]
所以,最大数量是 5;以及这 5 个关键字的 6 种不同组合。
【讨论】:
abstract 与private、static、final、native、strictfp 或synchronized 中的任何一个混合使用”和“不能混合native和strictfp”。
[public | protected | private] static final synchronized [native | strictfp],即答案是5,这个长度有6种组合。
根据 Java 规范 §8.4.3. Method Modifiers,修改的总列表是(不包括注释):
public protected private abstract static final synchronized native strictfp
public、protected 和 private 是互斥的,尽管该部分没有这么说。
规范还说:
如果包含关键字
abstract的方法声明还包含关键字private、static、final、native、strictfp或 @ 中的任何一个,则会出现编译时错误987654332@.
因此,如果您包含 abstract,而仅留下 public | protected,则最多为 2。
规范中的下一条规则是:
如果包含关键字
native的方法声明也包含strictfp,则为编译时错误。
所以,这意味着没有abstract,你可以混合如下:
public | protected | private
static
final
synchronized
native | strictfp
最大长度为 5,该长度有 3 * 2 = 6 种组合。
【讨论】:
public、protected 或 private 在成员上是修饰符,“默认”或“包私有”幻像访问修饰符。
virtual 与 final 相反。所有关键字真正都是修饰符。
public、protected 和private。 Package-private 有其工程目的,并且与其他人处于平等地位,除非它拥有自己的关键字。