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