Содержание
- 1 История создания
- 2 Востребованность, рейтинги, области применения
- 3 Технические особенности и достоинства
- 4 Выгодно ли быть программистом?
- 5 Язык программирования Java
- 6 Основные определения
- 7 Жизненный цикл программы
- 8 Выбор и установка среды разработки
- 9 За сколько можно выучить Java?
- 10 Зачем нужна Java?
- 11 Реальные Java приложения
- 12 Какие бывают операторы в Java
- 13 Операции над числами в Java
- 14 Логические операции в Java
- 15 Побитовые операции в Java
- 16 Java Development Kit (JDK)
- 17 Написание кода
- 18 Hello, world!
- 19 Переменные
- 20 Проверка условий
- 21 Циклы
- 22 Импорт и использование классов
- 23 Игра «Угадай число»
История создания
Первую версию Java выпустила в 1995 году компания Sun Microsystems. Язык был назван в честь сорта кофе с одноимённого острова. Этот факт отражен на официальном логотипе.
Изначально язык был создан для программирования бытовых электронных устройств, но очень скоро стало ясно, что его возможности гораздо шире. Язык взяли на вооружение разработчики серверного ПО и клиентских приложений. Так Java начал покорение мира. Очень скоро он вытеснил с рынка очень распространённый в начале 90-х C++.
С 2010 года все права на Java перешли к корпорации Oracle, поглотившей Sun Microsystems. А сам язык вышел на пик своей популярности. И, надо сказать, вполне заслуженно.
Востребованность, рейтинги, области применения
Java – универсальный объектно-ориентированный язык со строгой типизацией. В нём реализован принцип WORA (от английского: write once, run anywhere). Это позволяет запускать приложения везде, где есть среда исполнения JRE (от английского: Java Runtime Environment). Механизм работы программ следующий. Исходный материал транслируется в байт-код, который обрабатывается виртуальной машиной Java (JVM). При этом не имеет значения, какая операционная система установлена на устройстве.
Благодаря кроссплатформенности язык получил широкое распространение, регулярно занимает ведущие позиции в Топ-5 авторитетных международных рейтингов.
PYPL (PopularitY of Programming Language) – специализированный рейтинг, основанный на данных Google SE. Взглянем на его первую пятёрку. Java – на почётном втором месте.
Stack Overflow (раздел технологий) – расширенный рейтинг, основан на количестве вопросов, касающихся языков программирования и скриптов. Java – в первой пятёрке.
В международных рейтингах IEEE Spectrum и TIOBE (также как в PYPL) Java занимает вторые места в ТОП-5 (за 2019/2020 год). Это однозначно свидетельствует о лидирующих позициях языка в мировой IT-индустрии.
Java был протестирован программистами в самых разных сферах: от карманных компьютеров до интерактивного телевидения. Сейчас он наиболее востребован в таких направлениях, как
- веб-разработка (масштабные бизнес-проекты);
- программы для ПК (десктопный софт);
- компьютерные игры (например, Minecraft);
- приложения для мобильных устройств (ОС Android);
- научные исследования и разработки;
- промышленный программинг.
Компания ORACLE утверждает, что общее количество всех устройств, работающих с Java, достигло 3-х миллиардов. Это сообщение стало маркетинговым аргументом. Даже если цифра слегка преувеличена, популярность языка не вызывает сомнений.
Технические особенности и достоинства
Изначально перед создателями Java стояла задача сделать синтаксис более простым и понятным в сравнении с С/С++. В итоге так и получилось. Сходство между этими языками есть, но освоить Java и кодировать на нём гораздо легче.
У Java масса достоинств, благодаря которым многие разработчики выбирают именно его.
Простота – первое техническое достоинство Java. У него чёткие синтаксические правила и понятная семантика. Рациональность и краткость очень полезны для обработки кода машинами с ограниченным объёмом ресурсов. Для встроенных устройств создана специальная платформа Java Micro Edition.
Объектно-ориентированный подход. За 3 десятилетия он доказал свою эффективность. Суть состоит в том, что в центре внимания находятся данные (объекты), интерфейсы и алгоритмы вторичны. Другими словами, мы отталкиваемся от результата при выборе инструментов, способов их применения.
Безопасность. Важнейший критерий, учитывая применение языка в сетевых / распределенных средах. Разработчики проделали большую работу по защите платформы Java. И она продолжается. Обойти или взломать механизмы защиты крайне сложно. Пример: использование классов, имеющих цифровую подпись. Полные права предоставляются только при полном доверии автору класса.
Производительность. Изначально она вызывала вопросы. Новые версии динамических компиляторов Java не уступают традиционным из других платформ. Мощный прирост скорости обработки даёт оптимизация тех фрагментов кода, которая исполняется чаще. При необходимости те или иные приёмы оптимизации включаются или отменяются JIT-компилятором.
Надёжность – одно из важнейших преимуществ. Программы на Java стабильно работают в любых условиях. Компилятор способен выявить ошибки ещё до выполнения кода, то есть на ранних стадиях. Контроль выполнения позволяет предотвратить сбои в памяти (например, из-за неточного указателя). Сами указатели можно применять не везде, а только там, где это необходимо (скажем, в работе со связными списками).
Независимость от аппаратной части и ОС. Важно лишь наличие исполняющей среды и JVM. А компьютерная архитектура в целом значения не имеет. Байт-код легко интерпретируется на любой машине. Подход доказал свою состоятельность во многом благодаря динамической компиляции. Кроссплатформенностью отличается также интерфейс, реализованный в системных библиотеках.
Динамичность и адаптируемость. Эта особенность позволяет Java не теряться в постоянно изменяющейся среде. При необходимости можно добавить в библиотеки новые объекты, методы. При этом трогать приложения, использующие данные библиотеки не нужно. Отследить информацию о структуре объектов, их поведении, о ходе выполнения программы очень легко.
Удобные и эффективные сетевые возможности. Приложения умеют находить нужные объекты в сети и открывать к ним доступ. Причём так же легко, как будто мы имеем дело с локальной файловой системой. Имеется обширная программная библиотека для передачи данных по самым распространённым протоколам: FTP, HTTP, TCP/IP. Работает механизм вызова удалённых методов.
Не надо забывать, что Java – это трио, состоящее из языка программирования, мощного универсального обработчика и внушительной библиотеки. Все эти наработки доступны программистам. Им не нужно разрабатывать с нуля многие необходимые процедуры (доступ к сети, базам данных и т.п). Это тоже весомый аргумент в пользу Java.
Выгодно ли быть программистом?
Учитывая вышеизложенное, можно смело утверждать: Java – хороший язык программирования. Отличным его делает востребованность специалистов и высокая зарплата. По числу вакансий в России он уступает, разве что, Javascript. Ведущая рекрутинговая компания России HeadHunter предлагает более 5000 вариантов занятости. Это не считая фриланса.
Важно и то, что зарплата специалиста составляет от 90000 рублей при полной занятости. Это очень достойный уровень. Вообще, программисты Java зарабатывают выше многих коллег, работающих с другими языками. Опытный Java-разработчик вполне может рассчитывать на доход 130-150 тысяч в месяц.
Java достаточно прост в изучении, снисходителен к новичкам. Для начала надо изучить базовую часть. Затем уже осваиваются требуемые навыки по выбранному направлению. Специалистом начального уровня реально стать за 6-12 месяцев. Практика и знание английского языка будут способствовать скорейшему достижению успеха. Доступный и быстрый старт – ещё одно неоспоримое достоинство.
Язык программирования Java
На сегодняшний момент язык Java является одним из самых распространенных и популярных языков программирования. Первая версия языка появилась еще в 1996 году в недрах компании Sun Microsystems, впоследствии поглощенной компанией Oracle. Java задумывался как универсальный язык программирования, который можно применять для различного рода задач. И к настоящему времени язык Java проделал большой путь, было издано множество различных версий. Текущей версией является Java 17, которая вышла 14 сентября 2021 года. А Java превратилась из просто универсального языка в целую платформу и экосистему, которая объединяет различные технологии, используемые для целого ряда задач: от создания десктопных приложений до написания крупных веб-порталов и сервисов. Кроме того, язык Java активно применяется для создания программного обеспечения для множества устройств: обычных ПК, планшетов, смартфонов и мобильных телефонов и даже бытовой техники. Достаточно вспомнить популярность мобильной ОС Android, большинство программ для которой пишутся именно на Java.
Особенности Java
Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual Machine). В этом плане Java отличается от стандартных интерпретируемых языков как PHP или Perl, код которых сразу же выполняется интерпретатором. В то же время Java не является и чисто компилируемым языком, как С или С++.
Подобная архитектура обеспечивает кроссплатформенность и аппаратную переносимость программ на Java, благодаря чему подобные программы без перекомпиляции могут выполняться на различных платформах — Windows, Linux, Mac OS и т.д. Для каждой из платформ может быть своя реализация виртуальной машины JVM, но каждая из них может выполнять один и тот же код.
Java является языком с Си-подобным синтаксисом и близок в этом отношении к C/C++ и C#. Поэтому, если вы знакомы с одним из этих языков, то овладеть Java будет легче.
Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора. А это значит, что вам не надо освобождать вручную память от ранее использовавшихся объектов, как в С++, так как сборщик мусора это сделает автоматически за вас.
Java является объектно-ориентированным языком. Он поддерживает полиморфизм, наследование, статическую типизацию. Объектно-ориентированный подход позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений.
Oracle JDK и OpenJDK
Для разработки на языке программирования Java нам потребуется специальный комплект инструментов, который называется JDK или Java Development Kit. Однако стоит отметить, что существуют разные реализации JDK, хотя все они используют один и тот же язык — Java. Две наиболее популярных реализации — Oracle JDK и OpenJDK. В чем их разница?
Oracle JDK всецело развивается компанией Oracle. OpenJDK же развивается как компанией Oracle, так и еще рядом компаний совместно.
Наибольшие различия с точки зрения лицензирования. Согласно лицензии Oracle JDK можно использовать бесплатно для персональных нужд, а также для разработки, тестирования и демонстрации приложений. В остальных случаях (например, для получения поддержки) необходима коммерческая лицензия в виде подписки. А OpenJDK полностью бесплатна.
В плане функционала, набора возможностей Oracle JDK и OpenJDK практически не должны отличаться. А вот вплане производительности отмечается, что Oracle JDK работает несколько быстрее, чем OpenJDK. Кроме того, некоторые разработчики отмечают, что OpenJDK чуть более глючная, а Oracle JDK более стабильная.
В данном руководстве мы будем использовать Oracle JDK, однако если вы используете OpenJDK, никаких проблем не должно возникнуть.
Установка Java
Итак, для разработки программ на Java нам потребуется специальный комплект для разработки JDK (Java Development Kit). JDK включает ряд программ и утилит, которые позволяют компилировать, запускать программы на Java, а также выполнять ряд других функций.
Загрузить и установить соответствующую версию JDK можно с с официального сайта Oracle: https://www.oracle.com/java/technologies/javase-downloads.html
На этой странице найдем и загрузим дистрибутив для нашей операционной системы (Windows, MacOS или Linux):
Для большинства ОС есть два варианта загрузки: в виде установщика, либо в виде архива, который не надо устанавливать. Например, моя ОС — Windows, поэтому я выбираю пункт «x64 Installer» и загружаю файл, который представляет программу установки.
После загрузки запустим программу установки:
Нажмем на кнопку Next. На следующем экране необходимо указать, в какую папку будет производиться установка:
Оставим выбор папки по умолчанию и нажмем на Next для выполнения установки.
После завершения установки JDK мы увидим вот такое окно:
Итак, после установки JDK создадим первую программу на Java.
Основные определения
Если вы только начали изучать Java, непременно встретите следующие термины: JVM (Java Virtual Machine) — виртуальная машина Java. Это программный модуль, зависящий от платформы, который служит для интерпретации исходного байт-кода в машинный код и его исполнения. JRE (Java Runtime Environment) — среда выполнения Java. Включает в себя реализацию JVM для конкретной платформы и набор библиотек, необходимых для выполнения программ на Java. JDK (Java Development Kit) — набор инструментов разработчика, необходимых для написания программ на Java. Включает в себя компилятор, JRE, набор стандартных библиотек Java, документацию, различные утилиты. Исходный код — текстовый файл на языке Java, имеющий расширение .java Байт-код — машинно-независимый низкоуровневый код, представляющий собой набор инструкций для JVM. Машинный код — набор машинных инструкций в двоичном формате, которые непосредственно выполняются процессором. Компиляция — преобразование исходного кода в байт-код. Интерпретация — преобразование байт-кода в машинный код. Платформа — программно-аппаратная среда, в которой происходит выполнение программ и приложений. Наиболее популярными платформами являются Microsoft Windows, Linux, ОС Solaris и Mac OS. Эта схема поможет лучше ориентироваться в понятиях JVM, JRE и JDK:
Жизненный цикл программы
Жизненный цикл программы на языке Java начинается с написания исходного кода в текстовом формате. Обычно для этого используются специальные среды для разработки — Integrated Development Environment (IDE), но простые программы можно набирать и в текстовом редакторе, даже в Notepad, который поставляется с любой редакцией ОС Windows. Исходный код необходимо сохранить в файл, имеющий расширение .java. Пример программы HelloWorld.java: public class HelloWorld { public static void main(String[] args) { System.out.println(«This is my first program»); } } Прежде, чем выполнить этот исходный код, его необходимо скомпилировать в байт-код с помощью компилятора. Компилятор — это утилита, которая является частью JDK. В результате его работы мы получим файл с расширением .class. Он содержит байт-код — инструкции для JVM, формат которых напоминает язык ассемблер. Наша программа HelloWorld.java будет скомпилирована в файл HelloWorld.class. Платформа Java не предусматривает инструментов для редактирования байт-кода, но возможность просмотреть его все же есть. Чтобы посмотреть, что представляет собой байт-код программы на Java, можно воспользоваться утилитой дизасcемблера javap, которая входит в состав JDK. HelloWorld. class будет содержать такой байт-код: Compiled from «HelloWorld.java» public class HelloWorld { public HelloWorld(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object.»
- В оперативной памяти компьютера запускается JVM. По сути это программа, которая служит для выполнения написанных нами Java-программ.
- С помощью начального загрузчика классов JVM загружает и инициализирует наш класс в памяти компьютера. В нашем примере это класс HelloWorld.
- Далее в нашем классе JVM ищет метод public static void main(String[]).
- Выполняется код метода main. Если это необходимо для выполнения программы, производиться загрузка и инициализация других классов.
- После выполнения кода производится уборка мусора — очистка памяти и закрытие программы JVM.
При выполнении всех этих действий JVM интерпретирует (преобразовывает) байт-код в машинную инструкцию для процессора с учетом операционной системы, на которой она выполняется.
Выбор и установка среды разработки
Чтобы быстро и эффективно программировать на Java, вам понадобится среда разработки — приложение для написания программ на Java. Наиболее популярными IDE среди разработчиков на Java являются:
- IntelliJ IDEA
- Eclipse
- NetBeans
Согласно обзору популярности инструментов Java-разработки, который подготовила компания RebelLabs, в 2017 году лидером стал IntelliJ IDEA, второе место занимает Eclipse, а на третьем месте со значительным отставанием от пары лидеров расположился NetBeans. Доля остальных IDE невелика и не превышает в общем объеме 3%. Хороший сравнительный обзор этих IDE можно посмотреть здесь. Для новичков вполне достаточно установить IntelliJ IDEA Community Edition. Во-первых, вы получите все плюсы современной IDE, такие как: подсказки, проверка кода, возможность отладки кода, удобная интеграция с БД, серверами и поддержка многих инструментов и технологий разработки. Во-вторых, вы сделаете первый шаг в освоении профессионального инструмента разработки, используемого большинством разработчиков.
За сколько можно выучить Java?
На изучение основ Java и выработку навыка программирования, скорее всего, уйдет от 6 до 12 месяцев, в зависимости от интенсивности вашего обучения. Чтобы сделать этот процесс систематическим, составьте план обучения, соберите необходимые источники и выделяйте несколько часов в день на занятия. Не забывайте о том, что ключевое в обучении программированию — это практика.
Зачем нужна Java?
Этот универсальный язык программирования используют компании разного масштаба в своем корпоративном серверном ПО. Написанные на Java приложения можно найти везде: в «умном» чайнике, твоем Android-смартфоне, компьютере или автомобиле Tesla. И поскольку Java есть везде, найти работу, зная этот язык, довольно просто.
Зачем нужно учить Java?
Всё просто: Java — универсальный язык, который используют сотни тысяч компаний. Так что если вы знаете Java, довольно легко найти интересную работу. Java достаточно несложен в освоении, поэтому он подходит тем, кто впервые подошёл к изучению программирования. Этот язык работает на всех платформах, и хотя он постоянно обновляется и модернизируется, старый Java-код совместим с новым.
Реальные Java приложения
Существует множество областей применения Java, от сайтов электронной коммерции до Android приложений, от научных до финансовых приложений, таких как трейдинговые системы, от игр, типа Minecraft, до настольных программных средств, таких как Eclipse, Netbeans и IntelliJ, от open source фреймворков до J2ME приложений и т.д. Давайте детальнее рассмотрим каждое из них.
Android приложения
Если хотите увидеть, где используется Java, не нужно далеко идти. Просто возьмите свой телефон на Android, абсолютно все приложения написаны на Java, с использованием Google и Android API, которые схожи с JDK. Пару лет назад Android предоставил необходимые возможности, благодаря чему сегодня многие Java программисты – Android разработчики. Кстати, Android использует другую JVM и другой и другой способ компановки, но код всё ещё написан на Java.
Серверные приложения в сфере финансовых услуг
Java очень обширно применяется в финансовой сфере. Многие мировые инвестиционные банки, типа Goldman Sachs, Citigroup, Barclays, Standard Charted и другие используют Java для написания фронт-энд и бэк-энд офисных электронных систем, систем регулирования и конфирмации, проектов обработки данных и некоторых других. Преимущественно Java используется при написании серверных приложений, в большинстве своём без какого-либо пользовательского интерфейса, которые получают данные с одного сервера, обрабатывают их и отправляют дальше. Java Swing был также популярен для создания «толстоклиентных» интерфейсоф, но сейчас C# быстро захватывает рынок в этой области, а Swing уже выдыхается.
Вэб-приложения
Также Java широко используется в электронной коммерции и в области вэб-приложений. Огромное количество RESTful сервисов было создано с использованием Spring MVC, Struts 2.0 и похожих фреймворков. Даже простейшие приложения, основанные на Servlet, JSP и Struts, достаточно популярны в различных государственных проектах. Многие вэб-приложения государственных, оздоровительных, страховых, образовательных, оборонительных и некоторых других отделений написаны на Java.
Программные средства
Многие полезные програмные средства и средства разработки написаны и разработаны на Java, например Eclipse, IntelliJ Idea и Netbeans IDE. Мне кажется это, к тому же, наиболее используемые приложения, написанные на Java. Было время, когда Swing был очень популярен при создании «толстых клиентов», преимущественно в финансовой сфере. Сегодня Java FX набирает всё большую популярность, но это всё ещё не замена Swing, к тому же C# практически полностью вытеснил Swing из финансовой области.
Трейдинговые приложения
Сторонние трейдинговые приложения, которые также часть большой индустрии финансовых услуг, тоже используют Java. Популярные приложения, типа Murex, которые используются во многих банках, написаны на Java.
J2ME приложения
Несмотря на то, что появление iOS и Android практически уничтожило J2ME рынок, в мире ещё огромное количество дешёвых телефонов от Nokia и Samsung, использующих J2ME. Было время, когда практически все игры и приложения, доступные на Android, были написаны с использованием MIDP и CLDC, которые являются частью платформы J2ME. J2ME всё ещё популярен в таких средствах, как Blu-ray, карточки и телевизионные приставки. Одна из причин такой популярности WhatsApp – он также доступен на J2ME.
Встраиваемые системы
Обширна Java и в области встраиваемых систем. Можно увидеть на что способна платформа, вам нужно всего 130 KB для использования Java (на смарт-картах и сенсорах). Изначально Java разрабатывалась для встраиваемых систем. В действительности эта область была частью начальной кампании Java «пиши один раз, запускай где-угодно» и похоже, что она приносит свои плоды.
Большие данные
Hadoop и другие технологии обработки больших данных так или иначе используют Java, например Hbase и Accumulo от Apache, или ElasticSearch. Хоть Java и не доминирует в этой области, поскольку существуют такие технологии, как MongoDB, которые написаны на С++. У Java есть потенциал получить большую долю этой растущей области, если Hadoop или ElasticSearch расширятся.
Высокочастотные трейдинговые пространства
Java улучшила свои эксплуатационные показатели и с современными JIT-ами она способна предоставить производительность на уровне С++. По этой причине Java популярна и при написании высокопроизводительных систем, потому что хоть производительность проигрывает в сравнении с родным языком, но вы можете пожертвовать безопасностью, мобильностью и надёжностью ради большей скорости и требуется всего один неопытный С++ программист, чтобы сделать приложение медленным и ненадёжным.
Какие бывают операторы в Java
Для любой операции нам нужно как минимум две вещи:
- оператор;
- операнд.
Примером оператора может быть простой плюс в операции сложения двух чисел. А складываемые друг с другом числа будут в этом случае операндами. Итак, с помощью операторов мы выполняем операции над одним или несколькими операндами. Операторы, которые осуществляют операции над двумя операндами, называются бинарными. Например, сложение двух чисел. Операторы, которые осуществляют операции над одним операндом, называются унарными. Например, унарный минус.
Операции над числами в Java
Самая частая операция, которую программисты производят над числами — присвоение числового значения какой либо переменной. Она, как и оператор = тебе знакомы: int a = 1; int b = 2; int c = 3; Есть также арифметические операции. Они осуществляются с помощью бинарных арифметических операторов: Таблица 1. Бинарные арифметические операторыПервые четыре оператора не должны вызывать вопросов: все так же, как в математике. Последний оператор, остаток от деления, также не делает ничего сверхсложного. К примеру, если разделить 24 на 7, мы получим 3 целых и 3 в остатке. Именно остаток и вернет данный оператор: System.out.println(24 % 7); // выведет 3 Вот примеры с сайта официальной документации Oracle: Данная программа выведет следующее: 1 + 2 = 3 3 — 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java позволяет комбинировать: например, операторы присваивания и арифметические операторы. Рассмотрим пример: int x = 0; x = x + 1; // x = 0 + 1 => x = 1 x = x + 1; // x = 1 + 1 => x = 2 x = x + 1; // x = 2 + 1 => x = 3 Здесь мы задали переменную x и присвоили ей нулевое значение. Далее в каждой строке мы присваиваем значению x сумму текущего значения переменной x и единицы. В комментариях к каждой строке есть пояснения. Эту процедуру называют наращиванием или инкрементированием переменной. Операцию инкрементирования из примера выше можно заменить на аналогичную с использованием комбинации операторов: int x = 0; x += 1; // x = 0 + 1 => x = 1 x += 1; // x = 1 + 1 => x = 2 x += 1; // x = 2 + 1 => x = 3 Комбинировать оператор присваивания можно с любым арифметическим оператором: int x = 0; x += 10; // x = 0 + 10 => x = 10 x -= 5; // x = 10 — 5 => x = 5 x *= 5; // x = 5 * 5 => x = 25 x /= 5; // x = 25 / 5 => x = 5 x %= 3; // x = 5 % 3 => x = 2; Продемонстрируем работу последнего примера: Помимо бинарных, в Java есть унарные арифметические операторы. Таблица 2. Унарные арифметические операторы:Пример унарных плюса и минуса: int x = 0; x = (+5) + (+15); //Скобки для наглядности, можно и без них System.out.println(«x = » + x); int y = -x; System.out.println(«y = » + y); Операции инкремента и декремента по сути просты. В первом случае происходит увеличение переменной на 1, во втором — уменьшение переменной на 1. Пример ниже: int x = 9; x++; System.out.println(x); // 10 int y = 21; y—; System.out.println(y); // 20 Есть два типа данных операций — постфиксная и префиксная. В первом случае оператор пишется после переменной, во втором случае — перед переменной. Разница лишь в том, когда выполнится операция инкрементирования или декрементирования. Пример и описание в таблице ниже. Предположим, у нас есть переменная: int a = 2; Тогда: Таблица 3. Операторы инкремента-декремента:Демонстрация: Помимо арифметических, существуют операции сравнения (двух чисел). Результатом всегда будет истина либо ложь (true / false). Таблица 4. Операторы сравненияПримеры: int a = 1; int b = 2; boolean comparisonResult = a == b; System.out.println(«a == b :» + comparisonResult); comparisonResult = a != b; System.out.println(«a != b :» + comparisonResult); comparisonResult = a > b; System.out.println(«a > b :» + comparisonResult); comparisonResult = a >= b; System.out.println(«a >= b :» + comparisonResult); comparisonResult = a < b; System.out.println(«a < b :» + comparisonResult); comparisonResult = a <= b; System.out.println(«a <= b :» + comparisonResult);
Логические операции в Java
Рассмотрим логические операции и таблицы истинности каждой из них:
- операция отрицания (NOT);
- операция конъюнкции, логическое И (AND);
- операция дизъюнкции, логическое ИЛИ (OR);
- операция сложения по модулю, исключающее ИЛИ (XOR).
Операция отрицания унарная и применяется к одному операнду. Все остальные операции — бинарные. Рассмотрим таблицы истинности данных операций. Здесь 0 — аналог значения false в Java, а 1 — значения true. Таблица 5. Таблица истинности оператора отрицания (NOT)Таблица 6. Таблица истинности оператора конъюнкции (AND)Таблица 7. Таблица истинности оператора дизъюнкции (OR)Таблица 8. Таблица истинности оператора сложения по модулю (XOR)В Java есть те же логические операции:
- ! — оператор отрицания;
- && — оператор логическое И (сокращенный);
- || — оператор логическое ИЛИ (сокращенный);
- & — оператор побитовое И;
- | — оператор побитовое ИЛИ;
- ^ — оператор побитовое исключающее ИЛИ.
Разницу между побитовыми и сокращенными операторами рассмотрим чуть ниже, пока давай преобразуем все таблицы истинности в Java код: public class LogicDemo { public static void main(String[] args) { notExample(); andExample(); orExample(); xorExample(); } public static void notExample() { System.out.println(«NOT EXAMPLE:»); System.out.println(«NOT false = » + !false); System.out.println(«NOT true = » + !true); System.out.println(); } public static void andExample() { System.out.println(«AND EXAMPLE:»); System.out.println(«false AND false = » + (false & false)); System.out.println(«false AND true = » + (false & true)); System.out.println(«true AND false = » + (true & false)); System.out.println(«true AND true = » + (true & true)); System.out.println(); } public static void orExample() { System.out.println(«OR EXAMPLE:»); System.out.println(«false OR false = » + (false | false)); System.out.println(«false OR true = » + (false | true)); System.out.println(«true OR false = » + (true | false)); System.out.println(«true OR true = » + (true | true)); System.out.println(); } public static void xorExample() { System.out.println(«XOR EXAMPLE:»); System.out.println(«false XOR false = » + (false ^ false)); System.out.println(«false XOR true = » + (false ^ true)); System.out.println(«true XOR false = » + (true ^ false)); System.out.println(«true XOR true = » + (true ^ true)); System.out.println(); } } Данная программа выведет на экран: NOT EXAMPLE: NOT false = true NOT true = false AND EXAMPLE: false AND false = false false AND true = false true AND false = false true AND true = true OR EXAMPLE: false OR false = false false OR true = true true OR false = true true OR true = true XOR EXAMPLE: false XOR false = false false XOR true = true true XOR false = true true XOR true = false Логические операторы применимы только к boolean переменным. В нашем случае мы применяли их сразу к значениям, но можно их использовать и с boolean переменными: И к boolean выражениям: Теперь, у нас есть сокращенные операторы (&&, ||) и аналогичные побитовые операторы (&, |). В чем между ними разница? Во-первых, побитовые можно применять к целым числам. Об этом мы поговорим чуть позже. А во-вторых, одни сокращенные, а другие — нет. Чтобы понять, как выглядит сокращенность, посмотрим на выражение: false AND x = ? true OR x = ? Здесь x может принимать любое булево значение. И в целом, согласно законам логики и таблицам истинности, независимо от того, будет xtrue или false, результатом первого выражения будет false, а результатом второго будет true. Смотри. Иногда результат выражения можно вычислить уже по первому операнду. Этим и отличаются сокращенные операторы && и ||. В выражениях, аналогичных описанным выше, они не вычисляют значение второго операнда. Вот небольшой пример: В случае с сокращенными операторами не вычисляется вторая часть выражения. Но происходит это только тогда, когда результат выражения очевиден уже по первому операнду.
Побитовые операции в Java
Ну вот мы и подобрались к самому интересному: побитовым операциям. Как можно понять из названия, это операции, которые производятся над битами. Но прежде чем мы погрузимся в эту тему, стоит поговорить о смежных областях.
Представление чисел в двоичной системе счисления
Числа, как и любая другая информация в программе, хранятся в памяти компьютера в двоичном коде. Двоичный код — набор нулей и единиц. Каждый ноль или единица представляют собой единицу измерения информации, которая называется бит.
Java Development Kit (JDK)
В строку поиска Google вводим запрос: “jdk 8 download”, первая же строка поисковой выдачи даст нам ссылку на страницу загрузки на сайте oracle.com. Листаем вниз, щёлкаем по радио-кнопке “Accept License Agreement”, соглашаясь с лицензией, и выбираем пакет в колонке “Download”, который соответствует вашей операционной системе и её разрядности (32/64). Для скачивания потребуется регистрация на сайте (нужно будет указать логин и e-mail). Скачиваем и устанавливаем. На этапе выбора пакетов и папки JDK рекомендуется отказаться от Public JRE и сократить имя папки до “jdk1.8”.
Счастливым обладателям Windows потребуется также настройка системных переменных. Как их найти: Панель управления -> Система -> Дополнительные параметры системы -> Вкладка «Дополнительно» -> кнопка «Переменные среды», второе окошко сверху. В нем надо создать переменную JAVA_HOME и изменить (дополнить) Path (для этого используются кнопки «Создать» и «Изменить». Значение для переменной JAVA_HOME содержит путь к папке JDK. Переменную Path дополняем значением %JAVA_HOME%bin. Обратите внимание, что список путей разделяется точкой с запятой (;). Инструкция есть также на сайте Oracle.
JDK содержит много утилит, но нам потребуется только компилятор (javac) и виртуальная машина Java — JVM (java).
Проверить правильность установки и настройки можно в командной строке (на Windows: Win + R -> cmd) или в терминале (Linux, Mac), набрав следующие команды:
javac -version java -version
В качестве альтернативы можно использовать онлайн-JDK вместе с редактором, например на сайте Repl.it.
Написание кода
Писать исходный код можно в любом текстовом редакторе. А компиляцию и запуск проводить в командной строке (терминале). Но удобнее будет работать в редакторе с подсветкой синтаксиса и плагином, автоматизирующим компиляцию и запуск.
Для Windows хорошим выбором будет Notepad++ с плагином NppExec. Для Linux и Мас существуют другие текстовые редакторы, например Atom или Geany. Подробно об их настройке можно прочитать в статье «Пишем код на Java и Go в текстовом редакторе».
Hello, world!
При изучении нового языка писать программу, выводящую «Hello, world!», — это традиция. Она возникла в 1978 году, с выходом в свет книги «Язык программирования С» Брайана Кернигана и Денниса Ричи.
Код начинается с ключевого слова class.Java-программы состоят из классов — это «кирпичики» приложения. В реальных приложениях их могут быть десятки, сотни и тысячи. Затем пишется имя класса — HelloWorld. Имена классов принято писать в стиле CamelCase (все слова слитно, каждое с заглавной буквы). Классам, как и другим сущностям — методам, полям и переменным — рекомендуется давать мнемонические, «говорящие» имена.
После имени в фигурных скобках записывается тело класса. Оно может содержать поля, методы и другие классы. Поля хранят данные. Они подобны переменным, однако в Java это несколько иная сущность. Методы содержат набор команд или код. Имена методов (как и полей, переменных) принято писать в стиле camelCase, со строчной буквы.
В нашем классе только один метод — main(). Он особенный, его часто называют стартовым. Когда виртуальная машина Java получает класс для исполнения, она ищет в нём метод main. Если находит — выполняет код, который содержит метод. Если нет — выдаёт сообщение об ошибке. Важно, чтобы метод main() имел строго определённую сигнатуру: был публичным (public), статическим (static), не возвращающим никакого значения (void), с параметром в виде массива строк (String[] args). В противном случае виртуальная машина его просто не найдёт.
Наш метод main() содержит лишь одну строку, которая выводит в консоль текст «Hello, world!».
Перед компиляцией сохраняем написанный код в файл. Имя файла должно соответствовать имени класса с точностью до регистра символов (Java — регистрозависимый язык). Затем открываем командную строку (или терминал) и вызываем сначала компилятор (javac), а потом виртуальную машину JVM (java).
C:UsersUser>javac HelloWorld.java C:UsersUser>java HelloWorld Hello, world!
После компиляции возникнет бинарный файл HelloWorld.class, содержащий байт-код. Имя этого файла (без расширения) передаётся как параметр при вызове виртуальной машины. В результате видим строку «Hello, world!» — это результат выполнения программы.
Переменные
Переменные хранят данные (числа, строки, логические значения и другие). Они похожи на коробочки: надписи на них — это имя и тип переменной, а внутри находится значение. При этом возможны две операции:
- запись значения в переменную (или присвоение значения);
- чтение значения из переменной.
В Java перед использованием переменную нужно обязательно объявить, указав тип и имя, поскольку Java — язык со строгой и статической типизацией. Попытка использовать переменную без объявления приведёт к ошибке компиляции. По типу переменные могут быть простыми (числа, символы, логические значения) или ссылочными (массивы, строки, любые другие объекты). В Java есть восемь простых типов (byte, int, short, long, float, double, boolean, char) и бесконечное количество ссылочных.
В примере ниже мы видим объявление двух переменных целого типа (int). Причём переменная second инициируется при объявлении. Затем переменной first присваивается результат выражения, в котором присутствует переменная second. В результате выполнения программы в консоль будут выведены значения обеих переменных: 35 и 10.
Имя переменной может содержать буквы и цифры, знак подчёркивания и $. Имя не должно начинаться с цифры. В профессиональной разработке в именах переменных используют только буквы. Имя должно явно указывать на назначение переменной. Например: countString — счётчик строк, errorSign — признак ошибки. Рекомендуется избегать однобуквенных имён — за исключением временных переменных (существующих в рамках цикла или небольшого кодового блока).
Проверка условий
Любой язык программирования высокого уровня позволяет изменять порядок выполнения программы в зависимости от заданного условия. В Java для этого используется конструкция if. После этого ключевого слова в скобках записывается логическое выражение, затем в фигурных скобках — группа команд. Если результат логического выражения — true (истина), то эта группа команд выполняется, если false (ложь) — нет.
Результат этого примера — строка “i = 10” в консоли, так как результат логического выражения (проверка на равенство) будет true.
В качестве знаков сравнения допустимы: <, <=, >, >=, ==, !=. Добавив ключевое слово else, получаем полную форму оператора сравнения.
Выполнив эту программу, мы увидим в консоли сообщение “i != 10”, так как результат сравнения значения переменной i и цифры 10 будет false. Поэтому выполнится набор команд в фигурных скобках после слова else.
Циклы
Циклы предназначены для повторения группы команд. Java позволяет использовать два вида циклов:
- с определённым количеством итераций: for;
- без определенного количества итераций: while и do-while.
Запустив этот пример, мы увидим в консоли колонку чисел от 0 до 4. Это результат работы классического цикла for со счётчиком. В круглых скобках три параметра цикла, разделённые точкой с запятой: объявление и инициализация счётчика, проверка условия продолжения цикла, действие после каждой итерации. В фигурных скобках — тело цикла. В нашем случае это команда, выводящая значение счётчика i в консоль.
Когда будем писать игру, используем циклы while и do-while — там и увидим их работу на практике. Пока достаточно сказать, что их синтаксис проще for, а тело цикла повторяется до тех пор, пока логическое выражение в круглых скобках после while возвращает true.
Пример ниже иллюстрирует вторую форму цикла for — без счётчика. Такой вариант удобен при переборе элементов массива или списка.
Импорт и использование классов
Один из важных принципов программирования — DRY: Don’t Repeat Youself (не повторяйся). Разработчик должен уметь использовать то, уже создано, отлажено и работает.
Java поставляется с набором packages (пакетов). Они содержат скомпилированные классы, сгруппированные по тематике. На неё указывает имя пакета: java.io, java.util, java.net и так далее.
В игре нам потребуется случайное число от 0 до 9. Писать генератор случайных чисел незачем, так как в пакете java.util есть готовый класс Random. Чтобы использовать класс из пакета, его нужно импортировать. Строки с директивами импорта располагаются в самом начале файла класса.
Создадим объект на основании класса, чтобы можно было вызвать нужный метод. Слева от знака присваивания (=) объявляем ссылочную переменную (объект) random типа Random. Справа создаём объект с помощью директивы new.
Вызываем метод через точку после имени объекта: random.nextInt(10). Цифра 10 ограничивает диапазон генерируемых чисел (от 0 до 9). В результате получим строку из 30 случайных чисел. Запустите программу несколько раз и обратите внимание, что последовательность чисел не повторяется.
Игра «Угадай число»
Мы узнали достаточно, чтобы написать игру «Угадай число». В ней компьютер «загадывает» целое число от 0 до 9, а человек должен угадать его — есть три попытки.
Создадим класс GuessTheNumber с методом main(), импортируем нужные нам классы и добавим соответствующие объекты. Класс Scanner обеспечит чтение чисел с консоли (System.in — консоль).
Объявим и инициируем три переменные: счётчик попыток count, для чтения числа с консоли — guess, для хранения загаданного числа — number.
Опишем основной игровой цикл, используя while. В цикле запрашиваем число с консоли, сравниваем с загаданным. В случае несовпадения выводим подсказку и увеличиваем счётчик попыток на 1.
Тело цикла while повторяется, пока логическое значение в скобках возвращает true. Таким образом наш цикл будет повторяться, пока значение счётчика попыток меньше 3 и число не отгадано. Обратите внимание на конструкцию, которая позволяет выбрать одно из двух значений согласно условию в скобках. Это тернарный оператор. Если условие в скобках true, то возвращается значение слева от двоеточия, если false — справа.
Остаётся добавить строку с выводом результата игры (победа или проигрыш) после цикла — тут снова используется тернарный оператор. Текст работающей программы выглядит так:
Сохраняем программу в файл GuessTheNumber.java, компилируем (javac), вызываем JVM (java) — и пробуем выиграть у компьютера.
Добавим заключительный штрих: используя цикл do-while, позволим пользователю повторять сеанс игры без перезапуска программы. В приведённом ниже коде комментарий нужно заменить на соответствующий фрагмент из предыдущей программы. Попробуйте сделать это самостоятельно.
Обратите внимание, что тело цикла do-while повторяется на тех же условиях, что и тело цикла while: логическое выражение в скобках должно быть true.
- https://vc.ru/dev/144873-preimushchestva-yazyka-programmirovaniya-java
- https://metanit.com/java/tutorial/1.1.php
- https://javarush.ru/groups/posts/1918-s-chego-nachatjh-izuchenie-java
- https://javarush.ru/groups/posts/1079-gde-ispoljhzuetsja-java
- https://javarush.ru/groups/posts/operatory-java-logicheskie-arifmeticheskie-pobitovye
- https://gb.ru/posts/java_quick_start_part1