簡體   English   中英

在java中有兩個相同的關鍵字?

[英]Same keyword for two purposes in java?

因為我們使用“default”關鍵字作為訪問說明符,並且它可以在switch語句中使用以及完全不同的目的,所以我很好奇java中有任何其他關鍵字可以用於多個目的

訪問修飾符的“默認”不是關鍵字 - 您不寫:
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)

你不能使用default作為訪問說明符,所以我不認為即便如此。 (編輯:正如Bozho指出的那樣,它可以用於注釋。)

final意味着“不能從/被覆蓋”和“只讀”,它們是兩種不同但相關的含義。

  • default既可以在開關中使用,也可以在注釋中用作默認值(如Bozho所指出的)
  • final意味着“不能從/被覆蓋”和“只讀”,它們是兩種不同但相關的含義(如Jon指出的那樣)
  • extends既可用於指定類的超類型,也可用於通配符和類型變量來放置約束(相關但不完全相同)( List<? extends Foo>
  • super可以用來指定當前類的超類中的某些東西,或者用於通配符來放置約束( List<? super Foo>
  • static意味着“類的一部分,而不是實例”(對於方法,屬性或初始化器)和static import
  • class聲明一個類( class Foo {} ),或引用一個類文字( Foo.class )(由ILMTitan回答)
  • for可以正常用於循環和“強化”了,但是這更像是超載(如Bozho所說的這么好聽),比真的有兩個方面的含義)

沒有人提到的東西: class關鍵字有兩種不同的用途。

宣布課程:

class Test{};

並指示一個類文字:

Class<Test> testClass = Test.class;

default關鍵字不用作訪問說明符。 缺乏privateprotectedpublic意味着使用default

例:

class Test { // default access for class.

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

發現不同用途的Java關鍵字的一些示例是:

  • finalfinal class不能被子類化, final方法不能被覆蓋,並且final變量最多可以作為左手表達式出現一次。

  • Super :用於訪問由其出現的類繼承的類的成員,還用於將調用從構造函數轉發到超類中的構造函數。

  • Static :用於創建static初始化塊, static成員和static導入。

  • for :用於傳統的for循環和較新的Java 1.5 enhanced for循環。

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();
   }
}

final關鍵字可能意味着不同的東西。

  • 修改classes意味着該類不能被子類化。
  • 修改method ,意味着無法覆蓋該方法。
  • 修改variable ,意味着變量不能指向任何其他變量。

我看了一下java關鍵字,但似乎關鍵字是唯一的..你可以自己檢查一下。

順便說一下, default不能用作訪問說明符,它是在指定noone時繼承的。

我們真的使用default作為訪問說明符嗎? 沒有說明者是“默認”。 但是你不要那樣使用關鍵字。

final有不同的用途:

  • 在變量聲明中,它表示無法更改變量。
  • 在方法簽名中,它意味着不能覆蓋方法
  • 在參數列表中,它表​​示不能在方法中更改變量。

“extends”關鍵字可以用於單繼承(Java中的實現或“純抽象類”,也稱為“接口繼承”)。

“extends”關鍵字也可用於多個(接口)繼承。

那些總是認為Java不支持多重繼承的人因此很難說這兩種情況下的“擴展”是完全相同的。

現在我在另一個陣營:我認為多接口繼承是多重繼承,而實現繼承只是一個OOP細節(在OOA / OOD級別不存在),因此我認為“擴展”是真的在這兩種情況下做同樣的事情,因此我的答案不回答問題:)

但它仍然是一個有趣的關鍵字:)

你可以想到以下幾點

  1. 默認
  2. 最后
  3. ”(冒號)用於不同的地方,在不同的地方有不同的含義

正如所有其他答案所述,有許多關鍵字根據上下文服務多個目的。 我只想補充說有一個原因:強烈厭惡添加關鍵字,因為這些添加會破壞現有代碼,所以當添加新功能時,如果它們合理適合使用現有關鍵字,例如super和extends對於泛型和注釋的默認值,或者它們只是在增強的for循環中使用的冒號中被跳過。

所以我的觀點是期望隨着語言的不斷發展,現有關鍵詞的用途越來越多,而不是引入新的關鍵詞。

BTW在Java中沒有訪問說明符這樣的東西。 JLS中的術語是“訪問修飾符”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM