繁体   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