![](/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.