为什么类实例本身没有公共构造函数?

时间:2015-04-10 04:35:31

标签: java reflection

在阅读Reflection 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();
        }

4 个答案:

答案 0 :(得分:0)

它说:没有public构造函数。这并不意味着它根本没有构造函数。它有一个private构造函数,您也可以创建它,如下面给定的类,它也没有public构造函数。

class Test {
    private Test() { }
}

答案 1 :(得分:0)

“每个Java类型都有一个类实例并且类实例本身没有公共构造函数”这意味着java.lang.Class没有公共构造函数,因为只有JVM才能创建java.lang.Class实例,并且每个类都有Java Type有一个java.lang.Class实例。我认为这就是你感到困惑的原因。

答案 2 :(得分:0)

在Java中,您可以通过在继承类中定义public来禁止private构造函数 - 对于Class这意味着:

public final class Class<T> {
  private Class() {
    //this constructor is private, no other constructor exists or will be generated
  }
}

要创建类的实例,存在一些工厂方法,例如Class.forName

答案 3 :(得分:0)

直接从官方网站引用。希望它能对您有所帮助。

原始Java类型(布尔,字节,字符,short,int,long,float和double)以及关键字void也表示为Class对象。 类没有公共构造函数。当类加载器调用defineClass方法之一并传递类文件的字节时,Java虚拟机会自动构造Class对象。

https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html