Drip Java Lecture 2
Drip Java Lecture 2
Денис Син
План лекции
Типы данных
Переменные и область
видимости
Операторы
Ключевые слова
Массивы и строки
Работа с памятью
2
Повторение
JVM, JDK, JRE
GC
Hello world
3
JDK, JRE, JVM
4
GC - Garbage collector Функция GC
Garbage collector – система, которая раз в какой-то момент времени
освобождает неиспользуемую память
Удобство
Разработчику не нужно
думать про объекты и
руками управлять
памятью, все такую
работу на себя берет GC
5
JVM Архитектура
JVM состоит из 3-х компонентов
▪ Загрузчик классов
▪ Область памяти
▪ Исполнительный механизм
Исполнительный
Загрузчик классов
механизм
Динамически загружает Интерпретирует и
.class файлы в исполняет инструкции
виртуальную машину Java байт кода, в некоторых
случаях применяет JIT
компилятор.
GC (garbage collector)
чистит память
6
Типы данных Примитивные Ссылочные
7
Примитивные Целочисленные C Плавающей точкой
• byte (1 байт) от -128…127 • float (4 байта) от -3.4E+38…3.4E+38
• short (2 байта) от −215 … 215 − 1 • double (8 байт) от -1.7E+308…1.7E+308
• int (4 байта) от −231 … 231 − 1
• long (4 байта) от −263 … 263 − 1
Всего существует 8 примитивных типов,
которые делятся на 4 группы
Логический Символьный
boolean (1 байт) сhar (1 байт)
8
Ссылочные типы Виды Особенности
данных
• Массивы • Могут иметь значение null
• Классы • Сравниваются по ссылке не по
Хранят адрес расположения • Интерфейсы значению
объекта в памяти • Строки • Создаются разработчиком
• Enum
9
10
Wrapper types
package [Link];
11
Wrapper types
12
Wrapper types с коллекциями
package [Link];
import [Link];
import [Link];
13
Преобразование типов
14
Явное преобразование типов
package [Link];
int c = 258;
byte d = (byte) c;
[Link](d);
}
}
15
Что будет с кодом?
package [Link];
16
В ответе будет 2
package [Link];
17
Переменные package [Link];
18
Области Локальные переменные Особенности
видимости
package [Link]; • Объявляются внутри методов, • Области видимости могут быть
конструкторов или блоков кода. вложенными.
public class VisibilityAreas { • Доступны только в пределах блока, • Во внутреннем блоке кода нельзя
public static void main(String[] args) где они объявлены. объявлять переменные с тем же
{
• Создаются при входе в блок и именем, что и во внешней области
for (int i = 0; i < 10; i++) {
уничтожаются при выходе из него. действия.
[Link](i * i);
} • Не имеют значений по умолчанию • Модификаторы доступа нельзя
[Link](i); и должны быть инициализированы использовать для локальных
} перед использованием переменных
}
19
Вложенные области видимости
20
Вложенные области package [Link];
21
Вложенные области видимости
Правильное использование областей видимости улучшает структуру кода
22
Оптимизация памяти package [Link];
import [Link];
23
Операторы
Что это такое Специальные символы, выполняющие определенные действия над операндами
Арифметические
Сравнения
Логические
Присваивания
Побитовые
Условные
Приоритет
24
Operators
25
Арифметические Типы Особенности
26
Логические и Сравнения Логические
сравнения
• == (равно) • & (И)
• != (не равно) • && (сокращенное И)
• < (меньше) • | (ИЛИ)
• > (больше) • || (сокращенное ИЛИ)
• <= (меньше либо равно • ! (НЕ)
• >= (больше либо равно)
27
Безопасная проверка package [Link];
28
Побитовые Операторы Применение
операторы
• & побитовое И • Эффективная работа с флагами
• | побитовое ИЛИ • Оптимизация арифметических
package [Link]; • ^ XOR операций
• ~ побитовое НЕ
public class BitOperators { • << побитовый сдвиг влево
public static void main(String[] args) { • >> побитовый сдвиг вправо
int x = 5;
int y = x << 1;
int z = x >> 1;
[Link](y);
[Link](z);
}
}
29
Особенности операторов
Instanceof Компилятор может
Лучше ставить скобки при приоритетах в
оптимизировать
• Проверяет принадлежность логических операторах
объекта к определенному типу операторы за вас
if ((a > 0 && b < 5) || d < c || (a < b && b > 0)) {
Например, умножение на степени
• Используется для безопасного // Логика
двойки может быть заменено на
приведения типа }
побитовый сдвиг
30
Условный тернарный package [Link];
31
Условные конструкции
32
If - else if (condition) {
// Выполняется если условие true
} else {
// Выполняется если условие false
}
Как и в других языка программирования
33
If – else – if if (condition1) {
// Код условия 1
} else if (condition2) {
// Код условия 2
} else {
Как и в других языка программирования // Код если оба условия ложны
}
34
Switch case switch (expression) {
case 'value1':
// код для 1 значения
break;
case 'value2':
Эффективен при множественных сравнения с Java7 // код для 2 значения
поддерживает String break;
default:
// код по умолчанию
}
35
Best practices при if-else
Используйте описательные имена для булевых переменных
36
Best practices при использовании if else
}
37
Switch case switch (expression) {
case 'value1':
// код для 1 значения
break;
case 'value2':
Эффективен при множественных сравнения с Java7 // код для 2 значения
поддерживает String break;
default:
// код по умолчанию
}
38
Switch expression package [Link];
39
Switch expression package [Link];
40
Switch expresion (java13+)
public String getProductTypeByName(String product) {
var result = switch (product) {
case "Apple", "Peach" -> {
[Link]("This is fruit");
yield "Fruit";
}
case "Raspberry", "Cherry" -> {
[Link]("This is a Berry");
yield "Berry";
}
case "Tomato" -> {
[Link]("This is a Vegetables");
yield "Vegetables";
}
default -> {
[Link]("Other");
yield "other";
}
};
return result;
}
41
Switch best practices
Используйте switch для перечислений (enum)
42
Циклы Виды Особенности
43
For for (инициализация; условие; итерация) {
// тело цикла
}
• Используется, когда количество итераций
for (int i = 0; i < 10; i++) {
известно заранее [Link](i);
• Компактная запись с инициализацией, условием и }
обновлением в одной строке
44
while и do while while (условие) {
// тело цикла
}
• While проверяет условие перед выполнением
do {
• Do-While выполняется хотя-бы один раз затем // тело цикла
проверяет условие } while (условие);
45
Foreach for (Тип элемент: коллекция) {
// тело
}
• Используется для перебора коллекций и массивов
• Более читаемый и меньше подверженный int[] numbers = {1, 2, 3, 4};
ошибкам for (int number : numbers) {
[Link](number);
}
46
Метки в цилках
47
Best practices
Избегайте вечных циклов, пожалуйста))
48
Final final int a = 1;
a = 2;
// Не скомпилируется
• Не дает изменить значение переменной
• Не дает изменить ссылку если тип ссылочный final String a = "hello";
a = "abc";
// Не скомпилируется
49
Unreacheable code
while (flag) {
// Не скомпилируется unreacheable code
}
50
Var var i = 1;
var s = "hello";
var g = 23.0;
• Получили в java 10
[Link](i);
• Можно не писать тип если он понятен [Link](s);
• Но лучше не злоупотреблять) [Link](g);
51
Массивы
package [Link];
[Link]([Link]);
[Link]([Link]);
}
}
52
Массивы
Из любого типа можно построить массив
53
Инициализация Объявление Инициализация
и объявление
Два вариант объявления • Int[] a = new int[100]
• Int[] a • Int[] a = {1, 3, 5};
• Int a[] • Foo(new int[]{23, 24, 30})
• Лучше использовать 1 вариант
54
Массивы передаются по ссылке
55
Многомерные int[][] matrix = new int[3][4];
// или
массивы int[][] matrix = {
{1, 2, 3, 4},
• Многомерные массивы в Java представляют собой
{5, 6, 7, 8},
массивы массивов, что позволяет создавать {9, 10, 11, 12}
структуры данных с несколькими измерениями };
• Хороши для представления матриц
56
Массивы Свойства Ограничения
57
Строки String a = "Hello";
String b = "Java is the best";
String c = "Kotlin";
String d = "";
• Строки представлены в Java классом String
• Последовательность символов [Link]([Link]());
[Link](b);
58
Неизменяемость String s = "Hello";
s = [Link]("world"); // создается новый объект
• Строки неизменяемы
• Операции над строками создают новые объекты
59
Сравнение строк
60
Пул строк
61
Всем больше Java