Введение в Java

  Андрей  | 

  |

  Обновл. 26 Май 2023  | 

 3918

 ǀ   2 

Java — это кроссплатформенный объектно-ориентированный язык программирования общего назначения. Язык проектировался с целью минимизации зависимостей от реализации так, чтобы однажды написанное и скомпилированное приложение работало на всех платформах, поддерживаемых Java, без надобности перекомпиляции. Java популярна благодаря своей простоте, надежности и безопасности. Ее дизайн позволяет создавать модульные программы из повторно используемого кода. Она широко используется в приложениях корпоративного уровня.

История возникновения и развития Java

В 1991 году Джеймс Гослинг, Майк Шеридан и Патрик Нотов — команда инженеров компании Sun, известная под названием Green, инициировала начало разработки нового языка программирования.

Изначально язык назывался Oak. Но из-за того, что язык с таким названием уже существовал, было принято решение о его переименовании. Предложенными вариантами были: Silk, Jolt, Revolutionary, DNA, Dynamic и т.д. Джеймс Гослинг считал, что Java было одним из лучших имен, наравне с Silk, и поскольку Java было уникальным названием, большинство предпочли его. Ява (англ. «Java») — это название острова в Индонезии, в честь которого названа марка кофе «Java», именно поэтому на эмблеме языка изображена чашка с горячим кофе.

Логотип языка программирования Java

Java была разработана Джеймсом Гослингом в компании Sun Microsystems, а позже — приобретена корпорацией Oracle. Именно Джеймс Гослинг считается «отцом Java».

Первый релиз Java (Java 1.0) был представлен компанией Sun Microsystems на конференции SunWorld в 1995 году, однако на тот момент язык все еще находился на стадии разработки, и официальный релиз состоялся лишь в 1996 году.

В основу создания Java были заложены такие принципы, как: простота, надежность, безопасность, кроссплатформенность, многопоточность, интерпретируемость, производительность… и переносимость. Артур Ван Хофф переписал компилятор Java 1.0, чтобы он точно соответствовал спецификациям языка. С появлением Java 2, разработчики создали несколько конфигураций для разных типов платформ. В 1997 году Sun Microsystems обратилась к органу по стандартизации ISO и формализовала язык, но вскоре отошла от этого процесса.

Sun сделала большинство реализаций Java бесплатными, несмотря на их проприетарный статус. Они зарабатывали на Java, продавая лицензии на специализированные продукты, такие как Java Enterprise System.

В 2006 году Sun выпустила большую часть своей виртуальной машины Java как бесплатное программное обеспечение с открытым исходным кодом. В 2007 году Sun завершила процесс, сделав весь основной код своей JVM доступным на условиях распространения с открытым исходным кодом. В 2010 году Sun Microsystems была приобретена компанией Oracle, и с тех пор права на Java перешли к ней.

Последняя версия языка Java на текущий момент — Java 20, была выпущена в марте 2023 года. Она содержит множество новых функций и усовершенствований, которые делают ее еще более удобной и эффективной для разработки широкого спектра приложений.

В целом, Java остается одним из наиболее популярных языков программирования в мире и продолжает активно развиваться и совершенствоваться.

Область применения Java


Благодаря безопасности, реализованной на уровне языка, Java активно используется для создания защищенных банковских систем, а также приложений для торговли на финансовых рынках.

До выпуска Nougat версии 7.0, Java была единственным официально поддерживаемым языком программирования для создания приложений на Android. Несмотря на появление новых технологий, на сегодняшний день Java продолжает оставаться одним из наиболее популярных языков программирования для разработки Android-приложений.

Основными сферами применения Java являются:

   разработка в сфере автоматизации работы крупных предприятий (Java Enterprise);

   разработка Android-приложений;

   сфера финансового ПО (банковские приложения и приложения для торговли на финансовых рынках);

   backend-разработка;

   Big Data и Data Science;

   IoT (Internet of Things).

Java-терминология

Перед изучением Java необходимо ознакомиться со следующими общими терминами:

JDK, JRE и JVM

На отдельном уроке мы рассмотрели, что такое JDK, JRE и JVM и чем они отличаются. Если вкратце:

   JVM (сокр. от англ. «Java Virtual Machine») — это виртуальная/абстрактная машина, которая позволяет компьютеру запускать и выполнять Java-программы.

   JRE (сокр. от англ. «Java Runtime Environment») — среда выполнения Java; набор программного обеспечения, необходимый для исполнения Java-приложений, который обязательно включает в себя реализацию JVM и библиотеки Java-классов (Стандартную библиотеку Java), а также может содержать другие компоненты.

   JDK (сокр. от англ. «Java Development Kit») — это набор программных инструментов, необходимых для разработки Java-приложений. При скачивании JDK, автоматически загружается и JRE (а значит, и JVM). В JDK, помимо JRE, также содержится ряд инструментов разработки — компиляторы, отладчики, JavaDoc и т.д.

Байт-код

После того, как компилятор Java (javac) скомпилировал исходный код Java-приложения в байт-код, он сохраняет его в виде файлов с расширением .class — файлов Java-классов. Для каждого файла программы в формате .java создается соответствующий файл в формате .class, в котором содержится скомпилированный в байт-код Java-класс. Файлы Java-классов выполняются JVM. Однако .class-файлы являются бинарными (состоят из последовательностей 0 и 1), чтобы конвертировать их в более читабельный вид, можно воспользоваться дизассемблером, например — javap.

Сборщик мусора

Java не разрешает ручное управление памятью из соображений безопасности (в отличие от языка C++). Вместо этого в JVM есть сборщик мусора (Garbage Collector) — специальная программа, которая обеспечивает автоматическое управление памятью. Таким образом, Java облегчает жизнь программистам, управляя памятью самостоятельно. Однако необходимо помнить, что сборщик мусора не удаляет объекты и не может повторно использовать память, выделенную для них, пока на них есть хотя бы одна ссылка (т.е. пока объект используется). Поэтому необходимо быть осторожным при написании кода, в котором объекты используются длительное время.

Classpath

Classpath — это параметр, который определяет, где JVM должна искать файлы Java-классов (.class), необходимые для выполнения Java-программы. Classpath может быть определен как переменная окружения, так и параметр командной строки при запуске программы. Если параметр classpath не задан, JVM будет искать файлы Java-классов в текущем рабочем каталоге. В общем, чтобы Java-программа могла работать правильно, нужно установить корректный classpath, используя который, JVM сможет найти все необходимые для выполнения Java-приложения .class-файлы.

Особенности Java


Кроссплатформенность

Java обладает кроссплатформенностью благодаря использованию JVM, которая позволяет выполнять байт-код Java на любой платформе, на которой установлена её подходящая реализация. Данная концепция называется WORA (сокр. от англ. «Write Once, Run Anywhere»), она позволяет единожды написать приложение, а затем запускать его на любой платформе, на которой установлена соответствующая реализация JVM. После компиляции Java-приложения на Windows, оно без проблем будет работать и на Linux, и на macOS, при условии, что на них установлены подходящие реализации JVM. Хотя для каждой операционной системы имеется своя реализация JVM, результат выполнения одного и того же байт-кода Java будет одинаковым на всех ОС. Именно поэтому Java является кроссплатформенным (платформенно-независимым) языком программирования.

Объектно-ориентированность

Java — это объектно-ориентированный язык программирования, который поддерживает абстракции «класса» (описание сущности программы) и «объекта» (экземпляр класса), а также реализует основные парадигмы объектно-ориентированного программирования, такие как:

   Инкапсуляция — объединение данных и функций их обработки в единое целое — класс, а также их защита от внешнего вмешательства посредством модификаторов доступа.

   Наследование — создание новых классов на основе уже существующих.

   Полиморфизм — получение разной реализации кода по одному и тому же интерфейсу.

   Абстракция — выделение общего состояния из нескольких классов и его инкапсуляция в один абстрактный класс.

Java позволяет создавать и изменять классы и объекты во время выполнения программы, что позволяет писать более гибкие и адаптивные приложения. Например, если у программы есть особенность, которую нельзя предугадать на этапе проектирования, то в Java можно создавать новые классы и методы на лету, чтобы реализовать нужную функциональность.

Безопасность и надежность

Java изначально была разработана с целью обеспечения безопасности и надежности приложений. Одна из ключевых особенностей Java в обеспечении безопасности — это использование JVM. Она служит своеобразным изолятором Java-программы от операционной системы и сторонних процессов, что повышает безопасность приложения.

В Java есть множество встроенных механизмов безопасности, таких как проверка кода на предмет наличия ошибок и запрет на выполнение опасных операций. Эти механизмы обеспечивают безопасность даже в том случае, если программист допустил ошибку в своем коде. Благодаря ним в Java практически невозможны такие ошибки, как повреждение стека (англ. «stack corruption») и переполнение буфера (англ. «buffer overflow»).

Важной чертой надежности Java является ее строгая статическая типизация. Она позволяет избежать многих типичных семантических ошибок. Кроме того, Java поддерживает механизм обработки исключений, который позволяет предвидеть возможные ошибки и реагировать на них соответствующим образом. Все это позволяет создавать более надежные и стабильные приложения.

Распределенные системы

Java широко используется для создания распределенных приложений — приложений, которые работают на нескольких компьютерах, связанных между собой с помощью Интернет-соединения.

Для создания распределенных приложений в Java используются такие технологии, как RMI (сокр. от англ. «Remote Method Invocation»), EJB (сокр. от англ. «Enterprise JavaBeans») и другие. Эти технологии позволяют создавать приложения, которые могут обмениваться данными и работать в совместной сетевой среде.

Благодаря своей распределенной архитектуре, Java является популярным выбором для создания масштабируемых приложений, которые могут быть легко распределены на несколько систем, соединенных через Интернет.

Многопоточность

Java поддерживает многопоточность. Это означает, что код Java-приложения может выполняться параллельно в разных потоках, чтобы улучшить производительность и более эффективно использовать ресурс CPU.

Переносимость

Переносимость Java обеспечена ее кроссплатформенностью. Благодаря JVM, приложения на Java могут быть легко перенесены с одной платформы на другую.

Высокая производительность

Технология JIT (сокр. от англ. «Just-In-Time») может значительно ускорить скорость выполнения Java-программы.

Принцип работы JIT-компилятора заключается в том, что при запуске Java-приложения, код программы сначала интерпретируется виртуальной машиной Java (JVM) построчно, а затем, если какой-то участок кода многократно повторяется, этот участок компилируется в машинный код (который напрямую выполняется центральным процессором) посредством JIT-компилятора. Такой подход позволяет ускорить выполнение часто используемых участков кода. JIT-компилятор компилирует код «на лету», то есть анализирует код программы во время ее выполнения и компилирует в машинное представление те участки кода, которые неоднократно повторяются.

Таким образом, технология JIT позволяет достичь высокой производительности приложений на Java, особенно при работе с большими объемами данных или сложными вычислениями. Кроме того, JIT автоматически оптимизирует код, убирая неиспользуемые инструкции и применяя другие оптимизации, что также способствует ускорению работы приложения.

Верификация исполняемого кода

JVM обеспечивает изоляцию Java-приложения в отдельном пространстве, которое позволяет выполнять программу, не затрагивая основную систему. JVM использует байт-код верификатор, который проверяет код на наличие ошибок доступа и других нарушений. Байт-код верификатор также обеспечивает дополнительный уровень безопасности, который защищает систему от вредоносного кода и нежелательных воздействий со стороны приложения.

Компиляция и интерпретация в Java

Большинство языков программирования разработаны таким образом, что они являются либо компилируемыми, либо интерпретируемыми. Однако Java объединяет в себе возможности обоих подходов.

Сперва исходный код Java-приложения компилируется в байт-код, а затем этот байт-код построчно интерпретируется (выполняется) посредством JVM.

Примеры простых Java-программ

Программа №1:

Результат:

Welcome to Ravesli!

Программа №2:

Результат:

Sum = 30
Multiply = 200

Программа №3:

Результат:

Enter the first number:
2
Enter the second number:
23
Sum = 25
Multiply = 46

Объяснение кода

   Комментарии

Комментарии в Java начинаются с // (или заключаются в конструкцию: /**/), они используются для объяснения кода, чтобы его можно было легче понять. Комментарии полностью игнорируются компилятором. В Java комментарии могут быть однострочными и многострочными.

Синтаксис однострочных комментариев:

Синтаксис многострочных комментариев:

   import java.io.*

import — директива, которая подключает пакеты. В данном случае подключаются все классы пакета io. Пакет io предоставляет набор потоков ввода-вывода для чтения и записи данных.

   class

class — ключевое слово для обозначения класса. Класс — это описание сущности программы с ее данными и методами (функциями). Методы определяют поведение класса, а данные с методами — его состояние. Класс Ravesli из первой программы имеет только один метод — main, который является обязательным.

   static void main()

Здесь описан главный метод программы, который не возвращает значение и помечен ключевым словом static, которое делает его доступным без создания экземпляра класса. Метод main является точкой входа в Java-программу (выполнение кода начинается с него), поэтому он обязателен.

   System.in

Это объект, который реализует собой стандартный поток ввода, что используется для чтения символов с клавиатуры или любого другого стандартного устройства ввода.

   System.out

Это объект, который реализует собой стандартный поток вывода, что используется для вывода информации на стандартное устройство вывода, например — экран.

   System.out.println(…)

Так выглядит вызов метода println, который выводит текст в консоль и перемещает каретку на начало следующей строки.

   String[] args

В контексте вышеприведенных примеров программ, args — имя параметра главного метода main, который является массивом строк. Обычно в методе main этот параметр называют именно args (сокр. от англ. «arguments»), однако имя может быть любым.

Заключение


Ключевые моменты

   Java — это кроссплатформенный объектно-ориентированный язык программирования общего назначения, который позволяет создавать легко масштабируемые модульные приложения.

   Язык программирования Java появился в 1995 году, его создатель — Джеймс Гослинг.

   Исходный код Java сперва компилируется в промежуточное представление — платформенно-независимый байт-код, а затем построчно интерпретируется (выполняется) виртуальной машиной Java — JVM.

   Концепция WORA (сокр. от англ. «Write Once, Run Anywhere») описывает кроссплатформенность Java, которая достигается благодаря JVM.

   Java была разработана с акцентом на безопасность, поэтому она не разрешает прямое управление памятью. Вместо этого, за автоматическое управление памятью отвечает сборщик мусора (англ. «Garbage Collector»).

   Java имеет строгую (сильную) статическую типизацию, что означает, что тип переменной определяется на этапе компиляции, а не на этапе выполнения программы. Это позволяет избежать многих типичных семантических ошибок, а также делает код более надежным и безопасным.

   В Java есть множество встроенных механизмов безопасности, таких как проверка кода на предмет наличия ошибок, запрет на выполнение опасных операций и механизм обработки исключений.

   Java поддерживает многопоточность, что позволяет создавать более производительные приложения.

   JVM использует технологию JIT (сокр. от англ. «Just-In-Time») для увеличения производительности выполнения Java-программ.

   К основным областям применения Java относятся: разработка в области автоматизации работы крупных предприятий, Android-разработка, сфера финансового ПО, backend-разработка, Big Data и Data Science, IoT.

Преимущества Java

   Кроссплатформенность: Java-приложения могут работать на любой платформе, где есть подходящая реализация JVM.

   Объектно-ориентированность: Java позволяет писать код в объектно-ориентированном стиле.

   Безопасность: Java имеет встроенные функции безопасности, которые делают ее надежной платформой для разработки приложений.

   Комьюнити: Java имеет большое и активное сообщество разработчиков, которое обеспечивает поддержку для изучения и использования языка.

   Крупномасштабные приложения: благодаря модульности, кроссплатформенности и безопасности, Java широко используется для создания крупномасштабных приложений для бизнеса.

Недостатки Java

   Производительность: из-за использования виртуальной машины и автоматического управления памятью, Java может работать медленнее, чем некоторые другие, компилируемые языки программирования, такие как C++.

   Повышенное использование памяти: автоматическое управление памятью в Java может приводить к повышенному ее использованию.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (4 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 2

  1. Владимир:

    Спасибо! Хорошая обзорная статья!)

    1. Андрей:

      Пожалуйста)

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *