java方法可以包含的修饰符的最大数量是多少?
有声明的Java方法之前使用的几种调节剂如public
,static
,等java方法可以包含的修饰符的最大数量是多少?
我只是想知道改性剂的最大数目或所有的调节器的Java方法可以包含组合。
见Java语言规范,chapter 8.4:
MethodDeclaration:
{MethodModifier} MethodHeader MethodBody
和:
MethodModifier:
(one of)
Annotation public protected private
abstract static final synchronized native strictfp
不能混淆:
- 访问修饰符(这样你就得到了那些之一3,或没有包裹保护)
- abstract,s tatic,最终
- 抽象与(私有,静态,最后,原生,strictfp,同步)
- 最后:本地和strictfp
把所有的一起(感谢用户安德烈亚斯为优秀的措辞):
使用正则表达式的语法,我们得到:
[ 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
是相互排斥的,认为部分没有按”那就说。
该规范还指出:
这是一个编译时错误,如果包含该关键字
abstract
方法声明中还包含了关键字private
,static
,final
,native
中的任何一个,strictfp
,或。
所以,如果你有abstract
只留下public | protected
,所以2
最大的规范下一条规则说:
这是在方法声明中的编译时错误其中包含关键字
native
也包含strictfp
。
所以,这意味着没有abstract
,可以混合如下:5
public | protected | private
static
final
synchronized
native | strictfp
最大长度,并且有3×2 = 6种组合与该长度。
以一种退化的方式,成员中缺少任何修饰符“公共”,“受保护”或“私有”都是修饰符,即“默认”或“包私有”幻像访问修饰符。 –
@LewBloch我不同意。 “修饰符”一词意味着它修改了某些东西。在这种情况下,一个方法是包私有的,除非修改者改变它。因此,package-private不是修饰符,它是默认值/状态。请注意,没有指定默认状态的修饰符关键字,例如'虚拟'与'final'相对。所有关键字*都是*修饰符。 – Andreas
注:“以堕落的方式”。当然,你是正确的,但具有讽刺意味的是,在实践中,“默认”访问并不是默认设置。如果实际上是编程,人们必须有意识地选择使用默认访问。大多数人似乎都很了解“公共”,“受保护”和“私人”。包私人有它的工程目的,并与其他人平等,除非有它自己的关键字。 –
阅读[语言规格](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.3)。 –
确实。 RTFM。这应该工作。 –
[Java修饰符语法和格式]的可能重复(http://stackoverflow.com/questions/7050233/java-modifiers-syntax-and-format) –