访问修饰符和访问说明符有什么区别?

45
在Java中,访问修饰符(access specifiers)访问限定符(access modifiers)是同样的东西吗?

6
有趣,多年来我从未见过这个具体的问题,但显然你不是唯一一个想知道的人:http://www.google.com/search?q=difference+access+specifier+access+modifier ;) - BalusC
9个回答

48
"访问修饰符"是Java语言规范中用于表示privateprotectedpublic的官方术语。"访问说明符"在Java API文档中被用作同义词,但这是我第一次注意到。最好还是坚持使用JLS术语。"

3
+1 证明JLS。我认为这只是语言障碍。 - BalusC

7

在C++中,程序员使用访问说明符这个术语,而在Java中我们则正式使用访问修饰符

例如:当我们使用private、static声明一个类时,编译器会明确显示以下错误信息:
enter image description here


6

1
在一些旧语言中,如C++,public、private、protected和default被视为访问说明符(access specifiers),而其他所有内容都被视为访问修饰符(access modifier)。但在Java中,没有术语叫做说明符,所有东西默认都只被视为修饰符(modifier)。
所以,public、private、protected、default、final、abstract、static、strictfp、synchronized、native、transient和volatile都只是修饰符。
一个简单的测试是,当我们编译以下代码时: private class Test{ }
我们会得到编译时错误,提示不允许使用private修饰符。对于其他修饰符也是如此。也许Java编译器(javac)只把所有东西看作“修饰符”。

1

在Java中,没有所谓的“访问说明符”,只有访问修饰符。

这种误解来自于像C ++之类的语言,其中public,private,protected,default被认为是访问说明符,其余(static,final等)被认为是访问修饰符。

以下是证明,因为编译器说“私有修饰符不允许在这里”,即编译器说修饰符而不是说明符

enter image description here


1

Java基本上有2种类型的修饰符:

  1. Java访问修饰符
  2. Java非访问修饰符

Java访问修饰符和Java访问限定符是同一回事,它们是publicprivateprotected


0

在我看来,是的,这两个术语都指同一件事,并且可以互换使用。


这不取决于你,而是取决于JLS,术语“访问修饰符”在其中根本没有出现。 - user207421

0

那个JDI参考文献是我在Java规范中唯一看到“访问修饰符”这个术语的地方。即使在那里,public/protected/private/package也被称为“修饰符”。在Java中真的没有理由使用“访问修饰符”这个术语,显然只是在成千上万页中的一页上出现了错误。


-4

从技术上讲,private、public、protected和default被视为访问说明符。它们涉及到“谁可以…”的问题。而修饰符包括volatile、final、static、transient等,它们则涉及到“如何…”的方面。


请提供JLS引用以支持此断言。这是毫无根据的。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接