Java 为什么系统类声明为final并使用私有构造函数?

Java 为什么系统类声明为final并使用私有构造函数?,java,final,private-constructor,Java,Final,Private Constructor,据我了解 期末班 最后一个类只是一个不能扩展的类 具有单个无参数私有构造函数的类 具有私有构造函数的类不能实例化,同一类中的表单除外。这使得从另一个类扩展它变得毫无用处。但这并不意味着它根本不能被子类化,在内部类中我们可以扩展并调用私有构造函数 所以我的理解是,如果我们创建了一个具有单个无参数私有构造函数的类,那么将该类声明为final并没有任何意义。那么为什么Java中的系统类被声明为最终类,尽管它只有一个无参数的私有构造函数? 我听说参加一个班级的期末考试有一定的成绩提升。这是正确的吗?这是

据我了解

期末班 最后一个类只是一个不能扩展的类

具有单个无参数私有构造函数的类 具有私有构造函数的类不能实例化,同一类中的表单除外。这使得从另一个类扩展它变得毫无用处。但这并不意味着它根本不能被子类化,在内部类中我们可以扩展并调用私有构造函数

所以我的理解是,如果我们创建了一个具有单个无参数私有构造函数的类,那么将该类声明为final并没有任何意义。那么为什么Java中的系统类被声明为最终类,尽管它只有一个无参数的私有构造函数?

我听说参加一个班级的期末考试有一定的成绩提升。这是正确的吗?这是将系统类声明为final的唯一原因吗?请澄清为什么Java实现了这样的系统类。

有时,您需要一些“实用程序”类,其中包含一些静态实用程序方法。这些课程预计不会延长。因此,开发人员可能会做出一些防御性的决定,并将此类类标记为“final”。我想说的是,用“final”标记一个Java类可能会在Hotspot中带来一点性能改进(请参阅)。但是,我很确定,这是一个设计决定,而不是性能决定

如果您还想拥有一些不可变的值对象,或者希望仅通过类的工厂方法实例化类,那么可以使用final类。不可变值对象在处理并发时特别有用:

public final class MyValueObject {
   private final int value;
   private MyValueObject(int value) { this.value = value; }
   public static MyValueObject of(int value) { return new MyValueObject(value); }  
}
使用静态工厂方法,可以在工厂方法后面隐藏所有这些构造细节。此外,您可以通过该工厂控制该类在运行时的实例数,就像在单例中一样


正如我所说的,所有这些都是设计决策。我很确定期末考试并没有带来显著的成绩提升

它是最终的,所以不能扩展,并且它有一个私有构造函数,所以不能实例化(因为应该只有一个
系统
)-它们实际上并不相关。私有构造函数用于创建单例类,如果扩展它,则可以创建超类的对象,以便限制该系统对象,这只是为了让每个人都明白:甚至不要试图扩展它。我认为在这种特殊情况下不太可能有任何性能提升,因为
系统没有虚拟方法,只有静态方法。您是先搜索的吗?等等;还有外面。