Различия между экземплярами - PullRequest
0 голосов
/ 29 февраля 2012

немного возился с JFrames, и я заметил кое-что:

JFrame frame = new JFrame();

Работает, насколько я могу судить, точно так же, как:

JFrame frame = JFrame.class.newInstance();

Есть ли какие-нибудьразличия между этими двумя способами при использовании экземпляра по умолчанию без параметров?

Спасибо,

Легенда

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Метод newInstance() в java.lang.Class создает экземпляр класса, используя конструктор без аргументов - так что нет, два JFrame s будут идентичны.

Метод Class.newInstance() становится важным, когда объект Class создается с использованием имени класса во время выполнения - например, имени класса, считываемого из файла. Тогда вы можете сказать

String theClassName = ...;
Class clazz = Class.forName(theClassName);
Object o = clazz.newInstance();

Теперь у вас есть экземпляр класса, имя которого не было известно, когда этот код был скомпилирован. Если вы знаете (по соглашению), что названный класс реализует некоторый интерфейс или расширяет некоторый класс, то вы можете привести Object к этому интерфейсу или классу и использовать его таким образом. Так, например, контейнеры сервлетов загружают сервлеты, как описано в файлах конфигурации, или веб-браузеры загружают апплеты, названные в HTML.

0 голосов
/ 29 февраля 2012

newInstance() выдает два проверенных исключения, с которыми вам приходится иметь дело, и не позволяет компилятору сообщать вам, когда вы делаете что-то не так (например, пытаетесь создать экземпляр абстрактного класса).

А такого понятия как «экземпляр по умолчанию» не существует.

0 голосов
/ 29 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...