Когда мы используем загрузку статического и динамического классов?

Я знаю разницу между загрузкой статического класса и загрузкой динамического класса. В общем, мы всегда используем загрузку класса Static. Кто-нибудь скажет, в каких ситуациях мы используем загрузку динамического класса?

Ответ 1

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

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

код:

try {
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader reader = new BufferedReader(in);

    System.out.println("Enter Class Name: ");
    String whatClass = reader.readLine();

    Class exampleClass = Class.forName(whatClass);
    Object ob = exampleClass.newInstance();

} catch (ClassNotFoundException e) {
    e.printStackTrace();

} catch (Exception e) {
    e.printStackTrace();
}

Ответ 2

ЗАГРУЗКА ДИНАМИЧЕСКОГО КЛАССА

Он позволяет создавать ваши приложения, чтобы ключевые внешние зависимости не были скомпилированы в исходный код приложения.

Приложения

JDBC

Например, в случае JDBC он позволяет переключаться между различными реализациями драйверов и (теоретически) разными поставщиками баз данных без изменения исходного кода.

PLUG-INS

Другой вариант использования - когда какой-то поставщик разрабатывает общую форму приложения с точками расширения, которые позволяют клиентам "подключать" свои собственные пользовательские классы. Пользовательские классы обычно загружаются с использованием Class.forName(...).

РАМКИ И КОНТЕЙНЕРЫ

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

ПРОЧЕЕ

Четвертый случай использования - это то, где приложение (или, скорее, библиотека приложений) имеет модули, которые не используются в типичном запуске приложения. Используя внутреннее приложение Class.forName(...), приложение или библиотека могут избежать затрат на процессор и память для загрузки и инициализации большого количества нежелательных классов. (Библиотеки Sun Swing, по-видимому, делают это, чтобы сократить время запуска приложений, и я уверен, что есть другие примеры.)

Обратитесь Загрузка динамического класса

Ответ 3

Одним из распространенных примеров является тривиальное программирование JDBC. Динамическая загрузка классов используется для загрузки класса драйвера

Если вы видите какой-либо код с Class.forName(), то это пример для динамической загрузки

Ответ 4

Когда вы используете отражение и создаете новые экземпляры. Вы всегда можете получить новую банку, например. через url и создать объект из него во время выполнения.

Ответ 5

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

Ответ 6

Наиболее распространенным случаем в Java являются плагины и подобные плагины библиотеки, такие как JDBC-драйверы.

Ответ 7

Динамическая загрузка - это метод для программного вызова функций загрузчика классов во время выполнения. Давайте посмотрим, как динамически загружать классы, используя Class.forName(String className); метод, это статический метод.

Вышеуказанный статический метод возвращает объект класса, связанный с именем класса. Строка className может поставляться динамически во время выполнения. Когда класс динамически загружается, метод class.newInstance() возвращает экземпляр загруженного класса. Это похоже на создание объекта класса без аргументов.

Класс ClassNotFoundException генерируется, когда приложение пытается загрузить в класс через его имя класса, но определение класса с указанным именем не может быть найдено.