Java 中 void 和 Void 的區別

Mehvish Ashiq 2023年10月12日
  1. Java 中 voidVoid 之間的區別
  2. 在 Java 中使用 voidVoid
Java 中 void 和 Void 的區別

java.lang.Void 型別類似於 java.lang.IntegerVoid 包裹著 void 並擴充套件物件類,而 void 沒有任何可能的值,使得 java.lang.Void 不可例項化。

我們的目標是找出並理解 Java 程式設計中 Voidvoid 之間的區別。我們還將學習如何以及在哪裡可以在 Java 程式設計中使用 Voidvoid

Java 中 voidVoid 之間的區別

兩者(Voidvoid)之間的基本區別在於 void 是原始型別,而 Void 是從 Object 繼承的引用型別。儘管它們都沒有任何可能的值,但它們都是不同的型別。

void(全小寫)是用於指代值不存在的不正確型別。由於沒有任何可表示的值,void 表示函式或方法不會返回任何值。

另一方面,java.lang.Void 返回物件,我們可以返回 null 合法地做事情,這是唯一的方法。它不可例項化,因為它有一個無法在外部訪問的私有建構函式。

在 Java 中使用 voidVoid

我們在希望方法不返回任何值的地方使用 void(全部小寫)。就像下面的例子一樣,printMessage() 方法不返回任何內容,而是在螢幕上列印一條訊息。

void (Main.java) 的示例程式碼:

public class Main {
  static void printMessage() {
    System.out.println("printMessage function just got executed!");
  }

  public static void main(String[] args) {
    printMessage();
  }
}

我們可以在 Java 程式設計中進行反射時使用 Void(首字母大寫),因為在某些情況下我們需要將 void 關鍵字表示為物件。

同時,我們不允許建立 Void 類的物件,這就是為什麼它的建構函式是私有的,不能從外部訪問。

此外,我們不能繼承 Void 類,因為它是 final 類。這導致我們在反射中使用 Void,我們將方法的返回型別作為 void

Void (Main.java) 的示例程式碼:

public class Main {
  public static void main(String[] args) throws SecurityException, NoSuchMethodException {
    Class c1 = TestOne.class.getMethod("Test", (Class<?>[]) null).getReturnType();
    System.out.println(c1 == Void.TYPE); // true
    System.out.println(c1 == Void.class); // false
  }
}

Void (TestOne.java) 的示例程式碼:

class TestOne {
  public void Test() {}
}

輸出:

True
False

我們還可以使用泛型獲得方法的返回型別為 void。我們想為一個可以返回 void 的泛型類編寫程式碼。

abstract class Foo<T> {
  abstract T bar();
}

class Bar extends Foo<Void> {
  Void bar() {
    return (null);
  }
}

輸出:

True
False
作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - Java Void