java 方法可以包含的修饰符的最大数量是多少?
Posted
技术标签:
【中文标题】java 方法可以包含的修饰符的最大数量是多少?【英文标题】:What are the maximum number of modifiers, a java method can contain? 【发布时间】:2017-04-14 19:09:39 【问题描述】:在声明java方法之前使用了几个修饰符,如public
、static
、synchronized
等。
我只想知道一个java方法可以包含的修饰符的最大数量或所有修饰符的组合。
【问题讨论】:
阅读language spec。 确实如此。实时调频。那应该可以。 Java modifiers syntax and format的可能重复 【参考方案1】:请参阅 Java 语言规范,chapter 8.4:
MethodDeclaration:
MethodModifier MethodHeader MethodBody
和:
MethodModifier:
(one of)
Annotation public protected private
abstract static final synchronized native strictfp
你不能混:
访问修饰符(所以你得到了这 3 个中的一个,或者没有包保护) 抽象的、静态的、最终的 抽象与(私有、静态、最终、本机、strictfp、同步) 最后是: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种组合。
感谢您的所有意见;再次改写!在别处表达了我的感激之情!
这不是正则表达式语法。不过,+1。【参考方案2】:
根据 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
在成员上是修饰符,“默认”或“包私有”幻像访问修饰符。
@LewBloch 我不同意。 “修饰符”一词的意思是它修饰了某些东西。在这种情况下,方法是包私有的,除非修饰符更改它。因此, package-private 不是修饰符,它是默认值/状态。请注意,没有用于指定默认状态的修饰符关键字,例如virtual
与 final
相反。所有关键字真正都是修饰符。
注意:“以一种退化的方式”。当然,您是正确的,但具有讽刺意味的是,实际上“默认”访问并不是默认设置。如果他们实际上是在编程,人们必须有意识地选择使用默认访问。大多数人似乎都足够了解public
、protected
和private
。 Package-private 有其工程目的,并且与其他人处于平等地位,除非它拥有自己的关键字。以上是关于java 方法可以包含的修饰符的最大数量是多少?的主要内容,如果未能解决你的问题,请参考以下文章