Почему я должен загрузить определение класса как:
Class.forName ("Имя класса");
Что является потребностью и преимуществом этого.Typically, который используется для загрузки класса драйвера в JDBC.
Какая в этом необходимость и польза. Обычно используется для загрузки класса драйвера в JDBC.
Это позволяет вам создавать ваши приложения так, чтобы ключевые внешние зависимости не компилировались в исходный код приложения.
Например, в случае JDBC он позволяет переключаться между различными реализациями драйверов и (теоретически) разными поставщиками баз данных без изменения исходного кода.
Другой вариант использования - когда какой-либо поставщик разрабатывает универсальную форму приложения с точками расширения, которые позволяют клиентам «подключать» свои собственные пользовательские классы. Пользовательские классы обычно загружаются с использованием Class.forName (...)
.
Третий вариант использования - это каркасы приложений и контейнеры, которые обычно используют Class.forName (...)
под капотом для динамической загрузки классов для конкретных приложений bean-компонентов, сервлетов и так далее.
Четвертый вариант использования - это когда приложение (или, что более вероятно, библиотека приложения) имеет модули, которые не используются при типичном запуске приложения. Используя внутреннее использование Class.forName (...)
, приложение или библиотека могут избежать накладных расходов ЦП и памяти, связанных с загрузкой и инициализацией большого количества нежелательных классов. (Библиотеки Sun Swing, по-видимому, делают это для сокращения времени запуска приложений, и я уверен, что есть и другие примеры.)
Однако, если вы не , вам понадобится , чтобы иметь возможность делать такого рода Дело в том, что статические зависимости проще реализовать.
FOLLOWUP
Но здесь при компиляции известен параметр "ClassName".Итак, ключевая внешняя зависимость встроена в исходный код приложения ??
Нет. Очевидно, это противоречит цели. Приложение (или фреймворк) обычно определяет имена классов, которые должны быть динамически загружены из некоторого файла конфигурации.
Не правда ли. ClassName.class
также будет работать. В любом случае, получение определения класса таким способом обычно является способом, которым реализации SPI внедряются в API .
Самая простая причина использования Class.forName (string className) - это