在java中有两个相同的关键字?

时间:2010-03-08 15:35:53

标签: java

由于我们使用“default”关键字作为访问说明符,并且它可以在switch语句中使用以及完全不同的目的,所以我很好奇,java中有任何其他关键字可以在一个以上使用目的

14 个答案:

答案 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关键字不用作访问说明符。缺少privateprotectedpublic表示使用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)

您可以考虑以下事项

  1. 默认
  2. 最终
  3. ”(冒号)在不同的地方使用,在不同的地方有不同的含义

答案 12 :(得分:0)

正如所有其他答案所述,有许多关键字根据上下文服务多种用途。我只想补充说有一个原因:强烈厌恶添加关键字,因为这些添加会破坏现有代码,所以当添加新功能时,如果它们合理适合使用现有关键字,例如super和extends对于泛型和注释的默认值,或者它们只是在增强的for循环中使用的冒号中被跳过。

所以我的观点是期望随着语言的不断发展,现有关键词的用途越来越多,而不是引入新的关键词。

答案 13 :(得分:0)

BTW在Java中没有访问说明符这样的东西。 JLS中的术语是“访问修饰符”。