Скачать презентацию Лекция 2 Синтаксис Java Лекции по Java SE Скачать презентацию Лекция 2 Синтаксис Java Лекции по Java SE

02-Java_Basics.pptx

  • Количество слайдов: 61

Лекция 2. Синтаксис Java Лекции по Java SE Максим Букасов, киевский учебный центр Net. Лекция 2. Синтаксис Java Лекции по Java SE Максим Букасов, киевский учебный центр Net. Cracker © 2013 Net. Cracker Technology Corporation Confidential

План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и Java. Doc-комментарии Зарезервированные слова Идентификаторы и соглашения о записи имен Типы данных и литералы Объявление переменных • Операторы ‒ ‒ Приоритет операторов Арифметические операторы Логические операторы Приведение типов • Управление потоком выполнения ‒ Ветвления ‒ Циклы • Массивы © 2013 Net. Cracker Technology Corporation Confidential 2

Основы синтаксиса – Кодировка • Unicode • UTF-8 ‒ 1 символ = 1. . Основы синтаксиса – Кодировка • Unicode • UTF-8 ‒ 1 символ = 1. . 6 байт • UTF-16 ‒ 1 «обычный» символ = 2 байта ‒ редкие символы представляются суррогатными парами • UTF-32 ‒ 1 символ = 4 байта • Java • UTF-16 в памяти ВМ • UTF-8 на диске (. java и. class- файлы) Обработка Unicode-строк – вещь сложная. Не делайте этого «в ручную» . Используйте стандартные библиотеки! © 2013 Net. Cracker Technology Corporation Confidential 3

Основы синтаксиса – Пробельные символы • Пробел • Табуляция • Перевод строки Пример программы Основы синтаксиса – Пробельные символы • Пробел • Табуляция • Перевод строки Пример программы с хорошо расставленными пробелами: public class Hello. World { public static void main (String[] args) { System. out. println ("Hello World!"); } } Пример программы с плохо расставленными пробелами: public class Hello. World {public static void main (String[] args){System. out. println("Hello World!"); }} © 2013 Net. Cracker Technology Corporation Confidential 4

Основы синтаксиса – Комментарии • Одна строка //. . . • Несколько строк /*. Основы синтаксиса – Комментарии • Одна строка //. . . • Несколько строк /*. . . */ • Javadoc /**. . . */ public class Hello. World { /** * Some information about this method. * You can use HTML and some special tags: * @param args the command line arguments */ public static void main(String[] args) { // One-line comment System. out. println("Hello, World!"); // Another one-line comment /* Multi-line comment System. out. println("Здравствуй, Мир!"); System. out. println("АААААААААА!"); */ } } © 2013 Net. Cracker Technology Corporation Confidential 5

Основы синтаксиса – Зарезервированные слова • Ключевые слова abstract char double for int private Основы синтаксиса – Зарезервированные слова • Ключевые слова abstract char double for int private strictfp throws assert (1. 4) boolean class else goto interface protected super transient enum (1. 5) break const extends if long public switch try byte continue final implements native return synchronized void case default finally import new short this volatile catch do float instanceof package static throw while • Литералы true false © 2013 Net. Cracker Technology Corporation Confidential null 6

Основы синтаксиса – Идентификаторы • Идентификатор ‒ ‒ ‒ может состоять из букв, цифр, Основы синтаксиса – Идентификаторы • Идентификатор ‒ ‒ ‒ может состоять из букв, цифр, символов $ и _ (знак подчеркивания) не может начинаться с цифры должен отличаться от зарезервированных слов может иметь произвольную длину может содержать произвольные символы Unicode • Допускается, но не рекомендуется ‒ использовать символ $ (этот символ используется в служебных идентификаторах) ‒ использовать символ подчеркивания (исключение – обозначение констант, например, MAX_LENGTH) ‒ использовать слишком длинные идентификаторы (снижает читаемость) ‒ использовать символы отличные от ASCII (снижает читаемость; затрудняет использование на системах с отличающейся локализацией) • Заглавные и строчные буквы различаются! ‒ Name ≠ name © 2013 Net. Cracker Technology Corporation Confidential 7

Основы синтаксиса – Соглашения о записи имен • Пакеты ‒ все буквы строчные ‒ Основы синтаксиса – Соглашения о записи имен • Пакеты ‒ все буквы строчные ‒ package helloworld; • Классы и интерфейсы ‒ c заглавной буквы ‒ каждое следующее слово с заглавной буквы ‒ class String {. . . }, class Hello. World{}, interface Runnable {. . . } • Методы, поля, переменные ‒ с маленькой буквы ‒ каждое следующее слово с заглавной буквы ‒ public static void main(String[] args) {. . . } ‒ public void do. Something() {. . . } ‒ int my. New. Variable; • Константы ‒ все буквы заглавные ‒ слова разделяются знаком подчеркивания ‒ MAX_LENGTH, MIN_DOUBLE © 2013 Net. Cracker Technology Corporation Confidential 8

Основы синтаксиса – Типы данных • Примитивные ‒ ‒ ‒ ‒ byte short char Основы синтаксиса – Типы данных • Примитивные ‒ ‒ ‒ ‒ byte short char int long float double boolean • Ссылочные (ссылка на объект в динамической памяти) ‒ все остальное Java – строго типизированный язык ‒соответствие типов проверяется на этапе компиляции В Java отсутствует возможность прямого обращения к памяти и адресная арифметика © 2013 Net. Cracker Technology Corporation Confidential 9

Основы синтаксиса – Примитивные типы данных Целочисленные типы данных Название типа byte short int Основы синтаксиса – Примитивные типы данных Целочисленные типы данных Название типа byte short int long char Размер байты биты 1 8 2 16 4 32 8 64 2 16 Область значений -27. . 27 -1 -215. . 215 -1 -231. . 231 -1 -263. . 263 -1 0. . 216 -1 -128. . 127 -32 768. . 32 767 -2 147 483 648. . 2 147 483 647 -9 223 372 036 854 775 808. . 9 223 372 036 854 775 807 'u 0000'. . 'uffff' ( 0. . 65 535) Дробные типы данных Название типа float double Название типа boolean Размер байты биты 4 32 8 64 Область значений ± 3. 40282347*1038. . ± 1. 40239846*10 -45 ± 1. 79769313486231570*10308. . ± 4. 94065645841246544*10 -324 Булевский (логический) тип данных Область значений true, false © 2013 Net. Cracker Technology Corporation Confidential 10

Основы синтаксиса – Ссылочный тип • В Java все объекты находятся в динамически выделяемой Основы синтаксиса – Ссылочный тип • В Java все объекты находятся в динамически выделяемой памяти (heap) ‒ невозможно создать объект в стэке • Доступ к объектам осуществляется только с помощью ссылок (reference) ‒ объектного типа нет; есть только ссылки на объекты в куче • Специальное значение null говорит о том, что ссылка не связана ни с одним объектом • Отличия ссылок в Java от указателей в С/С++ ‒ В Java отсутствует адресная арифметика (с помощью ссылки невозможно обратиться к предыдущему или следующему объекту в памяти). ‒ В Java ссылки работают только для объектов. Невозможно создать ссылку на переменную примитивного типа или функцию. ‒ В Java невозможно преобразовать ссылку в значение примитивного типа или наоборот. © 2013 Net. Cracker Technology Corporation Confidential 11

Основы синтаксиса – Литералы • целочисленный (integer) • с плавающей точкой (floating-point) • булевый Основы синтаксиса – Литералы • целочисленный (integer) • с плавающей точкой (floating-point) • булевый (boolean) • символьный (character) • строковый (string) • null-литерал (null-literal) © 2013 Net. Cracker Technology Corporation Confidential 12

Основы синтаксиса – Целочисленные литералы • По умолчанию применяется десятичная система исчисления ‒ для Основы синтаксиса – Целочисленные литералы • По умолчанию применяется десятичная система исчисления ‒ для типа long в конце буква ‘l’ или ‘L’ (лучше ‘L’) • Шестнадцатеричная система исчисления ‒ используются символы 0. . 9, a. . f, A. . F ‒ начинается с ‘ 0 x’ или ‘ 0 X’ ‒ регистр значения не имеет • Восьмеричная система исчисления ‒ используются символы 0. . 7 ‒ начинается с ‘ 0’ byte b = 12; short s = 32000; int n = 100000; int oct = 0123; // запись числа в восьмеричном виде. ЭТО НЕ 123 !!! int hex = 0 x. CAFE; // запись числа в шестнадцатеричном виде int hex 2 = 0 XBe. Da; int max. Integer = 2147483647; long bad. Long = 300000; // Ошибка компиляции : integer number too large long good. Long = 300000 L; // А так гораздо лучше long small. L = 300000 l; // букву ‘L’ легко можно перепутать с единицей © 2013 Net. Cracker Technology Corporation Confidential 13

Основы синтаксиса – Целочисленные литералы JDK 7+ Начиная с версии 7: • Двоичная система Основы синтаксиса – Целочисленные литералы JDK 7+ Начиная с версии 7: • Двоичная система исчисления ‒ используются символы 0, 1 ‒ начинается с ‘ 0 b’ или ‘ 0 B’ (регистр значения не имеет) • Разделитель разрядов для длинных чисел ‒ в любом месте в середине числа можно вставить символ ‘_’ для повышения читаемости int binary = 0 b 01011010; int million = 1_000_000; long billion = 1_000_000 L; long trillion = 1_000_000_000 L; © 2013 Net. Cracker Technology Corporation Confidential 14

Основы синтаксиса – Литералы с плавающей точкой • Используется десятичная система исчисления • По Основы синтаксиса – Литералы с плавающей точкой • Используется десятичная система исчисления • По умолчанию подразумевается двойная точность (тип double) ‒ для double суффикс ‘d’/’D’ можно не указывать ‒ для float нужно в явном виде указывать ‘f’ или ‘F’ double pi=3. 14159265359; // По умолчанию double e=2. 7182846 d; // 'd' на конце ни на что не влияет double speed. Of. Light = 3 e 8; // 'научный формат': = 3 * 10^8 float bad. Float = 1. 0; // Ошибка компиляции cannot convert from double to float good. Float = 1. 0 f; © 2013 Net. Cracker Technology Corporation Confidential 15

Основы синтаксиса – Булевы литералы • true или false ‒ именно в нижнем регистре! Основы синтаксиса – Булевы литералы • true или false ‒ именно в нижнем регистре! TRUE или False – ошибка! boolean to. Be. Or. Not. To. Be = true; boolean i. Always. Lie = false; © 2013 Net. Cracker Technology Corporation Confidential 16

Основы синтаксиса – Символьные литералы • Один символ в одинарных кавычках • Для записи Основы синтаксиса – Символьные литералы • Один символ в одинарных кавычках • Для записи специальных символов используются спец. последовательности: b t n f r " ' \ ооо u 0008 u 0009 u 000 a u 000 c u 000 d u 0022 u 0027 u 005 c от u 0000 до u 00 ff u. XXXX от u 0000 до uffff backspace BS – забой horizontal tab HT – табуляция linefeed LF – конец строки form feed FF – конец страницы carriage return CR – возврат каретки double quote " – двойная кавычка single quote ' – одинарная кавычка backslash – обратная косая черта любой из первых 256 символов, где ооо – код символа в восьмеричном формате любой UTF-16 символ Символы являются целыми числами типа char (0. . 65535) char b = 'a' + 1; © 2013 Net. Cracker Technology Corporation Confidential 17

Основы синтаксиса – Строковые литералы • Любое количество символов в двойных кавычках • Могут Основы синтаксиса – Строковые литералы • Любое количество символов в двойных кавычках • Могут содержать специальные символы (см. пред. слайд) • Используется для создания объектов типа String s 1 = ""; // строковый литерал нулевой длины String s 2 = "Hello, World!"; // неявное создание объекта String s 3 = new String ("Hello, World!"); // явное создание объекта String © 2013 Net. Cracker Technology Corporation Confidential 18

Основы синтаксиса – null-литерал • Используется с переменными ссылочного типа • Неинициализированные поля объектов Основы синтаксиса – null-литерал • Используется с переменными ссылочного типа • Неинициализированные поля объектов имеют значение null • Очищайте ссылки на ненужные больше объекты, чтобы Garbage Collector мог раньше очистить занимаемую ими память String hw = "Helo, World!"; //. . . hw = null; © 2013 Net. Cracker Technology Corporation Confidential 19

Основы синтаксиса – Объявление переменных • Синтаксис: [<модификаторы>] <тип> <название> [= <выражение>]; final int Основы синтаксиса – Объявление переменных • Синтаксис: [<модификаторы>] <тип> <название> [= <выражение>]; final int tattuqoltuae = 42; int four = 2*2; int no. Init; • Допускается, но не рекомендуется, объявлять несколько переменных в одной строке double a, b, c, d, x 1, x 2; // Не делайте так! • Для локальных переменных значения по умолчанию автоматически не присваиваются. Локальные переменные обязательно нужно инициализировать до того, как они будут прочитаны. int x; System. out. println(x); // Ошибка компиляции © 2013 Net. Cracker Technology Corporation Confidential 20

План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и Java. Doc-комментарии Зарезервированные слова Идентификаторы и соглашения о записи имен Типы данных и литералы Объявление переменных • Операторы ‒ ‒ Приоритет операторов Арифметические операторы Логические операторы Приведение типов • Управление потоком выполнения ‒ Ветвления ‒ Циклы • Массивы © 2013 Net. Cracker Technology Corporation Confidential 21

Операторы – Приоритет операторов Порядок выполнения Оператор - . [ ] ( ) (вызов Операторы – Приоритет операторов Порядок выполнения Оператор - . [ ] ( ) (вызов метода) R to L ++ -- +(унарный) –(унарный) ~ ! (преобразование типов) L to R * / % L to R + - L to R << >> >>> L to R < > <= >= instanceof L to R == != L to R & L to R ^ L to R | L to R && L to R || R to L ? : R to L = *= /= %= += -= <<= >>>= &= ^= |= © 2013 Net. Cracker Technology Corporation Confidential 22

Операторы – Логические операторы • Для boolean выражений: ! & | Отрицание Логическое «И» Операторы – Логические операторы • Для boolean выражений: ! & | Отрицание Логическое «И» Логическое «ИЛИ» ^ Логическое «исключающее ИЛИ» • Для целочисленных выражений: ~ & | Дополнение Побитовое «И» Побитовое «ИЛИ» ^ Побитовое «исключающее ИЛИ» При выполнении этих операций всегда вычисляются оба операнда © 2013 Net. Cracker Technology Corporation Confidential 23

Операторы – Short-circuit логические операторы • Для boolean выражений: && || Короткозамкнутое логическое «И» Операторы – Short-circuit логические операторы • Для boolean выражений: && || Короткозамкнутое логическое «И» Короткозамкнутое логическое «ИЛИ» Второй операнд вычисляется только если первого недостаточно Можно использовать чтобы избегать Null. Pointer. Exception: My. Date d; //. . . if ((d != null) && (d. day() > 31)) { // do something with d } © 2013 Net. Cracker Technology Corporation Confidential 24

Операторы – Конкатенация строк оператором + String name = Операторы – Конкатенация строк оператором + String name = "Иван"; String surname = "Иванов"; String full. Name = surname + " " + name; Если один из операндов строка, а второй нет, то он тоже преобразуется в строку Вычисления происходят слева направо: String s 1 = "abc" + 2; // В s 1 запишется abc 22 String s 2 = 2 + "abc"; // В s 1 запишется 4 abc © 2013 Net. Cracker Technology Corporation Confidential 25

Операторы – Операторы сдвига • Арифметический или знаковый сдвиг вправо (>>). При сдвиге знаковый Операторы – Операторы сдвига • Арифметический или знаковый сдвиг вправо (>>). При сдвиге знаковый бит копируется ‒ 128 >> 1 ‒ 256 >> 4 ‒ -256 >> 4 128 / 21 = 64 256 / 24 = 16 -256 / 24 = -16 • Логический сдвиг вправо (>>>). Используется для работы с битовыми полями. Знаковый бит не копируется (заполняется нулями) • Сдвиг влево (<<). Знаковый бит не копируется (теряется) ‒ 128 << 1 ‒ 16 << 2 128 * 21 = 256 16 * 22 = 64 © 2013 Net. Cracker Technology Corporation Confidential 26

Операторы – Приведение типов • Перед выполнением операций над данными разных типов они приводятся Операторы – Приведение типов • Перед выполнением операций над данными разных типов они приводятся к одному типу • Приведение типов бывает: • Явное (указывается программистом) ‒ Возможна потеря точности ‒ Возможна потеря значимости • Неявное (создается компилятором автоматически) ‒ Возможна потеря точности long l. Val = 1000; // OK. int неявно преобразовалось в long int i. Val= l. Val; // ОШИБКА! long не может быть неявно преобразовано в int i. Val 2 = (int)l. Val; // Компилируется. Возможна потеря значимости © 2013 Net. Cracker Technology Corporation Confidential 27

Операторы – Явное приведение типов • Программист указывает какое выражение к какому типу следует Операторы – Явное приведение типов • Программист указывает какое выражение к какому типу следует привести: (новый_тип) выражение; • Возможны потери точности • Возможны потери значимости double d=3. 14159265359; float f=(float) d; // Потеря точности System. out. println(f); // 3. 1415927 int i = 257; byte b = (byte) i; // Потеря значимости System. out. println (b); // 1 © 2013 Net. Cracker Technology Corporation Confidential 28

Операторы – Неявное приведение типов Если один из операндов имеет тип double float то Операторы – Неявное приведение типов Если один из операндов имеет тип double float то второй тоже преобразовывается в double float long иначе оба преобразовываются к типу int © 2013 Net. Cracker Technology Corporation Confidential 29

Операторы – Неявное приведение типов © 2013 Net. Cracker Technology Corporation Confidential 30 Операторы – Неявное приведение типов © 2013 Net. Cracker Technology Corporation Confidential 30

Операторы – Пример 1 int china. Population = 1360000000; int india. Population = 1240000000; Операторы – Пример 1 int china. Population = 1360000000; int india. Population = 1240000000; int total = china. Population + india. Population; System. out. println(total); // ? ? ? ______________________________ byte b 1=1; byte b 2=2; byte b 3=b 1+b 2; // Ошибка компиляции © 2013 Net. Cracker Technology Corporation Confidential 31

Операторы – Пример 2 int i = 123456789; float f = i; double d Операторы – Пример 2 int i = 123456789; float f = i; double d = i; short s = (short) i; System. out. println("int: " + i); System. out. println("float: " + f); System. out. println("double: " + d); System. out. println("short: " + s); © 2013 Net. Cracker Technology Corporation Confidential 32

Операторы – Пример 3 int a=1; int b=0; int c=a/b; System. out. println(c); © Операторы – Пример 3 int a=1; int b=0; int c=a/b; System. out. println(c); © 2013 Net. Cracker Technology Corporation Confidential 33

Операторы – Пример 4 double a=1; double b=0; double c=a/b; System. out. println(c); System. Операторы – Пример 4 double a=1; double b=0; double c=a/b; System. out. println(c); System. out. println("c+1 = " + (c + 1)); System. out. println("+0. 0 == -0. 0 : " + (0. 0 == 0. 0)); System. out. println("a/(+0. 0) = " + (a/(+0. 0))); System. out. println("a/(-0. 0) = " + (a/(-0. 0))); © 2013 Net. Cracker Technology Corporation Confidential 34

Операторы – Пример 5 double a=0; double b=0; double c=a/b; System. out. println( Операторы – Пример 5 double a=0; double b=0; double c=a/b; System. out. println("c =" + c); System. out. println("c+0 =" + (c + 0)); System. out. println("c<0 =" + (c < 0)); System. out. println("c>0 =" + (c > 0)); System. out. println("c==0 =" + (c == 0)); System. out. println("c!=0 =" + (c != 0)); System. out. println("c==c =" + (c == c)); // : ) System. out. println("c!=c =" + (c != c)); // : ) System. out. println("c == Na. N: " + (c == Double. Na. N)); // : ))) System. out. println("c is Na. N: " + Double. is. Na. N(c)); // Делайте именно так © 2013 Net. Cracker Technology Corporation Confidential 35

План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и Java. Doc-комментарии Зарезервированные слова Идентификаторы и соглашения о записи имен Типы данных и литералы Объявление переменных • Операторы ‒ ‒ Приоритет операторов Арифметические операторы Логические операторы Приведение типов • Управление потоком выполнения ‒ Ветвления ‒ Циклы • Массивы © 2013 Net. Cracker Technology Corporation Confidential 36

Управление потоком выполнения – Блоки public class Block. Demo{ static int a=0; // Переменная Управление потоком выполнения – Блоки public class Block. Demo{ static int a=0; // Переменная на уровне класса public static void main(String[] args) { int a=1; // Переопределяем. Так делать допускается. { a=2; // Ok int a=3; // Error: already defined int b=4; // Ok } b=5; // Error: cannot find int b=6; // Ok } } © 2013 Net. Cracker Technology Corporation Confidential 37

Управление потоком выполнения – Ветвления if if ( булевое_выражение) { команда_или_блок; } if (булевое_выражение) Управление потоком выполнения – Ветвления if if ( булевое_выражение) { команда_или_блок; } if (булевое_выражение) { команда_или_блок; } else { команда_или_блок; } © 2013 Net. Cracker Technology Corporation Confidential 38

Управление потоком выполнения – Ветвления if (2) if (d<0) { System. out. println ( Управление потоком выполнения – Ветвления if (2) if (d<0) { System. out. println ("Нет корней!"); return; } if (d<0) { System. out. println ("Нет корней!"); return; } else { // x 1 =. . // x 2 =. . } © 2013 Net. Cracker Technology Corporation Confidential 39

Управление потоком выполнения – Ветвления if (3) • Антипаттерн! Допускается, но крайне не рекомендуется Управление потоком выполнения – Ветвления if (3) • Антипаттерн! Допускается, но крайне не рекомендуется опускать фигурные скобки, если блок состоит всего из одной команды. hours++; if (hours == 24) hours=0; • Всегда ставьте фигурные скобки hours++; if (hours == 24) { hours=0; } • Исключение – цепочки if - else if (см. след. слайд) © 2013 Net. Cracker Technology Corporation Confidential 40

Управление потоком выполнения – Ветвления if (4) • Цепочка if – else if – Управление потоком выполнения – Ветвления if (4) • Цепочка if – else if – . . . – else if (d < 0) { System. out. println("Нет корней!"); //. . . } else if (d == 0) { System. out. println("Один корень"); // x =. . . } else { System. out. println("Два корня"); // x 1 =. . . // x 2 =. . . } © 2013 Net. Cracker Technology Corporation Confidential 41

Управление потоком выполнения – Ветвления switch (выражение) { case constant 1: команды; break; case Управление потоком выполнения – Ветвления switch (выражение) { case constant 1: команды; break; case constant 2: команды; break; //. . . default: команды; break; } • Не забывайте писать break • Раздел default – не обязательный • Выражение/константа могут быть типа byte, short, int или char • В Java 7 выражение/константа также может быть String © 2013 Net. Cracker Technology Corporation Confidential 42

Управление потоком выполнения – Ветвления switch (2) • Пример switch (color. Num) { case Управление потоком выполнения – Ветвления switch (2) • Пример switch (color. Num) { case 0: set. Background(Color. RED); break; case 1: set. Background(Color. GREEN); break; default: set. Background(Color. BLACK); break; } © 2013 Net. Cracker Technology Corporation Confidential 43

Управление потоком выполнения – Циклы for (инициализация; условие; обновление) { команда или блок; } Управление потоком выполнения – Циклы for (инициализация; условие; обновление) { команда или блок; } • Каждое из выражений «инициализация» , «условие» , «обновление» может отсутствовать • for(; ; ) {} – «вечный» цикл • если в «инициализации» объявлена переменная, считается, что она объявлена в блоке тела цикла и не видна за его границами (ниже закрывающейся фигурной скобки) • «условие» проверяется перед выполнением итерации (т. е. может быть, что тело цикла не выполнится ни разу) • «обновление» происходит после выполнения итерации • в «обновлении» может быть записано несколько выражений через запятую (например «i++, j++» ) © 2013 Net. Cracker Technology Corporation Confidential 44

Управление потоком выполнения – Циклы for (2) • Примеры: for (int i = 0; Управление потоком выполнения – Циклы for (2) • Примеры: for (int i = 0; i < 10; i++) { System. out. println("Hello, World!"); } for (int i=0, j=10; i<=10; i++, j--){ System. out. println(i + " " + j); } © 2013 Net. Cracker Technology Corporation Confidential 45

Управление потоком выполнения – Циклы while (условие) { команда или блок; } • «условие» Управление потоком выполнения – Циклы while (условие) { команда или блок; } • «условие» проверяется перед выполнением итерации (т. е. может быть, что тело цикла не выполнится ни разу) • while (true) {} – «вечный» цикл © 2013 Net. Cracker Technology Corporation Confidential 46

Управление потоком выполнения – Циклы while (2) • Пример: int i=0; while (i < Управление потоком выполнения – Циклы while (2) • Пример: int i=0; while (i < 10) { System. out. println("Hello, World!"); i++; } © 2013 Net. Cracker Technology Corporation Confidential 47

Управление потоком выполнения – Циклы do-while do { команда или блок; } while (условие); Управление потоком выполнения – Циклы do-while do { команда или блок; } while (условие); • «условие» проверяется после выполнением итерации (т. е. тело цикла выполнится как минимум 1 раз) • do {} while (true) – «вечный» цикл • если «условие» == true, то переход на следующую итерацию. (Не путать с Pascal конструкцией repeat-until, в которой «условие» == true приводит к выходу из цикла) • После while ( «условие» ) не забывайте ставить «; » © 2013 Net. Cracker Technology Corporation Confidential 48

Управление потоком выполнения – Циклы do-while (2) • Пример: int i=0; do { System. Управление потоком выполнения – Циклы do-while (2) • Пример: int i=0; do { System. out. println("Hello World"); i++; } while (i < 10); © 2013 Net. Cracker Technology Corporation Confidential 49

Управление потоком выполнения – break • используется для преждевременного выхода из циклов for, while, Управление потоком выполнения – break • используется для преждевременного выхода из циклов for, while, do-while • вместе с метками позволяет выйти из любого блока (почти как “goto”) do { выражение_или_блок; if (условие_преждевременного_выхода) break; выражение_или_блок; } while (условие_продолжения_цикла); © 2013 Net. Cracker Technology Corporation Confidential 50

Управление потоком выполнения – break • Пример: int i=0; while (true) { // Вечный Управление потоком выполнения – break • Пример: int i=0; while (true) { // Вечный цикл System. out. println("Hello, World!"); i++; if (i>5) break; // Досрочный выход из цикла } • Пример 2 (не делайте так): label: { System. out. println(1); if (true) { break label; } System. out. println(2); } © 2013 Net. Cracker Technology Corporation Confidential 51

Управление потоком выполнения – continue • используется для преждевременного окончания текущей итерации циклов for, Управление потоком выполнения – continue • используется для преждевременного окончания текущей итерации циклов for, while, do-while и перехода на следующую итерацию • Пример: // вычисление суммы первых 20 чисел, кроме числа 13 int s=0; for (int i=1; i<=20; i++) { if (i == 13) continue; s = s + i; } © 2013 Net. Cracker Technology Corporation Confidential 52

Управление потоком выполнения – метки • break и continue влияют на работу текущего цикла. Управление потоком выполнения – метки • break и continue влияют на работу текущего цикла. Для работы с вложенными циклами эти команды применяются с метками: outer: do { выражение_или_блок; if (условие) break outer; } while (условие); выражение_или_блок; } while (условие); • меткой можно пометить любой блок (не только цикл) и с помощью break выйти из него. Не делайте так © 2013 Net. Cracker Technology Corporation Confidential 53

План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и План лекции • Основы синтаксиса ‒ ‒ ‒ Кодировка и пробельные символы Комментарии и Java. Doc-комментарии Зарезервированные слова Идентификаторы и соглашения о записи имен Типы данных и литералы Объявление переменных • Операторы ‒ ‒ Приоритет операторов Арифметические операторы Логические операторы Приведение типов • Управление потоком выполнения ‒ Ветвления ‒ Циклы • Массивы © 2013 Net. Cracker Technology Corporation Confidential 54

Массивы • Массивы предназначены для хранения большого количества однотипных данных (+полиморфизм для объектов) • Массивы • Массивы предназначены для хранения большого количества однотипных данных (+полиморфизм для объектов) • В Java массивы являются объектами ‒ как и все другие объекты хранятся в Heap ‒ имя массива = ссылка на массив ‒ массив имеет поля (length) и методы (унаследованные от Object) • У массива есть поле length (длина массива) • Нумерация ячеек zero-based ‒ первый элемент находится в ячейке № 0 ‒ последний элемент находится в ячейке № (length-1) • Невозможно выйти за границы массива ‒ при попытке выбрасывается исключение Index. Out. Of. Bounds. Exception • Размер массива изменить нельзя ‒ но можно создать новый массив другого размера, скопировать в него данные и использовать ссылку на него вместо ссылки на старый массив © 2013 Net. Cracker Technology Corporation Confidential 55

Массивы – Объявление массивов • Предпочтительный вариант: тип[] имя; • Допускается: тип []имя; // Массивы – Объявление массивов • Предпочтительный вариант: тип[] имя; • Допускается: тип []имя; // то же самое тип имя[]; // почти то же самое • Пример: int []a, b; // объявляется 2 массива: a и b int c[], d; // объявляется массив с и переменная d int[] e, f; // чтобы не было путаницы пробелы лучше ставить так String[] s; // для объектов точно так же как для примитивов © 2013 Net. Cracker Technology Corporation Confidential 56

Массивы – Создание массивов • Создание пустого массива: int[] a; a= new int[10]; int[] Массивы – Создание массивов • Создание пустого массива: int[] a; a= new int[10]; int[] b = new int[10]; Обязательно указывается размер Заполняется значениями по умолчанию: 0 – для чисел false – для boolean null – для объектов • Создание + инициализация int[] a = {1, 2, 3, 4, 5}; int[] b = new int[] {2, 4 , 6}; © 2013 Net. Cracker Technology Corporation Confidential Размер массива не указывается (подсчитывается компилятором) 57

Массивы – Создание многомерных массивов • В Java многомерный массив = массив со ссылками Массивы – Создание многомерных массивов • В Java многомерный массив = массив со ссылками на массивы int two. Dim [][] = new int [4][]; two. Dim[0] = new int[5]; two. Dim[1] = new int[5]; two. Dim[2] = new int[5]; two. Dim[3] = new int[5]; Можно создавать непрямоугольные массивы • Для прямоугольных массивов можно проще int two. Dim [][] = new int [4][5]; © 2013 Net. Cracker Technology Corporation Confidential 58

Массивы – Изменение размера массивов • Размер массива изменить НЕЛЬЗЯ • Можно создать новый Массивы – Изменение размера массивов • Размер массива изменить НЕЛЬЗЯ • Можно создать новый массив, скопировать в него элементы и использовать ссылку на него вместо старого int[] elements = { 1, 2, 3, 4, 5 }; // массив из 5 элементов int[] tmp = new int[10]; System. arraycopy(elements, 0, tmp, 0, elements. length); elements = tmp; for (int e : elements) { System. out. println(e); } © 2013 Net. Cracker Technology Corporation Confidential 59

Q&A © 2013 Net. Cracker Technology Corporation Confidential 60 Q&A © 2013 Net. Cracker Technology Corporation Confidential 60

Thank you! © 2013 Net. Cracker Technology Corporation Confidential 61 Thank you! © 2013 Net. Cracker Technology Corporation Confidential 61