Почему системный класс объявлен как final и с приватным конструктором?

Согласно моему пониманию

Выпускной класс

Последний класс - это просто класс, который не может быть расширен.

Класс с одним аргументом приватный конструктор

Класс с закрытыми конструкторами не может быть создан, за исключением формы внутри этого же класса. Это делает его бесполезным расширять его из другого класса. Но это не значит, что он не может быть подклассифицирован вообще, среди внутренних классов мы можем расширять и вызывать приватный конструктор.

Поэтому я понимаю, что если мы создадим класс с закрытым конструктором без аргумента, то нет смысла объявлять этот класс финальным. Тогда почему системный класс в Java объявлен как конечный класс, хотя он не имеет частного конструктора без аргументов?

Я слышал, что финал в классе дает некоторый прирост производительности. Правильно ли это и является ли это единственной причиной для объявления класса System финальным? Пожалуйста, объясните мне, почему Java реализовал класс System следующим образом.

1 ответ

Иногда вам нужны некоторые "служебные" классы, которые содержат некоторые статические служебные методы. Эти классы не должны быть расширены. Таким образом, разработчики могут принять некоторые защитные решения и пометить такие классы как "окончательные". Я бы сказал, что маркировка класса Java словом "final" может привести к небольшим небольшим улучшениям производительности в Hotspot (см. https://wikis.oracle.com/display/HotSpotInternals/VirtualCalls). Но я уверен, что это было дизайнерское решение, а не производительность.

Вы можете использовать конечные классы, если вы хотите иметь также несколько неизменяемых объектов-значений, или если вы хотите, чтобы классы создавались только через их фабричные методы. Неизменяемые значения объектов особенно полезны при работе с параллелизмом:

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); }  
}

Используя статический метод фабрики, вы можете скрыть все эти детали конструкции за фабричным методом. Более того, вы можете контролировать с помощью этой фабрики количество экземпляров этого класса во время выполнения - как в одиночных.

Как я уже сказал, все это дизайнерские решения. Я почти уверен, что в финальных классах нет заметного прироста производительности.

Другие вопросы по тегам