Вы объединяете классы и файлы ".class".
Требуется ли только полное имя класса файла .class? Требует ли метод ClassCoader loadClass (), чтобы только динамически загружалось полное имя класса файла .class?
Требуется полное имя класса класса .
Если файл .class может находиться в любом месте файловой системы ...
Этого не может быть! Файл .class, соответствующий классу, должен находиться в пути к соответствующему загрузчику классов.
Если вы хотите загрузить класс из произвольного файла в файловой системе, вам нужно создать новый экземпляр загрузчика классов:
Если вы используете один из стандартных Реализации загрузчика классов, он будет использовать стандартную схему для разрешения местоположения файла .class на основе имен пакетов классов.
Можно было бы реализовать собственный загрузчик классов, который разрешает имена классов FQ в файл системные объекты ... каким-то другим способом. Но это кажется ненужным, поскольку стандартный Java компилятор будет генерировать .class
файлов по стандартной схеме.
При запуске такой байт-код создается из Java программа с командой java, мне нужно указать путь к файлу .class для динамической загрузки в -cp?
Вы не указываете местоположение файла .class. Вы указываете местоположение каталога, в котором файл .class может быть разрешен, как указано выше.
Но если работающая Java программа генерирует, компилирует и затем загружает класс, ей потребуется динамически создайте новый загрузчик классов, чтобы загрузить его ... надежно.
Почему? Потому что загрузчики классов обычно кэшируют содержимое каталогов и индексов JAR на пути к классам. Поэтому, когда программа пишет новый файл, загрузчик классов может не узнать об этом.
Существует также проблема, заключающаяся в том, что загрузчик классов не может загрузить один и тот же класс (из любого места) дважды.
Наконец, учтите, что если два загрузчика классов загружают класс с одинаковым полностью определенным именем, система типов времени выполнения обрабатывает их как отдельные классы / типы. Вы не можете разыграть между двумя воплощениями типа.