Узнаете на бесплатном открытом уроке «Разработка REST-клиентов на Spring» от OTUS.
На эфире рассмотрим Rest Template и WebClient, SOAP-сервисы и SOAP-клиентов на Spring.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Что такое static?
Ключевое слово static используется для объявления вложенных классов, статических методов, полей, блоков инициализации и статических импортов.
Статические поля и методы – члены класса а не экземпляра, потому к ним можно обращаться через имя класса. Код статического блока или метода имеет доступ только к статическим членам. Статические поля не участвуют в сериализации.
Для статических методов используется раннее связывание, то есть вызов конкретного метода разрешается на этапе компиляции, не работают перегрузка и переопределение в наследниках.
Статический блок инициализации выполняется потокобезопасно, один раз сразу после загрузки класса класслоадером. Инициализаторы статических полей выполняются в неявном статическом блоке. Блоков может быть несколько, выполнятся они в порядке объявления.
Статический импорт (static import) импортирует статические члены классов в .java-файл.
Ключевое слово static используется для объявления вложенных классов, статических методов, полей, блоков инициализации и статических импортов.
Статические поля и методы – члены класса а не экземпляра, потому к ним можно обращаться через имя класса. Код статического блока или метода имеет доступ только к статическим членам. Статические поля не участвуют в сериализации.
Для статических методов используется раннее связывание, то есть вызов конкретного метода разрешается на этапе компиляции, не работают перегрузка и переопределение в наследниках.
Статический блок инициализации выполняется потокобезопасно, один раз сразу после загрузки класса класслоадером. Инициализаторы статических полей выполняются в неявном статическом блоке. Блоков может быть несколько, выполнятся они в порядке объявления.
Статический импорт (static import) импортирует статические члены классов в .java-файл.
👍21🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Бэкенд-команды Яндекса отправляются в тур по городам России
С 13 по 17 ноября ребята из наших команд проведут встречи в Москве, Нижнем Новгороде, Екатеринбурге, Новосибирске и Санкт-Петербурге. Мы хотим рассказать местным разработчикам о себе: как устроены наши сервисы, что за технологии мы используем, почему гордимся тем, что делаем. Участвуют представители 14 разных сервисов Яндекса. После официальной части вместе отдохнём: послушаем стендап Севы Ловкачева и поболтаем о жизни в неофициальной обстановке.
Кроме этого, мы устроим онлайн-трансляцию встречи из Москвы — вы сможете подключиться и пообщаться с нашими разработчиками из любого города России.
Вот расписание встреч:
🔸 13 ноября онлайн-трансляция
🔸 13 ноября офлайн-встреча в Москве
🔸 14 ноября офлайн-встреча в Нижнем Новгороде
🔸 15 ноября офлайн-встреча в Екатеринбурге
🔸 16 ноября офлайн-встреча в Новосибирске
🔸 17 ноября офлайн-встреча в Санкт-Петербурге
А с 20 по 26 ноября мы проведём Week Offer Backend: предложим всего за одну неделю получить офер в одну из 14 участвующих команд. Приглашаем кандидатов с опытом разработки от трёх лет на одном из этих языков программирования: С++, С#, Python, Java, Go и Scala. Принимаем заявки до 19 ноября.
Узнать подробности и зарегистрироваться можно здесь.
Реклама. ООО "Яндекс". erid: 2VtzqwfRiE2
С 13 по 17 ноября ребята из наших команд проведут встречи в Москве, Нижнем Новгороде, Екатеринбурге, Новосибирске и Санкт-Петербурге. Мы хотим рассказать местным разработчикам о себе: как устроены наши сервисы, что за технологии мы используем, почему гордимся тем, что делаем. Участвуют представители 14 разных сервисов Яндекса. После официальной части вместе отдохнём: послушаем стендап Севы Ловкачева и поболтаем о жизни в неофициальной обстановке.
Кроме этого, мы устроим онлайн-трансляцию встречи из Москвы — вы сможете подключиться и пообщаться с нашими разработчиками из любого города России.
Вот расписание встреч:
🔸 13 ноября онлайн-трансляция
🔸 13 ноября офлайн-встреча в Москве
🔸 14 ноября офлайн-встреча в Нижнем Новгороде
🔸 15 ноября офлайн-встреча в Екатеринбурге
🔸 16 ноября офлайн-встреча в Новосибирске
🔸 17 ноября офлайн-встреча в Санкт-Петербурге
А с 20 по 26 ноября мы проведём Week Offer Backend: предложим всего за одну неделю получить офер в одну из 14 участвующих команд. Приглашаем кандидатов с опытом разработки от трёх лет на одном из этих языков программирования: С++, С#, Python, Java, Go и Scala. Принимаем заявки до 19 ноября.
Узнать подробности и зарегистрироваться можно здесь.
Реклама. ООО "Яндекс". erid: 2VtzqwfRiE2
👍9🤣3🍌3🔥1
В чем разница между разными модификаторами доступа?
🔘 private – доступ только непосредственно из этого класса и его внутренних/вложенных классов;
🔘 package-private – доступ из всех классов этого пакета. Наследники доступа не имеют. Применяется когда модификатор не указан;
🔘 protected – доступ из всех классов этого пакета и всех наследников;
🔘 public – никаких ограничений доступа;
Модификаторы доступа применяются к классам, интерфейсам, методам и полям. Они нужны для реализации принципа наименьших привилегий и для отделения внутренней реализации от частей публичного API.
🔘 private – доступ только непосредственно из этого класса и его внутренних/вложенных классов;
🔘 package-private – доступ из всех классов этого пакета. Наследники доступа не имеют. Применяется когда модификатор не указан;
🔘 protected – доступ из всех классов этого пакета и всех наследников;
🔘 public – никаких ограничений доступа;
Модификаторы доступа применяются к классам, интерфейсам, методам и полям. Они нужны для реализации принципа наименьших привилегий и для отделения внутренней реализации от частей публичного API.
👍19🔥4❤1😁1
🌟 Открываем двери в мир Scala-разработки! 🚀
Присоединяйтесь к бесплатному онлайн-занятию «Применение механизма implicits в Scala» от OTUS: регистрация
В рамках вебинара:
— Познакомимся с историей возникновения и мотивацией за разными компонентами данного механизма.
— Разберем возможности и опасности которые таят в себе implicit преобразования
— Узнаем, как использовать и для чего служат implicit параметры
— Рассмотрим правила, по которым Scala ищет подходящего implicit кандидата и какие требования к нему предъявляются.
Вебинар подойдет тем, кто имеет первичный опыт работы со Scala и хочет разобраться, как работает механизм implicit.
💼 По завершении урока вы сможете оформить полный курс в беспроцентную рассрочку
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KMAqX
Присоединяйтесь к бесплатному онлайн-занятию «Применение механизма implicits в Scala» от OTUS: регистрация
В рамках вебинара:
— Познакомимся с историей возникновения и мотивацией за разными компонентами данного механизма.
— Разберем возможности и опасности которые таят в себе implicit преобразования
— Узнаем, как использовать и для чего служат implicit параметры
— Рассмотрим правила, по которым Scala ищет подходящего implicit кандидата и какие требования к нему предъявляются.
Вебинар подойдет тем, кто имеет первичный опыт работы со Scala и хочет разобраться, как работает механизм implicit.
💼 По завершении урока вы сможете оформить полный курс в беспроцентную рассрочку
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KMAqX
👍5🔥1
Опишите процесс создания экземпляра класса
Сначала класс и цепочка его предков должны быть загружены, сверху вниз. Рассмотрим ClassLoader и процесс загрузки классов в будущих постах. Здесь важно сказать, что класс загружается только один раз, при первом к нему обращении в рамках одного класслоадера.
После загрузки каждого класса выделяется память под его статические поля и выполняются статические блоки инициализации. В будущем возможно будет ленивой не только загрузка всего класса, но и инициализация его статических финальных полей.
Далее инстанциируется сам экземпляр. Как и с загрузкой классов, процесс выполняется для всей цепочки наследования, с самого дальнего родителя:
1. Выделяется память в куче для экземпляра, получается ссылка на этот экземпляр;
2. Выполняются инициализации нестатических полей и блоков инициализации в порядке объявления;
3. Вызывается конструктор;
Статические поля интерфейсов не инициализируются при создании объекта, а другого состояния интерфейс не имеет – это исключает вопрос порядка инициализации предков при множественном наследовании.
В процессе конструирования объекта может возникать проблема виртуального вызова в конструкторе, свойственная для многих языков. Effective Java Item 17 рекомендует не использовать переопределяемые методы в расширяемом классе. Иллюстрация неочевидного поведения в результате приведена выше на картинке
Сначала класс и цепочка его предков должны быть загружены, сверху вниз. Рассмотрим ClassLoader и процесс загрузки классов в будущих постах. Здесь важно сказать, что класс загружается только один раз, при первом к нему обращении в рамках одного класслоадера.
После загрузки каждого класса выделяется память под его статические поля и выполняются статические блоки инициализации. В будущем возможно будет ленивой не только загрузка всего класса, но и инициализация его статических финальных полей.
Далее инстанциируется сам экземпляр. Как и с загрузкой классов, процесс выполняется для всей цепочки наследования, с самого дальнего родителя:
1. Выделяется память в куче для экземпляра, получается ссылка на этот экземпляр;
2. Выполняются инициализации нестатических полей и блоков инициализации в порядке объявления;
3. Вызывается конструктор;
Статические поля интерфейсов не инициализируются при создании объекта, а другого состояния интерфейс не имеет – это исключает вопрос порядка инициализации предков при множественном наследовании.
В процессе конструирования объекта может возникать проблема виртуального вызова в конструкторе, свойственная для многих языков. Effective Java Item 17 рекомендует не использовать переопределяемые методы в расширяемом классе. Иллюстрация неочевидного поведения в результате приведена выше на картинке
👍13❤1
REST, Spring, SQL, ООП — это не что-то на айтишном, а ежедневная рутина, с которой сталкивается любой Java-бэкендер. Если вы ищите фундаментальных знаний и высоких зарплат, то нам по пути.
⏱14 и 16 ноября в 19:00 по Москве в рамках недели Java в школе Smartup пройдут два бесплатных вебинара. Мы собрали 40 лет опыта IT-экспертов и упаковали их в два вечера.
На вебинаре «От заката до рассвета. Один день из жизни разработчика»
- Узнаете больше о буднях разработчика
- Поймете, что разработчик гораздо больше чем кодер.
На вебинаре «Как пройти путь от первой строчки кода до оффера в международную компанию?»
- Узнаете, как пройти путь от студента до всезнающего разработчика.
- Получите план развития на первый год.
📆 Ближайший вебинар уже 14.11! Регистрируйтесь
Всем участникам дарим чек-лист «Как вырасти от Джуна до Сеньора».➡️ Записаться на вебинары
Реклама. ООО "СМАРТАП ТЕХНОЛОДЖИ". ИНН 5501278983. erid: LjN8KHQ3t
⏱14 и 16 ноября в 19:00 по Москве в рамках недели Java в школе Smartup пройдут два бесплатных вебинара. Мы собрали 40 лет опыта IT-экспертов и упаковали их в два вечера.
На вебинаре «От заката до рассвета. Один день из жизни разработчика»
- Узнаете больше о буднях разработчика
- Поймете, что разработчик гораздо больше чем кодер.
На вебинаре «Как пройти путь от первой строчки кода до оффера в международную компанию?»
- Узнаете, как пройти путь от студента до всезнающего разработчика.
- Получите план развития на первый год.
📆 Ближайший вебинар уже 14.11! Регистрируйтесь
Всем участникам дарим чек-лист «Как вырасти от Джуна до Сеньора».➡️ Записаться на вебинары
Реклама. ООО "СМАРТАП ТЕХНОЛОДЖИ". ИНН 5501278983. erid: LjN8KHQ3t
👍5🔥2
Какой результат выведет следующая программа?
Anonymous Quiz
31%
A.print() is called
49%
B.print() is called
4%
Ошибку при выполнении
16%
Ошибку компиляции
👍16🔥5
Программа обновлена и полностью отвечает современным требованиям рынка.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
new Integer(128) == 128?
Для всех классов-оберток над примитивами кроме Float и Double работает механизм кэширования. Некоторые значения создаются на этапе инициализации класса, и переиспользуются когда объект создается не оператором new (например с помощью valueOf).
Кэшируемые значения – оба возможных Boolean, Character до '\u007f' (127) и все целые числа от -128 до 127 включительно. С Java 7 верхнюю границу для Integer можно увеличить параметром java.lang.Integer.IntegerCache.high.
Значения кэшируются и во многих других встроенных классах: BigDecimal, Currency, пустые коллекции. Детали можно узнавать из исходников и документаций, так как эти кэши реализованы не на уровне JVM а в коде классов.
В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к анбоксингу и сравнению значений. И ответ на вопрос – да.
Для всех классов-оберток над примитивами кроме Float и Double работает механизм кэширования. Некоторые значения создаются на этапе инициализации класса, и переиспользуются когда объект создается не оператором new (например с помощью valueOf).
Кэшируемые значения – оба возможных Boolean, Character до '\u007f' (127) и все целые числа от -128 до 127 включительно. С Java 7 верхнюю границу для Integer можно увеличить параметром java.lang.Integer.IntegerCache.high.
Значения кэшируются и во многих других встроенных классах: BigDecimal, Currency, пустые коллекции. Детали можно узнавать из исходников и документаций, так как эти кэши реализованы не на уровне JVM а в коде классов.
В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к анбоксингу и сравнению значений. И ответ на вопрос – да.
👍22🔥3❤1🍌1
Тест по Java от OTUS
- Научишься создавать современные java-приложения
- Поймешь основы функционирования JVM (сборка мусора, byteCode)
- Освоишь приемы применения многопоточности
- Напишите выпускной проект на любую тему под наставничеством преподавателя
Занятия в формате живых вебинаров проводят преподаватели-практики, а после дают развернутый фидбэк на домашние задания.
В конце обучения вы напишете выпускной проект на любую тему под контролем преподавателя и после обучения сможете претендовать на зарплату от 200 тыс. рублей.
Проходите тест и записывайтесь в группу!
🎁 Черная пятница в OTUS! Успей применить промокод BLACK23 и получить скидку 15% на курс!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Что можно делать с переменной хранящей null?
Во-первых, если переменная не финальная, использовать как L-value этого типа – присваивать новое значение.
Во-вторых, то же, что со значением null, но с учетом типа:
🔘 Сравнивать с null или переменной этого же класса;
🔘 Приводить к типу-родителю (upcast) или типу-наследнику (downcast), учитывая границы generic-параметров при наличии;
🔘 Обращаться к членам экземпляра и получать NullPointerException;
🔘 Применять instanceof и получать false
🔘 Использовать как параметр для методов и других совместимых с типом операторов
В-третьих, можно обращаться к статическим членам класса. В вопросе подразумевается именно эта интересная часть. Это безопасно, NullPointerException не возникнет, но для упрощения отладки и из-за отсутствия переопределения статических членов рекомендуется так не делать. Вместо этого обращайтесь к статике явно через имя класса, либо неявно, добавив для класса import static.
Во-первых, если переменная не финальная, использовать как L-value этого типа – присваивать новое значение.
Во-вторых, то же, что со значением null, но с учетом типа:
🔘 Сравнивать с null или переменной этого же класса;
🔘 Приводить к типу-родителю (upcast) или типу-наследнику (downcast), учитывая границы generic-параметров при наличии;
🔘 Обращаться к членам экземпляра и получать NullPointerException;
🔘 Применять instanceof и получать false
🔘 Использовать как параметр для методов и других совместимых с типом операторов
В-третьих, можно обращаться к статическим членам класса. В вопросе подразумевается именно эта интересная часть. Это безопасно, NullPointerException не возникнет, но для упрощения отладки и из-за отсутствия переопределения статических членов рекомендуется так не делать. Вместо этого обращайтесь к статике явно через имя класса, либо неявно, добавив для класса import static.
👍8🔥2❤1
🔥 Хардовый тест для разработчиков 🔥
📕 Ответьте на 9 вопросов за20 мин и проверьте, насколько вы готовы к обучению на курсе - «Архитектура и шаблоны проектирования»
💻 Научитесь применять шаблоны проектирования в разработках! Благодаря этому навыку вы сможете писать чистый код, экономить время на разработке и быстро «пересаживаться» на любой язык программирования.
🏵 Ждем всех, кто хочет вырасти до Middle+ разработчика или архитектора ПО!
👉 ПРОЙТИ ТЕСТ https://otus.pw/7SZz/
💣 Пройдете тест, получите демо-ролик о занятиях на курсе и Welcome-скидку.
✅ Также вам откроется доступ к открытым урокам курса.
📕 Ответьте на 9 вопросов за
💻 Научитесь применять шаблоны проектирования в разработках! Благодаря этому навыку вы сможете писать чистый код, экономить время на разработке и быстро «пересаживаться» на любой язык программирования.
🏵 Ждем всех, кто хочет вырасти до Middle+ разработчика или архитектора ПО!
👉 ПРОЙТИ ТЕСТ https://otus.pw/7SZz/
💣 Пройдете тест, получите демо-ролик о занятиях на курсе и Welcome-скидку.
✅ Также вам откроется доступ к открытым урокам курса.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru👍5❤2🤨2
Что такое enum?
enum – тип-перечисление. Бывает много разных формулировок вопроса, все они сводятся к разговору о перечислениях вообще. Технически это финальный класс со статическими финальными полями-экземплярами. enum Foo всегда неявно наследуется от Enum<Foo> – то есть перечислением нельзя расширить другой класс, но всё еще можно реализовать интерфейсы. Из-за generic-параметра разные перечисления не имеют общего предка кроме Object.
Является Comparable (сравнивается позиция по порядку объявления значений) и Serializable (сериализуется только имя константы).
Имеет только заранее заданный набор значений. Значения неявно public static final и это нельзя переопределить. Для инициализации констант действуют все правила статической инициализации.
Копии элементов перечисления не создаются даже при десериализации. Вот почему Effective Java предлагает использовать для сериализуемого синглтона enum.
Экземпляры хранят свойства name и ordinal – имя и порядковый номер константы. Статический метод values вернет список всех констант, valueOf – константу по имени. Спецификация.
Финализация и клонирование перечислений запрещены.
enum – тип-перечисление. Бывает много разных формулировок вопроса, все они сводятся к разговору о перечислениях вообще. Технически это финальный класс со статическими финальными полями-экземплярами. enum Foo всегда неявно наследуется от Enum<Foo> – то есть перечислением нельзя расширить другой класс, но всё еще можно реализовать интерфейсы. Из-за generic-параметра разные перечисления не имеют общего предка кроме Object.
Является Comparable (сравнивается позиция по порядку объявления значений) и Serializable (сериализуется только имя константы).
Имеет только заранее заданный набор значений. Значения неявно public static final и это нельзя переопределить. Для инициализации констант действуют все правила статической инициализации.
Копии элементов перечисления не создаются даже при десериализации. Вот почему Effective Java предлагает использовать для сериализуемого синглтона enum.
Экземпляры хранят свойства name и ordinal – имя и порядковый номер константы. Статический метод values вернет список всех констант, valueOf – константу по имени. Спецификация.
Финализация и клонирование перечислений запрещены.
👍22🔥4❤1
- Осваивай Spring!
Тест на знание языка Java
— Ответь на 21 вопрос и проверь, насколько хорошо nы знаешь язык Java и готовы освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!
Курс доступен в рассрочку.
🎁 Черная пятница в OTUS! Успей применить промокод BLACK23 и получить скидку 15% на курс!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
Зачем нужен загрузчик классов?
В Java используется динамическая загрузка классов. Ее выполняют загрузчики – наследники абстрактного класса ClassLoader. Кроме того, они же загружают и файлы-ресурсы.
Загрузка класса (точнее любого ссылочного типа) и всех его предков происходит автоматически перед его инициализацией. При этом используется тот лоадер, который загрузил текущий код. Таким образом, загрузка всех, даже встроенных классов – ленивая.
Вручную класс можно загрузить из конкретного загрузчика, передав аргументом его метода loadClass бинарное имя класса.
В URLClassLoader и стандартных загрузчиках JVM источником класса служит .class-файл. Другие загрузчики в своей реализации используют и другие источники: это может быть сетевой ресурс, или класс может генерироваться в рантайме. К примеру загрузчик из javassist специализируется на создании классов на лету.
В результате загрузки создается экземпляр класса Class. В отличие от обычных объектов, такие экземпляры хранятся не в куче, а в permgen/metaspace. Class может быть выгружен, когда загрузивший его ClassLoader стал мусором.
В Java используется динамическая загрузка классов. Ее выполняют загрузчики – наследники абстрактного класса ClassLoader. Кроме того, они же загружают и файлы-ресурсы.
Загрузка класса (точнее любого ссылочного типа) и всех его предков происходит автоматически перед его инициализацией. При этом используется тот лоадер, который загрузил текущий код. Таким образом, загрузка всех, даже встроенных классов – ленивая.
Вручную класс можно загрузить из конкретного загрузчика, передав аргументом его метода loadClass бинарное имя класса.
В URLClassLoader и стандартных загрузчиках JVM источником класса служит .class-файл. Другие загрузчики в своей реализации используют и другие источники: это может быть сетевой ресурс, или класс может генерироваться в рантайме. К примеру загрузчик из javassist специализируется на создании классов на лету.
В результате загрузки создается экземпляр класса Class. В отличие от обычных объектов, такие экземпляры хранятся не в куче, а в permgen/metaspace. Class может быть выгружен, когда загрузивший его ClassLoader стал мусором.
👍16🔥4❤1
🔧В большинстве случаев Gradle используется в командах для довольно несложных задач и только для Kotlin-проектов, java. Между тем, он является очень мощным инструментом разработки для DevOps.
⚡️30 ноября в 19.00 (мск) приглашаем на открытый урок курса “Kotlin Backend Developer Professional” в OTUS
📌На уроке обсудим:
- как выполнять сборку проектов, содержащих компоненты на C/C++, Rust, Go и др. языках;
- как автоматически генерировать исходники с дальнейшей их компиляцией;
- извлекать файлы из репозиториев для дальнейшей обработки;
- разрабатывать кастомные плагины;
- гибко управлять версиями;
- собирать докер-образы.
👉Регистрация для участия https://otus.pw/m22o/
После урока вы сможете продолжить обучение, поступив в группу курса по специальной цене. Возможны разные способы и рассрочка платежа. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
⚡️30 ноября в 19.00 (мск) приглашаем на открытый урок курса “Kotlin Backend Developer Professional” в OTUS
📌На уроке обсудим:
- как выполнять сборку проектов, содержащих компоненты на C/C++, Rust, Go и др. языках;
- как автоматически генерировать исходники с дальнейшей их компиляцией;
- извлекать файлы из репозиториев для дальнейшей обработки;
- разрабатывать кастомные плагины;
- гибко управлять версиями;
- собирать докер-образы.
👉Регистрация для участия https://otus.pw/m22o/
После урока вы сможете продолжить обучение, поступив в группу курса по специальной цене. Возможны разные способы и рассрочка платежа. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🔥7👍3
Какие существуют стандартные загрузчики классов?
В JVM встроено как минимум три стандартных загрузчика:
🔘 Bootstrap – встроенная в JVM нативная реализация, родитель для всех остальных загрузчиков. Загружает часть стандартных классов java.*;
🔘 Platform – отвечает за загрузку стандартных классов Java-рантайма. До Java 9 назывался Extension и занимался загрузкой расширений. Гарантируется, что ему будут видны (но не факт что загружены непосредственно им) все стандартные классы Java SE и JDK;
🔘 System (Application) – загружает классы из classpath конкретного приложения;
Перед тем как загрузить класс, ClassLoader проверит, не может ли это сделать его родитель. Если класс уже загружен, то загрузка не потребуется.
Иллюстрация смысла этой иерархии – загрузчики web-сервера Apache Tomcat. Прикладной код каждого web-приложения работает на своем отдельном загрузчике изолированно от других приложений. Даже один и тот же класс-singleton у каждого приложения будет собственный. Системные классы и общие библиотеки при том грузятся их родительскими загрузчиками, только один раз для сервера.
В JVM встроено как минимум три стандартных загрузчика:
🔘 Bootstrap – встроенная в JVM нативная реализация, родитель для всех остальных загрузчиков. Загружает часть стандартных классов java.*;
🔘 Platform – отвечает за загрузку стандартных классов Java-рантайма. До Java 9 назывался Extension и занимался загрузкой расширений. Гарантируется, что ему будут видны (но не факт что загружены непосредственно им) все стандартные классы Java SE и JDK;
🔘 System (Application) – загружает классы из classpath конкретного приложения;
Перед тем как загрузить класс, ClassLoader проверит, не может ли это сделать его родитель. Если класс уже загружен, то загрузка не потребуется.
Иллюстрация смысла этой иерархии – загрузчики web-сервера Apache Tomcat. Прикладной код каждого web-приложения работает на своем отдельном загрузчике изолированно от других приложений. Даже один и тот же класс-singleton у каждого приложения будет собственный. Системные классы и общие библиотеки при том грузятся их родительскими загрузчиками, только один раз для сервера.
👍18🔥3❤1
Как разработчику увеличить доход?
Расширять список своих скиллов! Начать можно с бесплатного открытого урока «Шаблон проектирования ""Цепочка обязанностей""» от OTUS.
На вебинаре:
- рассмотрим превращение элементов поведения в объекты;
- проанализируем его на конкретном примере, формируя диаграмму классов;
- узнаем, как использовать шаблон «Цепочка обязанностей» для решения различных задач;
- покажем, как создать классы обработчиков и связать их в цепочку так, чтобы сообщение было обработано последовательно каждым обработчиком;
- разберем возможности настройки приоритета и условий обработки определенных сообщений.
Занятие пройдёт 5 декабря в 20:00 мск в рамках курса «Архитектура и шаблоны проектирования». После урока вы сможете продолжить обучение в рассрочку.
Для бесплатного участия и получения записи пройдите короткое тестирование прямо сейчас: https://otus.pw/oyxg/
Расширять список своих скиллов! Начать можно с бесплатного открытого урока «Шаблон проектирования ""Цепочка обязанностей""» от OTUS.
На вебинаре:
- рассмотрим превращение элементов поведения в объекты;
- проанализируем его на конкретном примере, формируя диаграмму классов;
- узнаем, как использовать шаблон «Цепочка обязанностей» для решения различных задач;
- покажем, как создать классы обработчиков и связать их в цепочку так, чтобы сообщение было обработано последовательно каждым обработчиком;
- разберем возможности настройки приоритета и условий обработки определенных сообщений.
Занятие пройдёт 5 декабря в 20:00 мск в рамках курса «Архитектура и шаблоны проектирования». После урока вы сможете продолжить обучение в рассрочку.
Для бесплатного участия и получения записи пройдите короткое тестирование прямо сейчас: https://otus.pw/oyxg/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru👍5🔥2