代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

Java中有两个关键字相同的关键字吗?

  •  6
  • GuruKulki  · 技术社区  · 15 年前

    因为我们使用“默认”关键字作为访问说明符,并且它可以用于切换语句以及完全不同的目的,所以我很好奇,Java中是否还有其他关键字可以用于多个目的。

    14 回复  |  直到 15 年前
        1
  •  4
  •   Wouter Coekaerts    15 年前
    • default 既可以在开关中使用,也可以作为注释中的默认值(如bozho所指出的那样)
    • final 意思是“不能从/重写”和“是只读的”,这是两种不同但相关的含义(如jon所指出的)
    • extends 既可用于指定类的父类型,也可用于通配符和类型变量中,以放置约束(相关但不完全相同)( List<? extends Foo> )
    • super 可用于指定当前类的超类中的某个内容,或在通配符中指定用于放置约束的内容( List<? super Foo> )
    • static 表示“类的一部分,而不是实例”(用于方法、属性或初始值设定项)和 static import
    • class 声明类( class Foo {} )或引用类文本( Foo.class )(由Ilmtitan回答)
    • ( for 可以在普通的for循环和“增强的”for中使用,但这更像是重载(正如bozho所说的,它非常好),而不是真正有两个含义。
        2
  •  13
  •   Bozho    15 年前

    访问修饰符的“默认值”不是关键字-您不写:
    default void doSomething()

    但是,当指定注释属性的默认值时,它是。

    switch (a) {
       default: something();
    }
    

    public @interface MyAnnotation {
        boolean bool() default true;
    }
    

    那,连同 final 正如乔恩·斯基特所指出的,似乎涵盖了一切。也许除了“超载” for 关键字:

    for (initializer; condition; step) for (Type element : collection)

        3
  •  7
  •   Jon Skeet    15 年前

    你不能用 default 作为一个访问说明符,所以我认为这都不重要。(编辑:正如Bozho指出的,它可以用于注释。)

    final 意思是“不能从/重写中派生”和“是只读的”,这是两种不同但相关的含义。

        4
  •  3
  •   ILMTitan    15 年前

    其他人还没有提到的事情 关键字有两种不同的用途。

    声明类:

    class Test{};
    

    并指示类文本:

    Class<Test> testClass = Test.class;
    
        5
  •  2
  •   jjnguy Julien Chastang    15 年前

    这个 final 关键词可能意味着不同的事情。

    • 修改时 classes 是指类不能被子类化。
    • 当修改 method ,表示该方法不能被重写。
    • 当修改 variable ,这意味着变量不能指向任何其他变量。
        6
  •  2
  •   codaddict    15 年前

    这个 default 关键字未用作访问说明符。缺少 private , protected public 指使用 违约 .

    例子:

    class Test { // default access for class.
    
     int A; // default access for the class member.
    }
    

    Java关键字的不同用法有:

    • final 答: 最终的 class 不能子类化,a 最终的 方法不能被重写,并且 最终的 变量最多只能作为左侧表达式出现一次。

    • Super :用于访问由它出现的类继承的类的成员,还用于将调用从构造函数转发到超类中的构造函数。

    • Static :用于创建 static 初始化块,也 静止的 成员和 静止的 进口。

    • for :用于常规 对于 循环和更新的Java 1.5 enhanced for 回路。

        7
  •  2
  •   Jonathon Faust    15 年前

    这个 static 关键字将方法和字段与类(而不是该类的实例)关联,但它也用于表示静态初始化部分,如中所示:

    public class MyClass
    {
       private static int a;
    
       static
       {
          a = 1;
       }
    
       public static void doSomethingCool()
       {
          ...
       }
    }
    

    帕斯卡的评论让我想起了静态导入:

    import static MyClass.doSomethingCool;
    
    public class MyOtherClass
    {
       public void foo()
       {
          // Use the static method from MyClass
          doSomethingCool();
       }
    }
    
        8
  •  0
  •   Jack    15 年前

    我看了一眼 java keywords 但关键词似乎是独一无二的。你可以自己检查一下。

    顺便说一句 default 不能用作访问说明符,它是在未指定任何对象时继承的。

        9
  •  0
  •   extraneon    15 年前

    我们真的用吗 default 作为访问说明符?根本没有说明符是“默认”。但你不会那样使用关键词。

        10
  •  0
  •   Steve B.    15 年前

    最终的 有不同的用途:

    • 在变量声明中,它意味着不能更改变量。
    • 在方法签名中,这意味着不能重写方法
    • 在参数列表中,这意味着不能在方法中更改变量。
        11
  •  0
  •   SyntaxT3rr0r    15 年前

    “扩展”关键字可用于单继承(实现或纯抽象类“AKA”爪哇中的接口继承)。

    “extends”关键字也可以用于多个(接口)继承。

    那些总是认为Java不支持多重继承的人将很难争辩说,在这两种情况下“扩展”是完全相同的。

    现在我进入了另一个阵营:我认为多接口继承是多继承,而实现继承只是一个OOP细节(在OOA/OOD级别上不存在),因此我认为“扩展”在这两种情况下都在做同样的事情,因此我的ANS也在做同样的事情。我们没有回答问题:)

    不过,这是一个有趣的关键词:)

        12
  •  0
  •   gmhk    15 年前

    你可以想到以下几点

    1. 违约
    2. 最终的
    3. 超级的
    4. : “(冒号)在不同的地方使用,在不同的地方有不同的含义
        13
  •  0
  •   Yishai    15 年前

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

    因此,我的观点是,随着语言的不断发展,对现有关键字的使用甚至更多,而不是引入新的关键字。

        14
  •  0
  •   user207421    15 年前

    顺便说一下,Java中没有这样的访问说明符。jls中的术语是“访问修饰符”。