![](/img/trans.png)
[英]When an instance of a class is created in itself, then why the statements in the constructor are not executed?
[英]Why class instance itself has no public constructor?
在閱讀反射 API 時,我得到了這個“每個 Java 類型都有一個類實例而類實例本身沒有公共構造函數” 。
現在這對我來說真的很困惑。 因為我到目前為止所讀到的內容。 即使我們沒有指定任何類,所有類都有構造函數,一旦我們創建了它的實例,我們就會默認獲得構造函數(即使類是靜態的)。 有人可以用簡單的詞來解釋我嗎
(顯示甚至靜態類具有構造函數)
public class Reader1 {
private int pageNumber;
private class ReaderName1{
public int getPage(){
return pageNumber;
}
}
static class ReaderFound{
}
}
使用 javap
class Reader1$ReaderFound {
Reader1$ReaderFound();
}
它說:沒有public
構造函數。 這並不意味着它根本沒有構造函數。 它確實有一個private
構造函數,您也可以創建它,如下面給定的類,它也沒有public
構造函數。
class Test {
private Test() { }
}
“每個 Java Type 都有一個類 Instance 而類實例本身沒有公共構造函數”這意味着 java.lang.Class 沒有公共構造函數,因為只有 JVM 可以創建 java.lang.Class 實例,並且每個類 Java Type 都有一個 java.lang.Class 實例。我認為這就是你感到困惑的原因。
在 Java 中,您可以通過在繼承類中將其定義為private
來抑制public
構造函數 - 對於Class
這意味着:
public final class Class<T> {
private Class() {
//this constructor is private, no other constructor exists or will be generated
}
}
要創建類的實例,存在一些工廠方法,例如Class.forName
。
直接從官網引用。 我希望它能幫助你。
原始 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。 類沒有公共構造函數。 相反,當類加載器調用defineClass 方法之一並傳遞類文件的字節時,Java 虛擬機會自動構造一個Class 對象。
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.