🎯 Как Java находит классы? Под капотом ClassLoader'ов
Сечас покажу вам одну из самых недооценённых тем в мире Java — механизм загрузки классов.
Когда ты запускаешь Java-приложение, оно не просто «видит» все классы. За кулисами работает цепочка загрузчиков:
1. Bootstrap ClassLoader
Самый базовый. Загружает классы из JDK (
2. Platform ClassLoader (ранее Extension)
Загружает модули платформы (
3. Application ClassLoader
Твой лучший друг. Он отвечает за загрузку классов из
Но вот где начинается магия — ты можешь создать собственный ClassLoader и загружать классы в рантайме из файлов, БД или даже сети. Например:
💡 Это используется в плагинных системах (например, IntelliJ, Jenkins, Minecraft).
Но будь осторожен — неправильная работа с загрузчиками может привести к
📲 Мы в MAX
👉@BookJava
Сечас покажу вам одну из самых недооценённых тем в мире Java — механизм загрузки классов.
Когда ты запускаешь Java-приложение, оно не просто «видит» все классы. За кулисами работает цепочка загрузчиков:
1. Bootstrap ClassLoader
Самый базовый. Загружает классы из JDK (
rt.jar, java.base, и так далее). На него даже нельзя получить ссылку в коде.2. Platform ClassLoader (ранее Extension)
Загружает модули платформы (
jmods), доступные из JDK, но не из java.base.3. Application ClassLoader
Твой лучший друг. Он отвечает за загрузку классов из
classpath (например, target/classes и lib/*.jar).Но вот где начинается магия — ты можешь создать собственный ClassLoader и загружать классы в рантайме из файлов, БД или даже сети. Например:
ClassLoader customLoader = new URLClassLoader(new URL[]{new File("plugins/").toURI().toURL()});
Class<?> pluginClass = customLoader.loadClass("com.example.PluginImpl");
💡 Это используется в плагинных системах (например, IntelliJ, Jenkins, Minecraft).
Но будь осторожен — неправильная работа с загрузчиками может привести к
ClassCastException, даже если классы выглядят одинаково.📲 Мы в MAX
👉@BookJava
👍3