Как инженер-программист, помимоJavaВ дополнение к этому ключевому слову часто упоминается еще один термин, а именноJVM. УпомянутыйJVMВо время собеседований часто встречаются следующие вопросы:
- Зачем системе разработки Java нужна JVM?
- Что вы знаете о принципе работы JVM?
- Как работает код Java?
Чтобы правильно ответить на эти три вопроса, вам нужно сначала понять, что такое JVM? При чем здесь Java? Какая связь с JDK? Чтобы решить три вышеупомянутые проблемы, нам нужно думать о трех аспектах:
- Связь между JVM и операционной системой;
- Связь между JVM, JRE и JDK;
- Какая связь между спецификацией виртуальной машины Java и спецификацией языка Java?
После выяснения взаимосвязи между ними можно использовать простой пример кода, чтобы понять, как выполняется программа Java.
1. Связь между JVM и операционной системой
В мире боевых искусств требуется много усилий, чтобы усовершенствовать меч, который можно увидеть во всем мире. В дополнение к превосходной технологии изготовления мечей также требуется хорошо обученная печь для меча.Инженер эквивалентен мастеру изготовления мечей, а JVM — это печь для меча.
Зачем изучать Java и как делать это эффективно – Елена Хацько
Полное название JVM — Java Virtual Machine, это знакомая виртуальная машина Java. Он может распознавать файлы с суффиксом .class и может анализировать свои инструкции и, наконец, вызывать функции в операционной системе для выполнения желаемой операции.
В нормальных условиях программа, разработанная на C ++, может быть запущена непосредственно после компиляции в двоичный файл, и операционная система может ее распознать; но программа Java отличается. После использования javac для компиляции файла .class вам необходимо использовать команды Java, чтобы проявить инициативу. Для его выполнения операционная система не распознает эти файлы .class.
Возникает сомнение, почему Java не может запустить скомпилированный двоичный файл непосредственно в операционной системе, например C ++? Вместо того, чтобы создавать виртуальную машину посреди программы и операционной системы?
Вот где JVM выделяется. Как мы все знаем, Java — это язык с особенно высоким уровнем абстрактных программ, обеспечивающий ряд функций, таких как автоматическое управление памятью. Эти функции невозможно реализовать непосредственно в операционной системе, поэтому преобразование требуется JVM.
С приведенным выше введением можно провести следующую аналогию.
- JVM: эквивалент операционной системы;
- Байт-код Java: эквивалент языка ассемблера.
Байт-код Java, как правило, легче читать и понимать, что доказывает, что язык Java имеет относительно высокую степень абстракции. Вы можете использовать JVM в качестве транслятора, который будет непрерывно переводить и выполнять байт-код Java, а затем вызывать реальные функции операционной системы, которые связаны с информацией о платформе. Как показано ниже:
Зачем нужна Java машина?
Как видно из рисунка, с уровнем абстракции JVM Java может быть кроссплатформенной. JVM нужно только гарантировать, что файл .class может выполняться правильно, и он может работать на таких платформах, как Linux, Windows и MacOS.
Значение кроссплатформенности Java состоит в том, чтобы компилировать один раз и запускать везде, и JVM может это сделать. Например, вы можете загрузить пакет jar той же версии на складе Maven и запускать его везде, без повторной компиляции на каждой платформе.
Некоторые существующие языки расширений JVM, такие как Clojure, JRuby, Groovy и т. Д., В конце компилируются в файлы .class.Сопровождающим язык Java требуется только управлять парсером JVM, чтобы легко интегрировать эти языки расширения. Запускаем поверх JVM.
В чем разница между программой на Java и широко используемой программой на C ++? Следующий рисунок может проиллюстрировать проблему:
Как видно из приведенного выше рисунка, программы на C ++ компилируются в файлы .exe, которые могут быть распознаны операционной системой, а программы Java компилируются в файлы .class, которые могут распознаваться JVM, а затем JVM отвечает за вызов системных функций для выполнения программы.
2. Связь между JVM, JRE и JDK.
Благодаря вышесказанному, JVM — это ядро, которое могут запускать программы Java. Но следует отметить, что: JVM ничего не может делать сама по себе и должна предоставлять ей исходные материалы (файлы .class). Как говорится, умной женщине сложно приготовить без риса. Несмотря на то, что он мощный, он все же должен предоставлять файл .class.
Просто JVM не может завершить компиляцию и работать везде. Ему нужна базовая библиотека классов, например, как управлять файлами и как подключаться к сети. Система Java очень щедрая и передаст ей все библиотеки, необходимые для работы JVM, за один раз. Стандарт JVM плюс большое количество реализованных базовых библиотек классов составляют среду выполнения Java, которую часто называют JRE (Java Runtime Environment).
С JRE программы Java можно запускать в браузере. Вы можете посмотреть каталог Java, который вы установили.Если вам нужно запустить только несколько программ Java, достаточно только одной JRE.
Для JDK он даже больше. В дополнение к JRE, JDK также предоставляет несколько очень полезных небольших инструментов, таких как javac, java, jar и т. Д. Это ядро Java, поэтому неспециалисты также могут практиковаться на мечах!
Взгляните на полное написание JDK, Java Development Kit. Я очень боюсь слова «комплект» (оборудование), это как бездонная яма, что говорит о бесконечных исследованиях в ней. Связь между JVM, JRE и JDK может быть представлена отношением включения:
3 Связь между спецификацией виртуальной машины Java и спецификацией языка Java
Когда дело доходит до JVM, первое, о чем следует подумать, — это сборщик мусора. Фактически, он по-прежнему состоит из многих частей, таких как механизм выполнения, который анализирует байт-код.
- Вообще говоря, JVM — это спецификация, это самый официальный и точный документ;
- В узком смысле «горячие точки» используются чаще. Обычно, говоря об этом понятии, они считаются эквивалентными.
В сочетании с широко используемым языком Java вы можете получить следующую картину (две спецификации, которые должны понимать разработчики Java)
Левая половина приведенного выше рисунка — это спецификация виртуальной машины Java, которая фактически предназначена для обеспечения рабочей среды для ввода и выполнения байт-кода. Правая часть — это обычно упоминаемая спецификация языка Java, такая как switch, for, generics, lambda и другие связанные программы, которые в конечном итоге будут скомпилированы в байт-код. Мост, соединяющий левую и правую части, по-прежнему представляет собой байт-код Java.
Если спецификация файла .class не изменилась, эти две части можно оптимизировать независимо. Однако Java иногда расширяет формат следующих файлов .class и добавляет некоторые инструкции байт-кода для поддержки большего количества функций.
Виртуальную машину JVM можно рассматривать как абстрактный компьютер, который имеет свой собственный набор инструкций и различные области оперативной памяти.После изучения «структуры компьютера» вы увидите много общего.
Если вы не изучите JVM, повлияет ли это на написание кода Java? Теоретически между ними нет необходимой связи. Они взаимодействуют друг с другом через файлы .class, даже если они знают JVM, они могут написать большую часть кода Java. Так же, как вы пишете код на C ++, вам не нужно глубоко понимать, как реализована основная операционная система.
Однако, если вы хотите написать более сложный и эффективный код, вам необходимо иметь представление об уровне реализации. Понимание JVM в основном используется для настройки и устранения неполадок. У вас будет более полный контроль над распределением различных ресурсов в работе.
4. Как работает код Java?
В HelloWorld.java он соответствует спецификации языка Java. Среди них вызываются такие модули, как System.out, которые представляют собой библиотеки классов, представленные в JRE.
public class HelloWorld public static void main(String[] args) System.out.println(«Hello World») > >
Как показано ниже:
После компиляции с помощью инструмента JDK javac будет сгенерирован байт-код HelloWorld.
Байт-код Java — это мост между JVM и программами Java. Вы можете использовать javap -c HelloWorld.class, чтобы увидеть, как выглядит байт-код, как показано на следующем рисунке:
Виртуальная машина Java использует стековую архитектуру, а ее инструкции состоят из кодов операций и операндов. Эти инструкции байт-кода называются кодом операции. Среди них более легкие для понимания коды операций, getstatic, Idc, invokevirtual, return и т. Д.
Вы можете продолжать использовать hexdump для просмотра двоичного содержимого байт-кода. Двоичный код, соответствующий приведенному выше байт-коду, представляет собой следующие числа:
b2 00 02 12 03 b6 00 04 b1
Вы можете увидеть их переписку
0xb2 getstatic Получить значение статического поля
0x12 ldc Постоянное значение из пула констант помещается в стек.
0xb6 invokeвиртуальный метод вызова привязки метода среды выполнения
0xb1 return void function return
код операции имеет длину один байт (0 ~ 255), что означает, что количество кодов операции в наборе команд не может работать 256. И сразу после кода операции стоит операнд. Например, b2 00 02 означает getstatic # 2 .
JVM завершает выполнение программы, анализируя эти коды операций и операнды. Использование команды Java для запуска файла .class фактически эквивалентно запуску процесса JVM.
Затем JVM переведет эти байт-коды, и у нее будет два метода выполнения.
- Наиболее распространенным является объяснение и выполнение, перевод кода операции + операнды в машинный код;
- Другой метод выполнения — это JIT, который часто называют своевременной компиляцией, при которой байт-код компилируется в машинный код при определенных условиях перед его выполнением.
Эти файлы .class будут загружены и сохранены в метапространстве, ожидая вызова, там будет концепция загрузчика классов.
Программа JVM запускается в стеке, который аналогичен выполнению других обычных программ, и также разделен на кучу и стек. Например, теперь, когда основной метод запущен, ему будет выделен кадр стека. Когда тело метода выталкивается, соответствующий кадр стека появляется. Вы обнаружите, что большинство инструкций байт-кода постоянно работают с кадром стека.
Остальные большие фрагменты данных помещаются в кучу. Java будет подробнее в разделении памяти.
4 резюме
Вернитесь к трем вопросам выше.
1. Зачем системе разработки Java нужна JVM?
JVM интерпретирует байт-код аналогично языку ассемблера и требует абстрактной среды выполнения. В то же время эта виртуальная среда также должна решать ряд проблем, таких как загрузка байт-кода, автоматическая сборка мусора и параллелизм. JVM — это фактически спецификация, которая определяет структуру файлов .class, механизм загрузки, хранилище данных, стек времени выполнения и т. Д. Наиболее часто используемой реализацией JVM является Hotspot.
2. Насколько хорошо вы знаете принципы работы вашей JVM?
Жизненный цикл JVM такой же, как и у программы Java. Когда программа завершается, экземпляр JVM исчезает. JVM лежит в основе всей системы, и конкретный принцип работы будет продолжен .
3. Как работает код Java?
Программа Java сначала компилируется в файл .class с помощью javac, а затем JVM загружает его в Метаданные Зона, механизм выполнения пройдет Смешанный режим Выполните эти байт-коды. При выполнении он будет переведен в функции, связанные с операционной системой. JVM существует как черный ящик из файлов .class, для ввода байт-кода и вызова функций операционной системы.
Процесс выглядит следующим образом: Файл Java -> Компилятор> Байт-код -> JVM -> Машинный код.
Источник: russianblogs.com
Почему Java настолько популярный язык?
Java совсем не молодой язык, но при этом он остается лидером среди языков программирования. Что делает его настолько популярным? Мы расскажем в этой статье.
Совсем скоро у Java юбилей – 25 лет со дня создания. Хоть этому языку уже много лет, он по сей день является одним из фаворитов по востребованности и популярности в мире программистов. Что делает его настолько значимым в среде разработчиков? Нам удалось выделить как минимум 7 основных причин мегапопулярности Java, по которым он держится на вершине рейтинга и будет лидировать ещё долго.
1. Java, как первый язык программирования
Азы в изучении Java часто дают ещё в средне специальных учебных заведениях. Он является основой обучения программированию в школах Америки. По этой причине, часто становится первым языком в списке программиста. Все дальнейшие языки, изучаемые в колледжах, всегда сравнивают с Java. Даже в случае перехода на другой язык, все равно базовое представление основывается на Java.
Этот язык имеет массу достоинств, делающих его лидером при изучении информатики. Да, не всем нравится вручную указывать типы данных, считая это чем-то вроде «подушки безопасности». Однако, это хорошая возможность для начинающих понять базовые принципы, на которых устроен ПК. Новичкам невольно приходится задумываться об устройстве операционной системы.
Многих это раздражает, форматирование скобок занимает лишнее время. Есть много модных языков, в которых не нужно указывать фигурные скобки. В некоторых это действительно неудобно, но начинающим они полезны. С их помощью, проще понять принципы вложений.
Промежуточный итог: да, язык немного перегружен, если сравнивать с Python, но для начального изучения он подходит идеально.
2. Кроссплатформенность
Хоть и не стоял у истоков создания кроссплатформенных программ, но смог завоевать лидирующую позицию. Java не имеет абсолютной совместимости со всеми платформами. Без подходящих библиотек код все равно не заработает. Просто скомпилировав код десктопного приложения и загрузив его на телефон, ничего работать не будет.
Однако, разработчик может создать полноценное приложение у себя на ПК, а в конце установить его на подходящей платформе. При наличии доступа к нужным библиотекам, код заработает.
3. Java и Андроид
Вы знали, что Android полностью написан на Java? Сегодня Андроид-гаджеты остаются лидерами по продажам в мире и их вряд ли подвинет какая-то другая платформа в ближайшие 5 лет.
На Android сегодня работает масса гаджетов: смартчасы, смартфоны, планшеты, Smart TV, смартбуки, различная бытовая техника и многие другие умные предметы электроники. Уже 4 года, как на Android работают роботы.
Всё перечисленное вместе только подтверждает доминирующее положение Java.
4. Groovy
Надоел классический синтаксис с его недостатками? Появились идеи уйти к новомодным языкам? Такой необходимости нет, ведь можно воспользоваться Groovy. Язык обладает полной интеграцией с Java, позволяет вызывать все библиотеки, написанные под Java прямо из Groovy-кода.
Благодаря гибкости решения, программист получает больше возможностей в разработке. Если Groovy окажется медленным для конкретного проекта, отдельные приложения можно написать на Java.
5. Открытый исходный код
Владельцем и разработчиком Java является Oracle, которая давно занимает лидерство в среде Open Source. Компания всё ещё не отпустила Java в свободное плавание, но это не наложило негативный оттенок на язык. Программисты создали множество библиотек и шаблонов, имеющих свободные лицензии.
Большинство библиотек обладают открытым исходным кодом. Это лишь увеличивает лояльное отношение к Java.
6. Java и NoSQL
Во время революции NoSQL к программистам пришло понимание, что они могут сами создавать базы данных и подстраивать их под собственные нужды. Подавляющее большинство NoSQL-решений разработаны непосредственно на Java.
В основном такие базы имеют opensource-код, поэтому их легко встраивать в уже существующие проекты. Есть те, кто запускает их в роли независимых сервисов, а другие — используют в качестве библиотек. Независимо от способа применения, использование Java – это гарантия разработчиков, что они смогут разобраться в коде и редактировать его.
7. Java Virtual Machine
JVM основана и подстроена под типизированный код, опираясь на статический контекст. Через небольшое время JVM начали применять для запуска кода из других языков, единственное условие – корректная работа компилятора. Разработчики недолго думая создали компиляторы для Haskell, Scala, Clojure.
В целом многим очень нравится, что Oracle обеспечивает кроссплатформенность языка, а прочее делают разработчики сами (или пользуются чужим кодом).
Больше интересных новостей
Хочу стать программистом: с какого языка начать?
12 навыков, которыми обязан обладать Frontend-разработчик
11 классных веб-ресурсов с применением искусственного интеллекта
11 полезных инструментов для веб-разработчика
Источник: itproger.com
25 причин нашей любви к Java
В JetBrains мы любим разные языки программирования. Но сегодня хочется уделить особое внимание Java, ведь ей в этом месяце исполняется 25 лет! Вот 25 причин нашей любви к Java и JVM.
Обратная совместимость
Java — едва ли не единственный язык, на свежих версиях которого можно запускать код, написанный 25 лет назад. Разработчики языка очень серьезно относятся к обратной совместимости, поэтому многие организации выбирают Java в качестве основной технологии, зная, что старый код будет запускаться на JVM еще долгие годы.
Зрелость
Многие из достоинств Java напрямую связаны с тем, как долго она существует. За прошедшие 25 лет приложения на Java разрабатывались под разные платформы в самых разных сферах. Кроме того, все эти годы люди изучали Java в школах, университетах, на курсах по программированию и в процессе работы.
Естественно, вокруг языка сформировалась большая экосистема, которая продолжает расти и развиваться, накапливая опыт и знания. Сам язык и решения, которые он предлагает, хорошо документированы и поддерживаются вендорами и некоммерческими организациями, а также отдельными пользователями. А еще широкое применение языка означает, что для Java-разработчиков есть много рабочих мест.
Постоянное развитие
В случае Java зрелость и обратная совместимость не противоречат активному развитию платформы и языка. С 2017 года, начиная с Java 9, новые версии языка выпускаются раз в полгода: Java постоянно меняется и улучшается. Благодаря preview-функциональности разработчики языка могут экспериментировать с новым синтаксисом, собирать отзывы сообщества, а затем стандартизировать функции, которые действительно полезны тем, кто пишет на Java.
Равновесие
Java приходится соблюдать непростое равновесие между совместимостью с предыдущими версиями и открытостью к изменениям. Текущий подход, при котором учитывается обратная совместимость, новая функциональность выпускается каждые шесть месяцев, а раз в три года выходит релиз с долгосрочной поддержкой, похоже, позволяет соблюдать правильный баланс. Язык развивается, предупреждая пользователей о том, какие из устаревших функций будут удалены, и предлагает замены всему, от чего планируется отказаться.
Для тех, кому важна стабильность, выпускаются версии с долгосрочной поддержкой. Чтобы уменьшить риски во время обновления, такие пользователи могут периодически тестировать версии, выходящие каждые полгода. А те, кто предпочитает регулярно обновляться, могут переходить на свежую версию Java каждые шесть месяцев. Разработчики, которые хотят попробовать новый синтаксис до его стандартизации, могут включить preview-функциональность или воспользоваться ранним доступом к версии, которая еще не вышла. Команды, выбирающие свежие версии Java, действительно получают все самое лучшее.
Стандарты
Стандарты, может быть, не так интересны разработчикам, как языковые возможности, но наличие стандартов для Java, Java EE, Jakarta EE и для распространенных сценариев использования действительно упрощает жизнь. Благодаря стандарту JDBC для взаимодействия с базами данных, не нужно беспокоиться о том, как реализован драйвер базы данных: мы взаимодействуем с ней всегда одинаково. Java Community Process — один из процессов стандартизации Java.
Спецификация языка Java описывает, что за язык представляет из себя Java и как должен работать компилятор. К ней относится и модель памяти Java, которая помогает разработчикам сделать выводы о поведении программы независимо от JVM или оборудования. Спецификация Java Virtual Machine описывает низкоуровневое устройство JVM. Благодаря этим спецификациям разные JDK, распространяемые разными поставщиками и работающие на разных платформах, ведут себя предсказуемым образом. Что приводит нас к…
Write Once Run Anywhere
Принцип WORA («Напиши один раз — запускай где угодно») в наши дни кажется настолько очевидным, что трудно представить, насколько революционной эта идея была для своего времени. Мне довелось поработать в одной очень большой организации, которая еще в 2002 году перешла с предыдущего стека на Java просто потому, что у них стояло без дела много разного оборудования, на котором можно было запускать новые Java-приложения, вместо того чтобы покупать специальное железо. Это была одна из главных причин, по которой они перевели все свои разработки на Java. В эпоху облачных технологий все это может показаться менее актуальным, но то, что мы не всегда видим принцип WORA в действии, не означает, что мы не используем его. И конечно же, если вы работаете в IntelliJ IDEA (или NetBeans), вы пользуетесь преимуществами WORA на своем компьютере.
Производительность
Тех, кто не так хорошо знаком с Java, иногда удивляет, что это очень высокопроизводительный язык. Не стоит забывать, что перед нами зрелая платформа и ее производительность улучшалась на протяжении 25 лет: доступны многочисленные сборщики мусора с различными профилями производительности, да и JVM оптимизирует код во время выполнения для разных сценариев использования гораздо лучше, чем большинство разработчиков. Например, Java широко используется в финансовой сфере, в которой многое зависит от скорости транзакций и предсказуемой производительности.
Сборка мусора
Спустя 25 лет мы воспринимаем автоматическую сборку мусора как что-то само собой разумеющееся. Не нужно думать, как распределяется память в приложении и как ее освободить. У каждой JVM есть один или несколько алгоритмов очистки памяти: можно выбрать тот, который лучше подходит для нашего приложения, и приступать к написанию бизнес-логики, не задумываясь о том, что происходит внутри.
Контроль и управление
Если мы хотим знать, что происходит во время работы приложения, у нас есть большой выбор инструментов. Многие из них бесплатны, а Java Flight Recorder и Mission Control теперь входят в OpenJDK (начиная с Java 11). Такие инструменты, как JMX, даже позволяют динамически управлять приложениями.
Java Virtual Machine (JVM)
Многое из того, что мы уже упомянули, относится к функциональности JVM, но виртуальная машина Java все-таки заслуживает отдельного пункта в нашем списке. Есть много причин любить JVM, включая те, что мы уже рассмотрели: WORA, оптимизации во время выполнения, производительность, большой выбор вендоров и т.д. Многие из этих достоинств существуют благодаря стандартам и спецификациям. Важно, что JVM существует отдельно от языка Java, поскольку на платформе можно строить другие языки: реализовать новый синтаксис и функциональность, используя все замечательные возможности виртуальной машины.
Другие языки JVM
Причина, по которой Java не просто выжила, а продолжала развиваться в период затишья между выходом Java 6 и 8 (в Java 7 есть интересные возможности, но Java-разработчики не восприняли ее как большой релиз) связана с другими языками JVM. Наш любимый, конечно же, Kotlin, но помимо него, для JVM разрабатываются и популярные Groovy, Scala, Clojure, JRuby, и новые языки, и реализации существующих языков. Совместимость между языками JVM и классической Java помогает нам извлекать пользу из этого разнообразия.
Библиотеки и фреймворки
Один из наиболее убедительных аргументов в пользу Java — огромный выбор библиотек и фреймворков, многие из которых с открытым исходным кодом и распространяются бесплатно. Такие популярные фреймворки, как Spring и Spring Boot, значительно упрощают разработку как небольших сервисов, так и сложных корпоративных приложений. Благодаря стандартам нетрудно разобраться в любой библиотеке: вы наверняка уже использовали нечто подобное в другом контексте. Поскольку в сообществе с ранних времен распространен открытый исходный код, для стандартных проблем обычно уже есть решение и не нужно изобретать велосипед. Кроме того, так как многие из этих решений существуют давно и широко используются, они тщательно протестированы, поняты и хорошо задокументированы.
Инструменты сборки и управление зависимостями
Давно прошли те времена, когда бедным разработчикам (и мне!) приходилось искать в интернете неизвестный JAR-файл, содержащий определенный класс, по-видимому, необходимый для запуска программы. В частности, Maven и Gradle упростили не только сборку и развертывание приложений, но и стандартную настройку проекта со всеми необходимыми зависимостями. Сейчас легко начать писать код как в новом, так и в существующем проекте. Общедоступные репозитории, например Maven Central и Bintray, упрощают поиск и публикацию библиотек.
JUnit и автоматизированное тестирование
JUnit появилась в 1997 году — почти так же давно, как и сама Java! На сегодняшний день это самая популярная платформа автоматизированного тестирования в мире Java. Как JUnit, так и TestNG поставляются вместе с IntelliJ IDEA: предполагается, что для любого нового Java-проекта необходим фреймворк тестирования. Вполне вероятно, что современные тестовые фреймворки для самых разных языков основаны на идеях, впервые реализованных в JUnit. Культура автоматизированного тестирования, принятая в Java-сообществе, во многом обязана именно этой библиотеке.
IDE
В своем блоге мы не можем не упомянуть IntelliJ IDEA. Не важно, считаете ли вы, что IDE вам необходима из-за многословности Java или что статическая типизация Java позволяет использовать всю мощь IDE, факт остается фактом: Java-разработчики любят IDE (а мы любим вас!). Если научиться эффективно пользоваться IDE, будь то IntelliJ IDEA, Eclipse или NetBeans, можно программировать значительно продуктивнее с помощью автодополнения и генерации кода, функциональности запуска тестов, отладки, навигации и многих других возможностей. Большинство Java-разработчиков очень ценят преимущества, которые им дают IDE.
Сообщество
Java-комьюнити — это большое, активное и гостеприимное сообщество единомышленников. Свои Java-сообщества есть во многих городах мира, а те, у кого нет возможности попасть на митап, могут присоединиться к Virtual Java User Group. Java Champions, технические эксперты из мира Java, делятся знаниями и опытом с разработчиками, пишущими на Java и языках JVM. На Java написано огромное количество проектов с открытым исходным кодом, включая сам JDK (OpenJDK). В Java-сообществе ценят обучение и развитие навыков, следуют стандартам и лучшим практикам, стараясь прагматично оценивать их применимость в реальных условиях.
Люди
Любое сообщество — это в первую очередь люди. Когда я спрашивала у разработчиков, что они больше всего ценят в языке, многие из них называли именно людей из Java-мира, которые оказали на них влияние. Одни называли своих коллег и учителей, другие — таких людей, как Брайан Гетц, Энджи Джонс, Жорж Сааб, Мала Гупта, Венкат Субраманиам. Кто-то даже назвал меня. Сама я пришла в мир Java, потому что изучала этот язык в университете и с ним было легко найти работу, а осталась, потому что здесь замечательные люди, от которых я получила много помощи и поддержки.
Javadoc и документация
Благодаря Javadoc документация API становится важной частью языка. Три типа комментариев (Javadoc, строчные и блочные) четко показывают, какое именно пояснение добавляет разработчик. Javadoc служат специально для того, чтобы оставлять полезную документацию для других разработчиков, которые вызывают определенный метод, используют класс или пакет. Если разработчик не может найти нужную информацию о библиотеке или фрагменте кода, обычно есть Javadoc, который подскажет правильное направление поиска.
Кроме того, в экосистеме Java, как правило, ожидают получить (и предоставляют другим) документацию хорошего качества. Потенциальных контрибьюторов проектов с открытым исходным кодом призывают отправлять пулреквесты, содержащие комментарии Javadoc и другую документацию. Разработчики со всего мира отвечают на вопросы друг друга на StackOverflow и пишут в блогах о решении конкретных проблем.
Открытый исходный код
Java-сообщество довольно рано начало придерживаться принципов открытого исходного кода, а теперь благодаря OpenJDK и сам JDK стал открытым. Это облегчает сотрудничество различных вендоров, а также отдельных разработчиков. И конечно, интересно посмотреть на код самой Java. Открытый исходный код — это отличная возможность учиться у людей, которые уже проделали большую работу и нашли решения для сложных проблем.
Бесплатные инструменты
Платформа Java и многие популярные инструменты, используемые в экосистеме, бесплатны для разработчиков, а часто и для коммерческих организаций. Даже после того как Oracle изменила модель лицензирования с выходом Java 11, она (и многие другие поставщики) по-прежнему предоставляет возможность пользоваться языком бесплатно. Уже упомянутые проекты с открытым исходным кодом, IDE и инструменты сборки либо бесплатны, либо имеют бесплатную версию. Это делает Java привлекательной для начинающих разработчиков и компаний с ограниченным бюджетом.
ООП
Объектно-ориентированное программирование, конечно, не единственная парадигма, и у всех есть свои преимущества и недостатки. Java с самого начала была спроектирована как объектно-ориентированный язык, и в ней реализованы многие шаблоны и лучшие практики ООП. Если вы выбираете объектно-ориентированный язык программирования, Java должна быть на первом месте в вашем списке.
Развитие и адаптация
Java была и остается объектно-ориентированным языком. При этом она позаимствовала некоторые концепции из функционального программирования (например, лямбда-выражения и неизменяемые структуры данных), которые были успешно адаптированы к ООП. Вывод типов (например, var) позволяет пользоваться преимуществами статически типизированного языка с меньшим количеством стереотипного кода. Информатика все еще относительно молодая дисциплина, и, получая новые знания, мы можем совершенствовать существующие инструменты. И сам язык, и экосистема Java постоянно развиваются в соответствии с новыми тенденциями и практиками, отражают изменения, происходящие в мире.
Java может заимствовать идеи и синтаксис из других языков JVM и тестировать, что сработает, а что, возможно, не впишется в классический Java-мир. Даже процессы и инструменты, которые Java использует для своего развития, такие как JCP и OpenJDK, постоянно адаптируются к стремительным изменениями в индустрии. Развитие и адаптация — основы того равновесия, которое Java стремится удержать.
Акцент на удобочитаемости
Обычно Java-код могут читать даже те, кто не пишет на Java. Язык нельзя назвать лаконичным, он скорее многословный, и это облегчает понимание при чтении. Разработчики языка не стали включать в Java такие функции, как перегрузка операторов: важно, чтобы программистов не удивляли неожиданные изменения в поведении программы. Java стремится избегать «магии» в языке и во фреймворках.
И хотя некоторые фреймворки все же построены на принципе Convention over configuration при котором многое не зависит от действий разработчика, определенно был сделан шаг от АОП с использованием аннотаций в направлении использования аннотаций для проверок документации и статического анализа. Традиционно в Java-сообществе любят следовать стандартам и лучшим практикам, поэтому Java-код часто соответствует одним и тем же правилам даже в очень разных проектах.