Java 中 void 和 Void 的區別
java.lang.Void 型別類似於 java.lang.Integer。Void 包裹著 void 並擴充套件物件類,而 void 沒有任何可能的值,使得 java.lang.Void 不可例項化。
我們的目標是找出並理解 Java 程式設計中 Void 和 void 之間的區別。我們還將學習如何以及在哪裡可以在 Java 程式設計中使用 Void 或 void。
Java 中 void 和 Void 之間的區別
兩者(Void 和 void)之間的基本區別在於 void 是原始型別,而 Void 是從 Object 繼承的引用型別。儘管它們都沒有任何可能的值,但它們都是不同的型別。
void(全小寫)是用於指代值不存在的不正確型別。由於沒有任何可表示的值,void 表示函式或方法不會返回任何值。
另一方面,java.lang.Void 返回物件,我們可以返回 null 合法地做事情,這是唯一的方法。它不可例項化,因為它有一個無法在外部訪問的私有建構函式。
在 Java 中使用 void 和 Void
我們在希望方法不返回任何值的地方使用 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
