簡體   English   中英

為什么類實例本身沒有公共構造函數?

[英]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.

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