1 © Luxoft Training 2012 Примитивные типы и операторы Модуль #5.

Презентация:



Advertisements
Похожие презентации
©ρŧą Базовые конструкции языка.
Advertisements

Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Тема: Управление потоком в PHP Изучить возможности языка PHP при решении задач, требующих использования условного оператора. Рассмотреть примеры управления.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Типы данных Инна Исаева. Переменные Переменная - это как ящик, в котором можно хранить данные. Каждая переменная имеет своё имя, она служит для хранения.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx в IDE Code Composer Studio Часть II. Язык программирования С. Основные понятия.
Данные в программах и алгоритмах Программы и их алгоритмы пишутся для обработки данных. Чтобы реализовать алгоритм, программам необходимо работать с данными.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
1 ©Павловская Т.А. Язык С# Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Переменные, величины Переменные, величины Типы, имена переменных Типы, имена переменных Хранение величин Хранение величин Переменные, величины Переменные,
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
b5_java_s4
Основы языка Pasсal.
Лекция 2 С => C++ => C# Большие и маленькие буквы различаются (main, Main, MAIN, mAin – разные имена) После каждого оператора ставится точка с запятой.
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
Лекция 30. Преобразования типов в C++ Красс Александр СПбГУ ИТМО, 2009.
Транксрипт:

1 © Luxoft Training 2012 Примитивные типы и операторы Модуль #5

2 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

3 © Luxoft Training 2012 Типы данных Условно, все типы данных можно разделить на 2 типа: Примитивные (базовые) Объектные (ссылочные) Внимание! Массивы (в т.ч. массивы примитивов), перечисления и строки являются объектами

4 © Luxoft Training 2012 Примитивные типы данных Примитивный тип данных – тип данных, предоставляемый языком программирования как базовая, встроенная единица языка. boolean (логический тип) char (символьный тип) byte, short, int, long (целый тип) float, double (вещественный тип)

5 © Luxoft Training 2012 Примитивные типы данных Особенности примитивных типов: Простые типы Зарезервированные ключевые слова языка Значения типов передаются по значению int i = 5; int j = i; j++; // j => 6, i => 5

6 © Luxoft Training 2012 Примитивные типы данных Разные примитивы имеют разное битовое представление, их размер строго определен спецификацией Java. Внимание! В отличии от примитивных типов других языков, примитивные типы Java имеют фиксированный размер, что, отчасти, вызвано принципом «Write once, run anywhere» byte 8 int 32 float 32 char 16 short 16 long 64 double 64 bits

7 © Luxoft Training 2012 Логический примитивный тип Тип boolean может принимать только 2 значения: true или false Фактический размер может варьироваться в различных JVM. boolean b1 = true; boolean b2 = false; Внимание! boolean не может быть приведен ни какому типу. Обратное тоже верно.

8 © Luxoft Training 2012 Целые примитивные типы Типы данных byte, short, int, long являются знаковыми – значения этих типов могут быть положительными, отрицательными и 0. Тип Размер Минимум Максимум byte short int long 8 bits 16 bits 32 bits 64 bits ?

9 © Luxoft Training 2012 Целые примитивные типы Типы данных byte, short, int, long являются знаковыми – значения этих типов могут быть положительными, отрицательными и 0. Тип Размер Минимум Максимум byte short int long 8 bits 16 bits 32 bits 64 bits -2^72^ ^152^15 – 1 -2^312^ ^632^63 - 1

10 © Luxoft Training 2012 Вещественный примитивный тип Тип Размер Минимум float32 bits+/ ^-45 double64 bits+/ ^-324 Максимум +/ ^+38 +/ ^+308 float double

11 © Luxoft Training 2012 Вещественный примитивный тип Тип Знак Мантиса Экспонента float1 bit double1 bit 23 bits 52 bits 8 bits 11 bits +/-m * 2^e, где m – мантисса, е - экспонента Стандарт IEEE-754

12 © Luxoft Training 2012 Символьный тип Тип char представляет символом unicode, занимает 16 бит и является без знаковым (unsigned) Тип Размер Минимум Максимум char16 bits0 2^ Unicode это объединение десятков кодировок символов, он включает в себя латинский, греческий, арабский алфавиты, кириллицу и многие другие наборы символов.

13 © Luxoft Training 2012 Символьный тип Код – 4 цифры в 16-ичном формате Так же можно указывать специальный escape character: \n новая строка \r возврат \t табуляция \b бэкспэйс \' одинарная кавычка \'' двойная кавычка \\ обратный слэш

14 © Luxoft Training 2012 Примитивные типы данных Литерал – запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералы не могут быть изменены в тексте программы. Литералы представляют собой константы, непосредственно включаемые в текст программы. Типы литералов:- строковые - логические - числовые - null -литерал

15 © Luxoft Training 2012 Примитивные типы данных Единственно допустимые литералы для типа boolean – значения true или false. Символьный литерал задается в одинарных кавычках. char c = 'w' Строковый литерал задается в двойных кавычках String s = www Символ Unicode можно указывать в формате char c1 = '\u4567'

16 © Luxoft Training 2012 Использование примитивных типов Использование любого типа данных включает в себя 2 этапа: Декларация переменной (объявление). Инициализация переменной некоторым значением. int foo, bar, baz; foo = bar = baz = 10;

17 © Luxoft Training 2012 Использование целых типов Целочисленным типам могут быть присвоены значения целочисленных литералов. Значение может быть задано в 10-ичном (по умолчанию), в 16-ричном (префикс 0x или 0X) и 8-ричном (префикс 0), в 2-ичном (префикс 0b) x1c 0X1C 0X1c 0b1101

18 © Luxoft Training 2012 Использование целых типов Начиниая с Java 7 можно использовать подчеркивание: 1_000_000_000_ _456_ _232_323_232

19 © Luxoft Training 2012 Примитивные типы данных По умолчанию целочисленный литерал типа int. Для того, что указать значение типа long, необходимо указать суффикс l или L. long val = 10L;

20 © Luxoft Training 2012 Примитивные типы данных Инициализация вещественной переменной: Десятичная точка Буквы e и E4.23E+21 Суффикс f и F1.828f Двоичная форма 0xFFFFFF Суффикс d и D1234d

21 © Luxoft Training 2012 Зайдите на страницу практики luxoft-java.com:4730 в секцию Java Basics и рассмотрите пример «Примитивы 1». Попробуйте откомпилировать примеры кнопкой Compile and Run Java, объясните результаты. Упражнение

22 © Luxoft Training 2012 Строковый тип данных Строка – последовательность символов unicode, строка в литеральном представлении заключается в. Класс – java.lang.String. Не то же, что массив символов. Никаких нулевых символов в конце, длина хранится отдельно.

23 © Luxoft Training 2012 Строковый тип данных Строковые литералы: String zeros = \u0000\u0000; String hello = Hello; String specialChars = \r\n\t\\\; String unicodeEscape = \u0101u\2134 Создание из массива символов: char[] chars = {'a', 'b', 'c'}; String str = new String(chars);

24 © Luxoft Training 2012 Доступ к содержимому строки int length() char charAt(int index) char[] toCharArray() String subString(int beginIdx, int endIdx)

25 © Luxoft Training 2012 Сравнение строк Оператор == сравнивает ссылки, а не содержимое строк. boolean equals(Object obj) boolean equalsIgnoreCase(Object obj) int compareTo(String str) int compareToIgnoreCase(String str)

26 © Luxoft Training 2012 Операции Строки неизменяемы. boolean startsWith(String prefix) boolean endsWith(String suffix) int indexOf(String str) int lastIndexOf(String str)

27 © Luxoft Training 2012 Операции String trim() String replace(char oldChar, char newChar) String toLowerCase() String toUpperCase() String[] split(String regexp)

28 © Luxoft Training 2012 Конкатенация строк String concat(String str) Оператор + String str1 = Hello +, World! String str2 = 3 +, World! + 10; Внимание! Для конкатенации строк обычно используется StringBuilder.

29 © Luxoft Training 2012 Упражнение Зайдите на страницу практики luxoft-java.com:4730 в секцию Java Basics и выполните упражнение «Работа со строками» Инициализировать строку значением «Иван Иванович Иванов» или «Александр Сергеевич Пушкин». Программа должна работать с любым ФИО. Вывести по очереди имя, отчество и фамилию: 1. Без использования метода split() 2. С использованием метода split() Также вывести количество букв в фамилии.

30 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

31 © Luxoft Training 2012 Типы инициализации полей объектов и классов Название Применимость Описание Инициализация в месте объявления поля Инициализационный блок Конструктор класса Поля класса, Поля объекта Поля класса, Поля объекта Применяется, если инициализация может быть произведена коротким выражением и доступен контекст Применяется, код неудобно записывать одним выражением. Применяется, если для инициализации нужны параметры конструктора Значение по умолчанию, а так же явное значение свойств объекта присваивается перед выполнением конструктора. Значение по умолчанию, а так же явное значение свойств класса ( static свойств), присваивается при загрузке класса.

32 © Luxoft Training 2012 Инициализация по умолчанию Если при декларации переменной класса или объекта ей не было присвоено значение, JVM присваивает значение по умолчанию. Это справедливо и для примитивов и для объектов. Тип Начальное значение byte 0 int 0 float 0.0f char '\u0000' Тип Начальное значение short 0 long 0L double0.0d boolean false

33 © Luxoft Training 2012 Инициализация по умолчанию

34 © Luxoft Training 2012 Инициализация переменных JVM не присваивает значение по умолчанию для локальных переменных. «Variable XXX may not have been initialized» Внимание! Однако, если компилятор может определить, что блок выполняется всегда, он допускает подобную инициализацию

35 © Luxoft Training 2012 Инициализация в статическом блоке static int a = 10; static List alphabet; static { alphabet = new ArrayList (); for (char c = 'a'; c <= 'z'; c++) { alphabet.add(c); } Инициализация статических полей и статические блоки выполняются в порядке их объявления.

36 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

37 © Luxoft Training 2012 Типы данных Есть два типа преобразований данных: Конвертация типов Привидение типов Type1 v1; // Type 1 - примитив Type2 v2; // Type 2 - примитив v1 = v2; //???

38 © Luxoft Training 2012 Типы данных Т ипы Type1 и Type2 известны при компиляции. Все конвертации примитивов происходят во время компиляции программы.

39 © Luxoft Training 2012 Типы данных Присваивания Вызова метода Арифметических переводов Конвертация примитивных типов может возникать во время:

40 © Luxoft Training 2012 Типы данных Возможна ситуация, когда значение данного типа не помещается в присваиваемом типе ( Происходит ошибка компиляции) : Конвертация при присваивании ( i конвертируется в double и принимает) значение

41 © Luxoft Training 2012 Типы данных boolean НЕ может быть конвертирован к другому типу данных. Не- boolean может быть конвертирован к другому не- boolean, если конвертация расширяющая. Не- boolean НЕ может быть конвертирован к другому не- boolean типу, если конвертация сужающая.

42 © Luxoft Training 2012 Примитивные типы данных Схема расширяющего преобразования: byte short char int long float double Все прочие преобразования являются сужающими.

43 © Luxoft Training 2012 Примитивные типы данных По умолчанию числовой литерал это значение типа int или double. Следующие возможно: byte b = 1; short s = 2; char c = 3; float а = 1.234; // Ошибка Внимание! Компилятор выполняет проверку литерала, и если он попадает в диапазон допустимых значений типа, разрешает присваивание

44 © Luxoft Training 2012 Примитивные типы данных Конвертация примитивов также может происходить при вызове метода: { float а = 2.34f; Math.cos(f); } public void cos(double d) {…} Внимание! Правила конвертации при вызове метода те же, что и при присваивании

45 © Luxoft Training 2012 Примитивные типы данных Арифметический перевод возникает при вычислении выражения, в котором участвуют значения различных типов данных:

46 © Luxoft Training 2012 Примитивные типы данных Если операнд типа byte, short или char, он конвертируется к int перед выполнением операции (если операция не ++ или --, иначе конвертация не происходит) Внимание! Во всех остальных случаях конвертация не происходит Для унарных операторов:

47 © Luxoft Training 2012 Примитивные типы данных Если один операнд – double, второй конвертируется в double Для бинарных операторов: Если один операнд – float, второй конвертируется в float Если один операнд – long, второй конвертируется в long Иначе оба конвертируются в int

48 © Luxoft Training 2012 Примитивные типы данных Преобразование (cast) – явное указание компилятору производить преобразование типов. Тип, к которому производится преобразование заключается в (): double d = 5; int i = (int)d; Cast необходим, когда выполняются сужающие преобразования. Cast – указание компилятору «Я инженер, я знаю, что я делаю»

49 © Luxoft Training 2012 Примитивные типы данных Преобразование (cast) примитивов. Внимание! Нельзя преобразовывать boolean к любому другому типу

50 © Luxoft Training 2012 Зайдите на страницу практики luxoft-java.com:4730 в секцию Java Basics и рассмотрите пример «Примитивы». Попробуйте откомпилировать примеры кнопкой Compile and Run Java, объясните результаты. Упражнение

51 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

52 © Luxoft Training 2012 Массивы Массив – упорядоченная коллекция примитивов, объектных ссылок или других массивов Java массивы гомогенны – массивы должны содержать элементы одинакового типа a[0]a[1]a[2]a[..]a[n-2]a[n-1]a[n]

53 © Luxoft Training 2012 Массивы Для того, чтобы создать и использовать массив необходимо выполнить 3 стадии: Декларация Конструирование Инициализация int[] ints; Dimension dims[]; float[][] twoDee;

54 © Luxoft Training 2012 Массивы Размер массива указывается в runtime int[] ints; ints = new int[25]; // declaration // runtime construction Размер можно специфицировать переменной int size = 1152 * 900; int[] raster; raster = new int[size]; Декларация и конструирование могут быть объеденены int[] raster = new int[size]; Внимание! После того как массив сконструирован, его элементам автоматически присваивается значение по умолчанию

55 © Luxoft Training 2012 Массивы Массив можно инициализировать литералами Массив можно инициализировать явно long[] diameters = new long[6000]; long[10] = 1; long[30] = 42; Массив java объект! float[] diameters = {1.1f, 2.2f, 3.3f};

56 © Luxoft Training 2012 Массивы Размер массива можно получить с помощью свойства length. long[] squares = new long[6000]; for (int i = 0; i < squares.length; i++) { squares[i] = i * i; } Массивы могут быть многомерные. int[][] myInts = new int[3][4];

57 © Luxoft Training 2012 Размерность массива Внимание! Подчиненные массивы необязательно должны иметь одинаковую длину

58 © Luxoft Training 2012 Размерность массива int[][] myInts = { {1,2,3}, {91,92,93,94}, {2001, 2002}} int[] replacement = {1,2,3,4,5,6,7,8,9,10,11,12}; myInt s[1] = replacement;

59 © Luxoft Training 2012 Упражнение Выполните упражнение «массивы» из блока Java basics.

60 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

61 © Luxoft Training 2012 Garbage collection Объекты создаются в куче с помощью оператора new и могут занимать значительный оъем памяти MyClass mc = new MyClass(); Во многих языках программирования память под выделенный объект освобождается явно: Освободив память слишком рано, можно привести к порче данных Можно забыть освободить память Внимание! В Java память никогда не освобождается явно, этим процессом занимается garbage collector Можно дважды отчистить память

62 © Luxoft Training 2012 Garbage collection Внимание! В Java память никогда не освобождается явно, этим процессом занимается garbage collector Сборщик мусора – процесс демон. Cборка мусора – это освобождение памяти, путем удаления объектов, которые уже не будут востребованы приложением.

63 © Luxoft Training 2012 Алгоритмы сборки мусора Подсчет ссылок Трассирующие сборщики мусора Маркирующе-зачищающие сборщики Копирующие сборщики мусора Маркирующе-сжимающие сборщики мусора Сборка на основе поколений Внимание! В Java одновременно работает 5 сборщиков мусора

64 © Luxoft Training 2012 Garbage collection Метод finalize() класса Object вызывается у объекта перед его освобождением. Вызов этого метода не гарантируется. Обезателен вызов finalize() базового класса при public void finalize() { super.finalize();... }

65 © Luxoft Training 2012 Garbage collection Спецификация Java не отвечает на вопрос когда вызывается Garbage Collector. Программный вызов: System.gc();Runtime.getRuntime().gc() ; Внимание! Нет гарантии что вызов этих методов приведет к сборке мусора, это лишь подсказка для JVM.

66 © Luxoft Training 2012 Garbage collection

67 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

68 © Luxoft Training 2012 Передача параметров Существует два способа передачи параметров в метод: Передача параметра по значению Передача параметра по ссылке При передаче аргументов в Java создается копия аргумента (верно и для примитивов и для объектов).

69 © Luxoft Training 2012 Передача объектной ссылки Работа с объектом в Java всегда ведется через ссылку Button b = new Button(Ok); Передача b создает копию ссылки. Возможно изменить состояние объекта b через ссылку. При передаче в метотод изменить значение оригинальной ссылки невозможно.

70 © Luxoft Training 2012 Передача объектной ссылки Внимание! Cкопировать и передать ссылку – не затратнай операция.

71 © Luxoft Training 2012 Передача объектной ссылки Необходимо помнить это при передаче массива, т.к. массив – это объект!

72 © Luxoft Training 2012 Параметер final Модификатор final указывает, что значение переменной не может быть модифицировано после присваивания. Разумно всегда декларировать аргумент метода как final.

73 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

74 © Luxoft Training 2012 Операторы в Java Внимание! Перед выполнением операндов, JVM должна вычислить значения операндов. Вычисление происходит слева направо.

75 © Luxoft Training 2012 Порядок вычисления операндов Вначале вычисляется a[b]. Затем выполняется присваивание.

76 © Luxoft Training 2012 Порядок вычисления операндов Операторы Java могут иметь один, два и три операнда, соответственно выделяют: Унарные операторы Бинарные операторы Тернарные операторы

77 © Luxoft Training 2012 Унарные операторы Унарный оператор выполняет работу только над одним операндом Инкремент и декремент ( ++ и -- ) Унарный плюс и минус ( + и - ) Побитовая инверсия ( ~ ) Логическое отрицание ( ! ) Привидение типа ( '()' )

78 © Luxoft Training 2012 Унарные + и – x = 3; y = +3; z = (y + 6); Необходимо помнить, что при выполнении операции производится arithmetic promotion.

79 © Luxoft Training 2012 Оператор + cо строками Оператор кроме числовых типов применим к типу String Если операнд – объект, у него вызывается метод toString(), который возвращает строковое представление объекта. Если значение операнда – null, то строкаnull

80 © Luxoft Training 2012 Оператор + со строками

81 © Luxoft Training 2012 Битовые инверсии Унарный оператор ~ производит инвертирование битового представления операнда. ~ = Применяется для целочисленных типов. Используется совместно с операторами сдвига.

82 © Luxoft Training 2012 Логическая инверсия Унарный оператор ! Инвертирует значение boolean выражения. !true = false !false = true Количество инверсий неограничено. !!!!!!!!!!false = false

83 © Luxoft Training 2012 Оператор cast Оператор cast используется для явного преобразования типов. Существуют ограничения на преобразуемые типы. Нельзя приобразовать ссылку в примитив. Также не всегда можно преобразовать один объектный тип в другой. int с = (int)(Math.PI * diameter)

84 © Luxoft Training 2012 Оператор умножения в java Операторы * и / производят умножение и деление. Целочисленное деление на 0 возбуждает ArithmethicException. Ситуация, когда результат * превышает максимальную размерность результирующего типа называется overflow. Ситуация, когда целочисленное деление приводит к потере дробной части результата называется underflow.

85 © Luxoft Training 2012 Оператор в java

86 © Luxoft Training 2012 Оператор % в java Оператор % возвращает остаток от деления первого операнда на второй. Оператор % может быть применен к целочисленным и и вещественным типам. Знак результата совпадает со знаком левого операнда. Оператор возбуждает ArithmethicException при делении на 0.

87 © Luxoft Training 2012 Оператор % в java 17 % 5 17 – – – < 5, поэтому 17 % 5 = 2 21 % 7 21 – – – < 7, поэтому 21 % 7 = % – – < 2.9, поэтому 7.6 %2.9 = % 2 уменьшая абсолютное значение на 2, мы должны добавлять |– 1 |= 1 и 1 < 2, поэтому -5 % 2 = % -2 уменьшая абсолютное значение -5 абсолютным значением -2, которое есть 2 -5 – (-2) – (-2) -1 и опять 1 < 2, поэтому -5 % -2 = -1

88 © Luxoft Training 2012 Операторы сравнения Операторы сравнения применимы ко всем числовым типам данных.

89 © Luxoft Training 2012 Операторы instanceof Оператор instanceof тестирует класс объекта в runtime. Левый операнд – ссылка на произвольный объект. Правый операнд – класс, интерфейс или массив. Внимание! Более подробно данный оператор рассмотрен в разделе Классы и объекты Object o = new String(aaa); if (o instanceof String) { System.out.println(It's a String); }

90 © Luxoft Training 2012 Операторы сравнения == и != Операторы == и != проверяют операнды наравенство Для примитивов – сравнение по значению Для объектов происходит сравнение ссылок Для сравнения объектов необходимо переопределить метод equals(). Внимание! Метод equals() рассматривается в модуле ООП в Java

91 © Luxoft Training 2012 Операторы сравнения == и !=

92 © Luxoft Training 2012 Битовые операторы Битовые операторы & (битовое и), ^ (или) и | (исключающее или) применимы к целочисленным типам данных. Битовая операция вычисляет соответствующий бит базируясь но соответствующих битах операндов

93 © Luxoft Training 2012 Операторы сдвига Операторы сдвига ( >, >> ) применяются к целочисленным типам данных Второй операнд показывает количество разрядов, на которое нужно осуществить сдвиг в двоичном представлении. Сдвиг влево на разрядов эквивалентен умножению на, а сдвиг вправо - делению на то же число 128 << 1 // 128 * 2^1 = << 2 // 16 * 2^2 = 64

94 © Luxoft Training 2012 Операторы сдвига Логический и арифметический сдвиги:

95 © Luxoft Training 2012 Булевы операторы Операторы сравнения и битовые операторы ( &, ^, | ) применимы и к операндам типа boolean. true трактуется как 1, false как 0.

96 © Luxoft Training 2012 Булевы операторы Операторы && и || применимы только к операндам типа boolean. Операторы && и || возвращают результат досрочно на основе значения первого операнда, не вычисляя значение второго операнда.

97 © Luxoft Training 2012 Булевы операторы Необходимо проверить, что значение ссылки не null. Можно переписать в короткой форме.

98 © Luxoft Training 2012 Булевы операторы Необходимо помнить о побочных эффектах: значение правого операнда вычисляется не всегда:

99 © Luxoft Training 2012 Тернарный оператор Оператор ?: есть более короткая форма условия if-else. Вначале вычисляется значение слево от ?, если оно true, то результат всего выражения – значение слева от :, если false – значение выражения справа. Внимание! Применять тернарный оператор нужно для повышения читаемости кода.

100 © Luxoft Training 2012 Оператор присваивания Является оператором самого низкого приоритета. Оператор = присваивает значение выражения, стоящего справа переменной, стоящей слева от знака =. Группа операторов присваивания вида operation= *=, +=, -= и т.д. Неявное x operation= y производит неявное преобразование результата operation к типу переменной. byte x = 2; x += 3; // Допустимо byte x1 = 2; x1 = x1 + 3; // Error: Type mismatch x1 = (byte)(x1 + 3); // Необходим явный cast

101 © Luxoft Training 2012 Примеры int i = 2_000_000_000; long j = 10_000_000_000L; long k = i j; k /= i;

102 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

103 © Luxoft Training 2012 Структурное программирование Программа представляет собой структуру, построенную из трех типов базовых конструкций: Последовательное исполнение Однократное выполнение операции в том порядке, в котором они записаны в тексте программы. Ветвление Однократное выполнение одной из двух или более операций, В зависимости от выполнения некоторого заданного условия. Цикл Многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое условия (условие продолжения цикла) Внимание! Контроль потока выполнение также осуществляется с помощью исключений.

104 © Luxoft Training 2012 Контроль потока выполнения Конструкция if/else принимает boolean выражение. Если выражение вычисляется как true, выполняется блок if, если как false, то выполняется блок else.

105 © Luxoft Training 2012 Контроль потока выполнения Конструкция if/else принимает boolean выражение. Если выражение вычисляется как true, выполняется блок if, если как false, то выполняется блок else. Существует уточняющая конструкция ( else if ).

106 © Luxoft Training 2012 Контроль потока выполнения В случае, если необходимо осуществить более, чем 1 выбор используется конструкция switch/case.

107 © Luxoft Training 2012 Контроль потока выполнения Выражение выбора должно быть одно из типов: byte, short, char, int или String (Java 7). Выражения case должны быть константами или константными выражениями т.е. могут быть вычислены в процессе компиляции. Выражение default может быть помещено в любом месте switch, однако логичнее размещать в конце. Компилятор строит специальную хэш-таблицу, позволяющую осуществить быстрый поиск. Внимание! После выполнения case блока происходит выплнение последующих блоков. Для того чтобы это продотвратить нужно использовать break.

108 © Luxoft Training 2012 Контроль потока выполнения

109 © Luxoft Training 2012 Цикл while while ( ){ } В отличие от C, конструкция while в Java принимает только boolean выражение в качестве условия. statement_or_block будет выполняться, пока boolean_condition равно true. Внимание! Условие вычисляется на каждой итерации.

110 © Luxoft Training 2012 Цикл do-while do { } while ( ); Выполнение цикла прерывается, когда boolean_condition вычисляется в false. Внимание! Первая итерация выполняется всегда

111 © Luxoft Training 2012 Цикл for for ( ; ; ) Выражение init_expr выполняется один раз сразу после начала работы for. text_expr должно быть boolean и вычисляется на каждой итерации. alter_expr выполняется сразу после первой итерации и на всех последующих, до того как проверяется test_expr. for (int x = 0; x < 10; x++){ System.out.println(Value is + x); }

112 © Luxoft Training 2012 Цикл for Любая часть цикла for може быть опущена. Отсутствие test_expr эквивалентно константной величине true. Цикл который не имеет условия выхода for(;;) { } init_expr и alter_expr может содержать несколько выражений, разделенных запятой.

113 © Luxoft Training 2012 Цикл for Нельзя смешивать выражение и декларацию, а также иметь декларации разного типа.

114 © Luxoft Training 2012 Цикл foreach В Java 5 был представлен расширенный цикл for, позволяющий итерировать массивы и коллекции.

115 © Luxoft Training 2012 Контроль потока выполнения Иногда необходимо прервать выполнение тела цикла, или нескольких вложенных циклов. Выражение break прерывает выполнение текущего блока кода (например цикла). Выражение continue прерывает выполнение текущей итерации цикла, после чего возможно выполнение последующих итераций данного цикла.

116 © Luxoft Training 2012 Контроль потока выполнения

117 © Luxoft Training 2012 Модуль 5 Примитивные типы Декларация переменных и их инициализация Приведение примитивных типов Массивы Garbage collector Параметры методов Операторы в Java Контроль потока выполнения

118 © Luxoft Training 2012 Упражнение Выполните упражнение «Калькулятор» из блока Java basics.