Class.newInstance()
вызывает конструктор с нулевым аргументом, независимо от того, является он открытым или нет. Он выполняет проверку во время выполнения доступа вызывающего к этому конструктору.
Вызов getDeclaredConstructor()
возвращает тот же конструктор. Вызов getDeclaredConstructor().newInstance()
выполняет те же проверки во время выполнения. За исключением различной обработки исключений, он делает то же самое.
Нет, не меняйте его на getConstructor()
. Это вызвало бы NoSuchMethodException
для непубличных конструкторов.