tgoop.com/dev_easy_notes/63
Last Update:
{2/3} 3 принципа: принцип делегирования, принцип видимости и принцип уникальности.
👉 Принцип делегирования
Если система попросит Child загрузить какой-то класс, то в первую очередь Child передаст этот запрос на загрузку класса к Parent. И если Parent не знает откуда взять такой класс или не может его загрузить, только тогда уже Child попытается его загрузить.
👉 Принцип видимости
Child видит все классы который загрузил Parent. Однако Parent не может видеть классы, которые загрузил Child.
👉 Принцип уникальности
Этот принцип гарантирует нам, что класс будет загружен только единожды. Другими словами, если Parent загрузил класс, то Child уже точно этот класс загружать не будет. Помимо этого Parent обязан закешировать класс и больше не пытаться его загрузить из внешнего источника.
По дефолту есть 3 основных Classloader: Bootstrap, Extension, System или Application ClassLoader.
Рассмотрим вкратце кто за что отвечает:
Bootstrap - подгружает классы, которые поставляются JRE, т.е базовые классы пакета java.lang, всякие String и т.д.
Extension - наследник класса Bootstrap;, отвечает за загрузку классов из папки jre/lib/ext или в директории которая будет прописана в системных настройках под ключом java.ext.dirs. Мы можем положить свой jar в эту папку и не прокидывать эту зависимость в наше приложение. Однако запускаться корректно оно теперь будет только на этом компе)
Application ClassLoader; - наследник класса Extension, и этот Classloader уже отвечает за загрузку class файлов из нашего jar/apk. Именно этот Classloader подгружает классы нашего приложения.
Для Application ClassLoader нужно указать с какого файла нужно начать подгружать классы нашего приложения, другими словами относительный путь до класса, в котором есть тот самый public static void main
Есть 3️⃣ варианта, команда -cp при запуске нашего jar из консоли, переменная среды CLASSPATH, или самое распространённое это сделать в jar Manifest файл. В этом Manifest файле прописать строку Class-Path. Последнее обычно делает gradle за нас.
Для Android приложения этого делать не нужно, за нас это все делает система, нам же просто нужно указать точки входа типа Activity, Service и т.д.
BY Dev Easy Notes

Share with your friend now:
tgoop.com/dev_easy_notes/63