由于我们使用“default”关键字作为访问说明符,并且它可以在switch语句中使用以及完全不同的目的,所以我很好奇,java中有任何其他关键字可以在一个以上使用目的
答案 0 :(得分:13)
访问修饰符的“默认”不是关键字 - 你不写:
default void doSomething()
但是,在指定注释属性的默认值时 - 它是。
switch (a) {
default: something();
}
和
public @interface MyAnnotation {
boolean bool() default true;
}
这与Jon Skeet指出的final
一起似乎涵盖了一切。也许除了“重载”for
关键字:
for (initializer; condition; step)
和for (Type element : collection)
答案 1 :(得分:7)
你不能使用default
作为访问说明符,所以我不认为即便如此。 (编辑:正如Bozho指出的那样,它可以用于注释。)
final
表示“不能从/被覆盖”和“只读”,它们是两种不同但相关的含义。
答案 2 :(得分:4)
default
既可以在开关中使用,也可以在注释中使用默认值(如Bozho所指出的)final
表示“无法从/覆盖”和“只读”,它们是两种不同但相关的含义(如Jon所指出的)< / LI>
extends
既可用于指定类的超类型,也可用于通配符和类型变量以放置约束(相关但不完全相同)({{ 1}})List<? extends Foo>
可用于指定当前类的超类中的某些内容,或用于指定通配符以放置约束(super
)List<? super Foo>
表示“类的一部分,而不是实例”(对于方法,属性或初始值设定项)和static
static import
声明一个类(class
),或引用一个类文字(class Foo {}
)(由ILMTitan回答)Foo.class
可用于普通for循环和“增强”for,但这更像是重载(如Bozho所说的那么好)而不是真正有两个含义) 答案 3 :(得分:3)
其他人尚未提及的内容:类关键字有两种不同的用途。
宣布课程:
class Test{};
并指示一个类文字:
Class<Test> testClass = Test.class;
答案 4 :(得分:2)
default
关键字不用作访问说明符。缺少private
,protected
和public
表示使用default
。
示例:
class Test { // default access for class.
int A; // default access for the class member.
}
发现不同用途的Java关键字的一些示例是:
final
:无法对final
class
进行子类化,无法覆盖final
方法,并且最多可以发生final
变量曾经作为一个左手表达。
Super
:用于访问由其出现的类继承的类的成员,也用于将调用从构造函数转发到超类中的构造函数。
Static
:用于创建static
初始化块,static
成员和static
个导入。
for
:用于传统的for
循环和较新的Java 1.5 enhanced for
循环。
答案 5 :(得分:2)
static
关键字将方法和字段与类而不是该类的实例相关联,但它也用于表示静态初始化部分,如:
public class MyClass
{
private static int a;
static
{
a = 1;
}
public static void doSomethingCool()
{
...
}
}
Pascal的评论提醒我静态导入:
import static MyClass.doSomethingCool;
public class MyOtherClass
{
public void foo()
{
// Use the static method from MyClass
doSomethingCool();
}
}
答案 6 :(得分:2)
final
关键字可能意味着不同的事情。
classes
意味着该类无法进行子类化。method
时,表示无法覆盖该方法。variable
时,表示该变量无法指向任何其他变量。答案 7 :(得分:0)
我看了java keywords,但似乎关键字是唯一的......你可以自己检查一下。
顺便说一下,default
不能用作访问说明符,当没有指定时,它会被继承。
答案 8 :(得分:0)
我们真的使用default
作为访问说明符吗?没有说明者是“默认”。但是你没有这样使用关键字。
答案 9 :(得分:0)
final 有不同的用途:
答案 10 :(得分:0)
“extends”关键字可以用于单继承(Java中的实现或“纯抽象类”,也称为“接口继承”)。
“extends”关键字也可用于多个(接口)继承。
那些总是认为Java不支持多重继承的人因此很难说这两种情况下的“扩展”是完全相同的。
现在我在另一个阵营:我认为多接口继承是多继承,而实现继承只是一个OOP细节(在OOA / OOD级别不存在),因此我认为“扩展“在这两种情况下都真的做了同样的事情,因此我的答案没有回答这个问题:”
但它仍然是一个有趣的关键词:)
答案 11 :(得分:0)
您可以考虑以下事项
答案 12 :(得分:0)
正如所有其他答案所述,有许多关键字根据上下文服务多种用途。我只想补充说有一个原因:强烈厌恶添加关键字,因为这些添加会破坏现有代码,所以当添加新功能时,如果它们合理适合使用现有关键字,例如super和extends对于泛型和注释的默认值,或者它们只是在增强的for循环中使用的冒号中被跳过。
所以我的观点是期望随着语言的不断发展,现有关键词的用途越来越多,而不是引入新的关键词。
答案 13 :(得分:0)
BTW在Java中没有访问说明符这样的东西。 JLS中的术语是“访问修饰符”。