Какова цель загрузчика Java Class? - PullRequest
6 голосов
/ 29 июня 2011

Мой вопрос: когда JVM загружает все классы в проекте?Кроме того, зачем нам понятие загрузчика классов.

Я был бы рад, если бы вы могли привести мне пример ситуации, когда вы используете загрузчик классов и почему вы используете загрузчик классов в этой ситуации.

Ответы [ 7 ]

13 голосов
/ 29 июня 2011

, когда JVM загружает все классы в проекте.

JVM загружает классы более или менее «по требованию»,Т.е. все классы во время выполнения обычно не загружаются при запуске.

Подробнее об этом см. В следующих URL-адресах:

зачем нам понятие загрузчика классов

Загрузчики классов позволяют загружать классы из различных источников.

  • файл JAR на диске
  • среда выполнения, сгенерированная байтоммассив
  • из Интернета (типичный вариант использования для апплетов)

Это делает запуск приложения более гибким и модульным.

приведите пример с ситуацией, когда вы используете загрузчик классов и почему вы используете там загрузчик классов.

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

Лично я провел некоторый экспериментиспользование библиотеки манипулирования байт-кодом ( ASM ), где я заменил доступ к полям вызовами get- и set-метода.Я использовал пользовательский загрузчик классов, чтобы переписать классы по мере их загрузки.Я не знаю, является ли это типичным случаем использования, но дело в том, что я не смог бы сделать это без него!

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

2 голосов
/ 29 июня 2011

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

class A
{}  
class B extends A  
{  
  public static void main(String arr[])  
  {}  
}  

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

теперь учтите это

class A  
{}  

class B  
{  
  public static void main(String arr[])  
  {  
    A ob=new A();//here class A is need to be loaded by JRE  
  }  
}
1 голос
/ 21 февраля 2014

JVM загружает класс при первом обращении к нему. Для более глубокого анализа загрузчиков классов смотрите здесь

1 голос
/ 29 июня 2011

Вы используете класс Loader для загрузки классов, если вы разрабатываете приложение, которое может поддерживать плагины.Пример: у вас есть приложение для видеоплеера, и каждый кодек является плагином в вашем приложении.у вас есть папка ./codecs и там вы положили свои кодеки плагина.Вы ищете в папке jar-файлы и загружаете все jar-файлы с помощью Class loader.

1 голос
/ 29 июня 2011

Классы загрузки JVM по запросу. Когда вам нужно явно загрузить класс, вам нужно сделать ссылку на этот класс из основного класса, например <pre> static { MyClass.class.getName(); }

Пользовательский загрузчик классов редко требуется, в большинстве случаев это: AOP (например, инструментарий загрузки классов во время выполнения с Javassist), удаленная загрузка классов (загрузка класса из удаленного местоположения), зашифрованная загрузка классов (расшифровка кода класса и загрузка ).

0 голосов
/ 07 октября 2017

Загрузчик классов по умолчанию загружает файл .class только один раз, даже если вы используете это несколько раз в своей программе.После загрузки файла .class, если он изменен снаружи, загрузчик классов по умолчанию не будет загружать обновленную версию файла класса (файл .class уже доступен в области методов).Вы можете решить эту проблему, определив свой собственный настроенный загрузчик классов.

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

java.lang.ClassLoader для определения собственного настроенного загрузчика классов.Каждый загрузчик классов в JAVA должен быть дочерним классом класса java.lang.ClassLoader, либо напрямую, либо косвенно.Следовательно, этот класс действует как базовый класс для всех настроенных загрузчиков классов.

Примечание: При проектировании / разработке веб-серверов и сервера приложений обычно настраиваемые загрузчики классов используются для настраиваемого механизма загрузки классов.

Например:

public class CustClassLoader extends ClassLoader{
     public Class loadClass(String cname) throws ClassNotFoundException{
     //check for updates and laod updated .class
     //file and returns corresponding Class
     }
}

class Client{
    public static void main(String [] args){
         Dog d1 = new Dog();
         CustClassLoader c1 = new CustClassLoader();
         c1.loadClass("Dog");
         //
         // 
         //
         c1.loadClass("Dog");
         //
     //
     }
}
0 голосов
/ 17 января 2016

Класс загрузчик используется во многих случаях. Несколько примеров:

  1. Class.forName для получения классов Java во время выполнения
  2. API отражения
  3. Отладчик Eclipse

Есть и много других примеров.

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