Оператор new
создает новый объект статически известного типа (во время компиляции) и может вызывать любой конструктор объекта, который вы пытаетесь создать. Это предпочтительный способ создания объекта - он быстрый, и JVM проводит на нем много агрессивных оптимизаций.
Class.forName().newInstance()
- это динамическая конструкция, которая ищет класс с определенным именем. Это медленнее, чем использование new
, потому что тип объекта не может быть жестко закодирован в байт-код, и потому что JVM, возможно, придется выполнять проверку разрешений, чтобы убедиться, что у вас есть полномочия на создание объекта. Это также частично небезопасно, потому что он всегда использует конструктор с нулевым аргументом, и если объект, который вы пытаетесь создать, не имеет нулевого конструктора, он генерирует исключение.
Короче говоря, используйте new
, если вы знаете во время компиляции, какой тип объекта вы хотите создать. Используйте Class.forName().newInstance()
, если вы не знаете, какой тип объекта вы будете делать.