Логические операторы в java
Содержание:
- Синтаксис оператора switch
- Логические И и ИЛИ
- Java: что за зверь?
- 2.1 Целочисленные типы (Integral types)
- Пользуйтесь несколькими обучающими ресурсами
- Как работают классы в Java
- Объекты
- Такие разные реализации
- Mutable vs Immutable объекты
- Как логические операторы работают с целыми числами
- Что такое Java?
- Логические операторы OR, AND, XOR, NOT.
Синтаксис оператора switch
switch (variable/expression) { case value1: // statements of case1 break; case value2: // statements of case2 break; .. .. ... .. .. ... default: // default statements }
Оператор switch оценивает выражение (в основном переменное) и сравнивает его со значениями (могут быть выражениями) каждой метки case.
Теперь, если значение соответствует определенной метке case, то выполняются все операторы соответствующей метки case.
Например, если переменная / выражение равно значению 2. В этом случае выполняются все операторы этого совпадающего case (операторы case2).
Это важно, потому что если break не используется, все операторы после соответствующего case выполняются последовательно до конца оператора switch. Что следует помнить:
Что следует помнить:
- Для выражения переключения может быть одно или N значений case.
- Значение case должно быть только типа выражения переключения. Значение case должно быть буквальным или постоянным. Он не допускает переменных.
- Значения case должны быть уникальными. В случае повторяющегося значения он отображает ошибку времени компиляции.
- Выражение переключателя Java должно быть byte, short, int, long, перечислением и строкой.
- Каждый оператор case может иметь оператор break, который не является обязательным.
- Когда элемент управления достигает оператора break, он переходит к элементу управления после выражения switch.
- Также case может иметь метку по умолчанию, которая является необязательной.
Логические И и ИЛИ
Логическое И
&& и Логическое ИЛИ
|| ведут себя вполне ожидаемо для логического И или логического ИЛИ:
Java
boolean b1 = true && true; //true
boolean b2 = true && false; //false
boolean b3 = true || false; // true
boolean b4 = false || false; //false
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
1 |
booleanb1=true&&true;//true booleanb2=true&&false;//false booleanb3=true||false;// true booleanb4=false||false;//false System.out.println(b1); System.out.println(b2); System.out.println(b3); System.out.println(b4); |
Логическое И
&& вычисляет свой правый операнд только в том случае, если левый равен
true. Если левый операнд равен
false, то сразу возвращается
false. Логическое ИЛИ
|| вычисляет правый операнд только в том случае, если левый равен
false. Если левый операнд равен
true, то сразу возвращается
true. Эти два правила сокращения вычислений позволяют сразу откинуть последующие вычисления, если результат всего выражения уже известен. Это можно использовать для проверки на
null перед проверкой результата какого-либо метода объекта (будет описано в дальнейшем):
Java
if (obj != null && obj.method1()) { // obj.method1() будет вызывать только
// если проверка obj!= null вернула true.
}
1 |
if(obj!=null&&obj.method1()){// obj.method1() будет вызывать только // если проверка obj!= null вернула true. } |
Java: что за зверь?
Java — мультифункциональный объектно-ориентированный язык со строгой типизацией.
Что это значит?
С мультифункциональностью всё достаточно просто: Java действительно почти «волшебная таблетка» — на ней можно разрабатывать десктопные приложения, приложения под Android, заниматься веб-разработкой… Подробнее об этом ниже.
Строгая (сильная) типизация не позволяет смешивать в выражениях разные типы и не выполняет автоматически неявные преобразования. Это добавляет мороки: какие-то части приходится прописывать самому, а свободы у вас меньше, — зато в обмен на это вы получаете надёжность.
Объектно-ориентированный язык — это язык, созданный по модели объектно-ориентированного программирования. В ней существуют классы и объекты. Классы — это типы данных, а объекты — представители классов. Вы создаёте их сами, даёте названия и присваиваете им свойства и операции, которые с ними можно выполнять. Это как конструктор, который позволяет построить то, что вы хотите. Именно с помощью этой системы объектов в основном программируют на Java.
2.1 Целочисленные типы (Integral types)
Integer-типы и тип char все вместе называются integral-типами.
2.1.1 Символьный тип char
Тип char является беззнаковым. Его значения это беззнаковые целые, которые обозначают все 65536 (216) символов из 16-битной Unicode таблицы символов. Эта таблица включает буквы, цифры и специальные символы.
Диапазон символьных значений |
Первые 128 символов Unicode-таблицы такие же как и в 7-битной ASCII таблице символов. А первые 256 символов Unicode-таблицы такие же как и в 8-битной ISO Latin-1 таблице символов.
Символьный литерал заключается в одинарные кавычки (‘). Все символьные литералы имеют примитивный тип данных char. Символьный литерал представляется в соответствии с 16-битной символьной таблицей Unicode, которая включает в себя символы 8-битной ISO-Latin-1 и 7-битной ASCII
Обратите внимание, что цифры (0-9), прописные буквы (A-Z) и строчные буквы (a-z) имеют Unicode значения расположенные соответственно их порядку
Примеры символьных литералов |
Unicode символ может быть указан как четырехзначное шестнадцатеричное число (т.е. 16-бит) с префиксом \u.Escape-последовательности (escape sequences) определяются специальные символы. Для определения символьного литерала они должны быть заключены в одинарные кавычки. Например, символьные литералы \t и \u0009 являются эквивалентными. Однако символьные литералы \u000a и \u000d не должны использоваться в исходном коде для представления новой строки и возврата каретки. Компилятор интерпретирует эти значения как терминаторы строк, что вызовет ошибку компиляции. Вам следует использовать escape-последовательности \n и \r для правильной интерпретации этих символов в коде.
Вы также можете использовать escape-последовательность \ddd чтобы указывать символьный литерал как восьмеричное значение, где вместо каждой d может быть восьмеричная цифра (0–7). Количество цифр должно быть три или меньше и восьмеричное значение не должно превышать \377; другими словами только первые 256 символов могут быть указаны в такой нотации.
Примеры \ddd escape-последовательностей |
2.1.2 Целые типы (integer types): byte, short, int, long
Целые типы данных (Integer data types) охватывают следующие типы данных: int, long, byte и short. Типы byte, short, int, long являются знаковыми.
Примитивные значения данных не являются объектами. Каждый примитивный тип данных определяет диапазон значений и операции над этими значениями с помощью операторов. Каждый примитивный тип данных имеет соответствующий ему класс-обертку (wrapper), который может быть использован для представления значения в форме объекта.
Диапазон целых значений |
По умолчанию для любого целочисленного литерала используется тип int. Но если добавить к целочисленному значению суффикс L (или l), то будет использоваться тип long. Обычно используют суффикс L потому что l похож на единицу, что может вызвать путаницу. Без суффикса L long-литералы 2000L и 0L будут интерпретированы как int-литералы. Не существует прямого способа чтобы указать short и byte литерал.
В дополнение целочисленные литералы могут быть указаны не только в десятичной системе счисления, но в двоичной (основание 2, цифры 0-1), восьмеричной (основание 8, цифры 0-7) и шестнадцатеричной (основание 16, цифры 0-9 и a-f). Цифры от a до f в шестнадцатеричной системе счисления соответствуют числам от 10 до 15. Двоичные, восьмеричные и шестнадцатеричные числа указываются с префиксами оснований 0b (или 0B), 0, и 0x (или 0X) соответственно. Шестнадцатеричные цифры от a до f также могут указываться в верхнем регистре (A-F). Негативные целые (например, -90) указываются с минусом (-) в виде префикса независимо от системы счисления (например, -0b1011010, -0132, или -0X5A).
Примеры десятичных, бинарных, восьмеричных и шестнадцатеричных литералов |
Пользуйтесь несколькими обучающими ресурсами
Вам потребуется множество инструментов для достижения цели. Вот полезные подборки для успешного обучения.
1. Только практика: CodeAcademy
Это, пожалуй, одна из самых известных онлайн-платформ для изучения разных языков программирования. И, конечно же, тут есть специальный раздел для изучающих Java. Здесь вы с самого первого урока начнете писать код. Если задание покажется слишком сложным (а для новичков — это совершенно нормально), то можете воспользоваться полезными подсказками. Логика обучения проста: читаете задание, пишите код, запускаете его, смотрите результат, переходите к следующему уроку. Задания постепенно усложняются до тех пор, пока вы не научитесь писать код с чистого листа. Есть очень полезный раздел FAQ и возможность обсуждения задания с другими учениками.
Данный курс может стать отличным подспорьем при изучении Java. Как уже было сказано выше, для успешного освоения Java нужно писать много кода.
2. Играйте и программируйте с нуля: CodeGym.cc
Существуют онлайн-курсы по Java с необычной особенностью — игрофикацией. Сейчас многие платформы стали внедрять обучение в формате игры. Так вы получаете должную мотивацию, наглядно отслеживаете успехи и легче достигаете нужной цели.
В CodeGym вы начинаете с нулевого уровня. Процесс обучения проходит в футуристической вселенной с космическими путешествиями, роботами и прочими классными штуками. Ваша цель — пройти 4 обучающих квеста и «прокачать» своего персонажа (робота). Каждый квест состоит из 10 уровней. В каждом уровне по 10–12 уроков, которые вам объясняют члены экипажа космического корабля. Урок сводится к минимуму теории и набору заданий с мгновенной проверкой, а также подсказками по улучшению кода. Вы сразу начинаете писать код и решаете простейшие задачи до тех пор, пока не будете готовы к более сложным и масштабным проектам по разработке.
Здесь вы можете не «застревать» на какой-то теме, а переходить к изучению следующей и возвращаться к проблемной задаче позже. В курсе имеется невероятное количество задач — более 1200. Это количество равнозначно примерно 300–500 часам написания кода.
3. Конкурсы по программированию: Codewars
Есть еще одна онлайн-платформа с акцентом на практику. Хотя, конечно, она больше подходит для тех, у кого за плечами есть опыт в разработке. Codewars позволяет отточить свои навыки в каком-то языке программирования с помощью обучающих задач (ката).
Вы можете писать свой код в браузере и пошагово проверять его в тестовых сценариях. Также можете сравнивать свой код с чужим, расширять базу знаний и обсуждать лучшие варианты. Каждое задание представляет собой конкурс с другими программистами, и ему присваивается свой рейтинг. Как только вы научитесь решать не самые простые задачи, то сможете отточить свои навыки и поучаствовать в более сложных конкурсах. Основное отличие данной платформы — здесь вы можете учиться и практиковаться в группе.
4. Слушайте лекции профессионалов: EdX
EdX — это образовательная платформа, созданная Гарвардским университетом и MIT. В ней представлено множество предметов, в том числе, программирование на Java и смежные области. EdX содержит массу утвержденных вводных курсов и сертифицированных программ, проводимых университетами.
Хотите быть в курсе последних новостей, обзоров и обновлений в Java-мире? И это правильно. Java постоянно развивается, обновляется и добавляет новые возможности. Не забывайте каждый день читать полезные статьи по Java.
Помните совет о том, чтобы вступить в профильные сообщества для более эффективного обучения? Можете задавать свои вопросы в разделе Java на Stack Overflow или Coderanch. Кроме того, есть как минимум три крупных сообщества на Reddit (learnprogramming, java и learnjava), где вы познакомитесь с полезными подсказками по изучению как всего программирования, так и отдельно взятого языка. Если нужна более конкретная информация (например, как улучшить код в каких-то заданиях), то почитайте специальный раздел помощи на CodeGym –другие студенты и «наставники по разработке» подскажут вам решение любой задачи. И, наконец, есть еще крупное Java-сообщество на Oracle. Оно рассчитано на новичков и продвинутых разработчиков.
Быть разработчиком — это постоянно совершенствоваться и получать новые знания. Если вы изначально разовьете навык самообразования, то гарантированно добьетесь успехов. Итак, вы готовы начать?
Перевод статьи John SelawskyHow to learn to code in Java: why you should and where to start
Как работают классы в Java
Создавая программу, нужно объявить класс с её именем, а потом добавить метод main — из него начинается работа приложения:
В Java всё, что не является объектом, является классом. Даже System, с помощью которого выводится текст, — это объект.
Можно создать переменные для этого класса — атрибуты:
Эти переменные вызываются из основного метода и умножаются. Вот как выглядит результат таких вычислений:
Пока не обращайте внимания на слова public и static — про них мы расскажем позже. Так же можно создавать методы, похожие на main. Для них укажите модификаторы доступа (public и static), возвращаемый тип и название:
Запустив программу, мы увидим результат работы метода GetCube():
Пока всё работает в пределах основного класса, но можно создать и другие. Для наглядности мы будем делать это на примере кода мессенджера. Здесь будут использоваться классы Сообщение (Message) и Пользователь (User).
Чтобы начать работать с классами, создайте папку для своего проекта: например, 01. Добавьте в неё ещё два каталога — src и bin. В первом будут храниться исходники, а во втором — скомпилированные файлы.
Теперь скомпилировать файл можно так:
А запустить — так:
Все классы должны находиться в отдельных файлах. которые нужно объединить в пакет. Его название должно выглядеть так: com.sitename.packagename. Хотя вы можете обойтись и без домена packagename. Чтобы создать пакет, сначала в папке src создайте следующую структуру:
В нашем случае для основного файла путь будет таким:
В тот же каталог поместите User.java и Message.java. После этого в начало каждого файла добавьте такую строчку:
Она означает, что этот код относится к определённому пакету. И чтобы воспользоваться каким-то классом, нужно добавить в начало основной программы несколько команд:
Теперь можно компилировать программу с помощью команды:
Если вы всё сделали правильно, в папке bin появится такая же структура, как в src. Вот код корневого файла приложения:
Теперь этот код можно запустить, прописав такую команду:
Вот что выведет консоль:
Этот процесс можно ускорить, если скачать IDE. Там для добавления нового класса достаточно будет выполнить несколько действий в графическом интерфейсе. Например, в Eclipse можно нажать File -> new -> class — этого будет достаточно.
Объекты
Все в Java является объектом.
Вернее, очень мало чего в Java объектом не является. Например, примитивные типы. Но это скорее редкое исключение, чем правило.
Что же такое объект?
Объект — это сгруппированные вместе данные и методы для того, чтобы эти данные обрабатывать. Когда мы говорим о данных, имеем в виду переменные, конечно.
Про переменные объекта говорят, что это «данные объекта» или «состояние объекта».
Про методы объекта говорят: это «поведение объекта». Состояние объекта (переменные объекта) принято менять только с помощью методов того же объекта. Менять переменные объекта напрямую (не через методы объекта) считается дурным тоном.
У каждого объекта, как и у каждой переменной, есть тип. Этот тип определяется один раз при создании объекта и поменять его в дальнейшем нельзя. Типом объекта считается его класс.
У каждого объекта есть собственная копия переменных класса (полей класса). Если в классе была объявлена нестатическая переменная int a, и ваша программа во время работы создала 10 объектов этого класса, теперь в каждом объекте есть собственная переменная int a.
Взаимодействие с объектом
Самый удобный способ работы с объектом — сохранить ссылку на объект в переменную, и потом вызывать методы у этой переменной. Выглядит это для вас знакомо:
Где — это переменная, которая хранит в себе ссылку на объект, а метод — это метод класса объекта.
Если вы хотите обратиться к полю (переменной) объекта, то тоже нужно использовать оператор точка:
Где — это переменная, которая хранит в себе ссылку на объект, а поле — это переменная класса (поле объекта).
Такие разные реализации
Реализаций интерфейсов так много, что при желании можно организовать вполне себе упорядоченный Map и даже отсортированное множество. Пройдёмся кратко по основным классам.
Реализации List
Класс ArrayList подойдёт в большинстве случаев, если вы уже определились, что вам нужен именно список (а не Map, например).
Строится на базе обычного массива. Если при создании не указать размерность, то под значения выделяется 10 ячеек. При попытке добавить элемент, для которого места уже нет, массив автоматически расширяется — программисту об этом специально заботиться не нужно.
Список проиндексирован. При включении нового элемента в его середину все элементы с бо́льшим индексом сдвигаются вправо:
При удалении элемента все остальные с бо́льшим индексом сдвигаются влево:
Класс LinkedList реализует одновременно List и Deque. Это список, в котором у каждого элемента есть ссылка на предыдущий и следующий элементы:
Благодаря этому добавление и удаление элементов выполняется быстро — времязатраты не зависят от размера списка, так как элементы при этих операциях не сдвигаются: просто перестраиваются ссылки.
На собеседованиях часто спрашивают, когда выгоднее использовать LinkedList, а когда — ArrayList.
Правильный ответ таков: если добавлять и удалять элементы с произвольными индексами в списке нужно чаще, чем итерироваться по нему, то лучше LinkedList. В остальных случаях — ArrayList.
В целом так и есть, но вы можете блеснуть эрудицией — рассказать, что под капотом. При добавлении элементов в ArrayList (или их удалении) вызывается нативный метод System.arraycopy. В нём используются ассемблерные инструкции для копирования блоков памяти. Так что даже для больших массивов эти операции выполняются за приемлемое время.
Mutable vs Immutable объекты
Когда-то давно мы с вами изучали константы в Java и пришли к не очень утешительному выводу. Константы позволяют защитить переменные от изменений, но не в состоянии защитить от изменений объекты, на которые эти переменные ссылаются.
В ответ на эту проблему в Java придумали объекты-константы. Или, как их еще называют, immutable-объекты — неизменяемые объекты.
Кстати, вы даже знаете один такой класс, чьи объекты нельзя менять — . Объект класса остается неизменным все время после создания. И как же разработчики Java добились этого?
Во-первых, все переменные класса скрыты – объявлены .
Во-вторых, наследоваться от класса нельзя: он имеет модификатор в объявлении класса.
В-третьих, что самое интересное, все методы класса , которые по идее должны были менять существующий объект, не меняют его, а возвращают новый.
Например, метод делает все буквы строки большими (заглавными). Но вместо изменения объекта, у которого он вызван, этот метод возвращает новый объект типа , состоящий из заглавных букв:
Вот что будет в памяти после выполнения этого кода:
Так что смело передавайте ваши строки в любые методы: никто их не поменяет.
Как логические операторы работают с целыми числами
Мы уже знаем, что логические операции применимы к логическим аргументам (операндам). Каждый логический операнд — это выражение, которое является истинным (true) или ложным (false) — то есть возвращает булево значение. Иными словами, логический операнд — это выражение типа boolean.
Выходит, применять логические операторы к целочисленным аргументам нельзя?
Можно. Внутри Java все целочисленные типы представлены двоичными числами разной длины. И к ним уже применимы бинарные логические операторы ^, | и &.
Только в этом случае они работают с двоичным представлением операндов — выполняют операции над их битами попарно (рассматривая их как логические единицы и нули). Поэтому и сами операторы ^, | и & зовутся побитовыми.
Как ^, | и & работают с целочисленными операндами
Рассмотрим пример:
Чтобы повторить вычисления Java, нужно:
- Перевести значения обоих операндов в двоичную систему счисления.
- Расположить результаты перевода друг под другом.
- Сравнять в них число разрядов (дополнить лидирующими нулями).
- Применить к битам из каждого столбца оператор (&, | или ^).
- Записать результат каждой операции ниже в том же столбце.
- Перевести итог в десятичную форму.
Потренируемся: вычислим сами 3 & 5
Число 3 в двоичной системе счисления имеет вид 11, а число 5 — 101.
Так как у числа 5 три разряда в двоичной системе, а у числа 3 — всего два, добавим лидирующий ноль к числу 3 в двоичной системе и получим 011.
Берём цифры из обоих чисел и применяем к ним попарно оператор & (AND):
3(10) = 011(2) | 1 | 1 | |
& | & | & | |
5(10) = 101(2) | 1 | 1 | |
= | = | = | |
001(2) = 1(10) | 1 |
Что такое Java?
Java-это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems в 1990-х годах (позже купленной Oracle).
Понятие «объектно-ориентированный» относится к способу написания структурного кода Java, а именно: разделение кода на так называемые «классы», которые запускаются вместе, чтобы обеспечить согласованное порождение объектов. Мы обсудим это позже, но достаточно сказать, что это приводит к универсальному и организованному коду, который легко редактировать и перепрофилировать.
Java находится под влиянием C и C++, поэтому она имеет много общего с этими языками (и C#). Одним из больших преимуществ Java является то, что он «платформенно-независимый». Это означает, что код, который вы пишете на одной платформе, можно легко запустить на другой. Это называется принципом «пишем один раз, запускаем где угодно» (хотя на практике это не всегда так просто, как кажется).
Чтобы запустить и использовать Java, вам нужно три вещи:
- JDK – Java Development Kit
- JRE – Java Runtime Environment
- JVM – Java Virtual Machine
Виртуальная машина Java (JVM) гарантирует, что у ваших приложений Java есть доступ к минимальным ресурсам, необходимым для их запуска. Именно благодаря JVM программы Java так легко запускаются на разных платформах.
Лайв «Как составить резюме веб-разработчика»
29 апреля в 13:00, Онлайн, Беcплатно
tproger.ru
События и курсы на tproger.ru
Среда исполнения Java (JRE) предоставляет собой «контейнер» для всех этих элементов и кода для запуска приложения. JDK – это «компилятор», который интерпретирует сам код и выполняет его. В JDK также есть инструменты разработчика, необходимые для написания кода Java (как и следует из названия).
Хорошая новость заключается в том, что разработчикам нужно только позаботиться о загрузке JDK, поскольку он поставляется вместе с двумя другими компонентами.
Логические операторы OR, AND, XOR, NOT.
Начнем с операций OR(|), AND(&), XOR(^), NOT(!). Операторы OR, AND, XOR являются бинарными — они требуют два оператора. NOT — это унарный оператор, только один оператор участвует в операции. Результаты выполнения этих логических операций представлены в следующей таблице:
A | B | A|B | A&B | A^B | !A |
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
OR (|) — результат будет true , если хотя бы одно значение равно true . Пример: для того, чтобы забрать ребенка из садика, должна прийти либо мать, либо отец, либо оба — в любом случае результат будет положительный. Если же никто не придет, ребенка не заберут — результат будет отрицательный.
AND (&) — результат будет true , только если и A, и B равны true . Пример: для того чтобы свадьба состоялась, и невеста (A) и жених (B) должны явиться на бракосочетание, иначе оно не состоится.
XOR (^) — результат будет true , только если или A равно true , или В равно true . Пример: у двух друзей на двоих один велосипед, поездка на велосипеде состоится только если один из них поедет на нем. Вдвоем они ехать не могут.
NOT (!) — инвертирование значения. Если значение было true, то станет false , и наоборот.
Рассмотрим пример использования логических операторов: