ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому
ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€

🎯 Как Java Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ классы? Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ClassLoader'ΠΎΠ²

🎯 Как Java Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ классы? Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ClassLoader'ΠΎΠ² БСчас ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ ΠΎΠ΄Π½Ρƒ ΠΈΠ· самых Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ Π² ΠΌΠΈΡ€Π΅ 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, Π΄Π°ΠΆΠ΅ Ссли классы выглядят ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. πŸ‘‰ @BookJava

614 просмотров

Канал Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠœΠ°ΠΊΡΠΈΠΌΠ΅Ρ‚Π΅Ρ€Π°

1Β 609 подписчиков Β· Наука

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°

Π•Ρ‰Ρ‘ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ «Наука»

Π§ΠΈΡ‚Π°Ρ‚ΡŒ дальшС

Π”Π²Π° Ρ€Π°Π·Π° Π² нСдСлю свСТиС посты этого ΠΊΠ°Π½Π°Π»Π° β€” Π½Π° ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΈ Π² Π»ΠΈΡ‡Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ. Π‘Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠ°Π½Π°Π»Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.