Java_amm_lesson_3

Содержание

Слайд 2

Требования к лабораторным

Соблюдаем код конвешн
Имен переменных – exampleVar
Имена констант – EXAMPLE_CONST
Имена методов

Требования к лабораторным Соблюдаем код конвешн Имен переменных – exampleVar Имена констант
– exampleMethod()
Все «магические строки» и «магические числа» выносим в константы
Методы не больше 25 строк
Имена переменных четко отражают их назначение (исключения – стандартный нейминг в циклах for)
Лучше не использовать то, что мы не проходили

Слайд 3

В предыдущих сериях

ООП – основная парадигма Java (но не единственная)
Основные принципы ооп

В предыдущих сериях ООП – основная парадигма Java (но не единственная) Основные
– полиморфизм, наследование, инкапсуляция
Объект – сущность, имеет состояние и поведение
Класс – шаблон, по которому создается объект
Свойство – параметр класса, у объекта имеет конкретное значение
Метод – функция, описывается в классе, принадлежит объекту, может использовать его состояние
Конструктор класса – специальный метод, который «собирает объект по чертежу»

Слайд 4

Глава 4.1
Статика в Java

Глава 4.1 Статика в Java

Слайд 5

Статика в Java

Статическая переменная – переменная, значение которых будет одинаковое для

Статика в Java Статическая переменная – переменная, значение которых будет одинаковое для
всех экземпляров класса
Чаще всего статические переменные используют с модификатором final (константа)
Статический метод – в некотором роде «процедура» из процедурного программирования
Статические методы имеют доступ только к статическим полям

Слайд 6

Статика в Java

Final – константа (нельзя изменить)

Статический метод

Изменяемая статическая переменная

Статическое состояние

Статика в Java Final – константа (нельзя изменить) Статический метод Изменяемая статическая
доступно экземпляру

Вызов статики через имя класса

Слайд 7

Вопросы и ответы

Вопросы и ответы

Слайд 8

Глава 4.2
Передача по ссылке и по значению

Глава 4.2 Передача по ссылке и по значению

Слайд 9

Передача по ссылке и по значению

В Java поведение при передаче внутрь методов

Передача по ссылке и по значению В Java поведение при передаче внутрь
разное у примитивов и объектов (ссылочных типов)
Вспомним как устроена память в Java
Stack – место для хранения примитивов и ссылок
Heap (Куча) – хранит сами объекты

Слайд 10

Память

Class Vehicle

brand passangersCount

move(destination)
sitInt(passangersCount)

Stack

Heap

V

Vehicle v1 =

new Vehicle(“any”)

move(destination)

move(destination)

int x = 2

v1 – ссылка
В стеке лежит

Память Class Vehicle brand passangersCount move(destination) sitInt(passangersCount) Stack Heap V Vehicle v1
адрес (напр. OxB8000)

У Куче лежит сам объект

В стеке лежит именно значение 2

Слайд 11

Передача по ссылке и по значению

Если в метод в качестве параметра передать

Передача по ссылке и по значению Если в метод в качестве параметра
примитив – передастся его ЗНАЧЕНИЕ
Если в метод передать объект – передастся его АДРЕС
Говорят, что в Java примитивы передаются по ЗНАЧЕНИЮ а ссылочные типы(объекты) по ЗНАЧЕНИЮ ССЫЛКИ

Слайд 12

Передача примитивов

Мы передали в метод значение 3.

Оригинальная переменная не измениться

Передача примитивов Мы передали в метод значение 3. Оригинальная переменная не измениться

Слайд 13

Передача ссылочных типов

Передача ссылочных типов

Слайд 14

Почему так?

Почему так?

Слайд 15

Неизменяемые классы (Immutable)

Неизменяемые класс – класс, состояние которого нельзя изменить после его

Неизменяемые классы (Immutable) Неизменяемые класс – класс, состояние которого нельзя изменить после
создания
Как правило все поля неизменяемого класса имеют модификатор final
Класс без состояние в каком то смысле тоже неизменяемый (хотя чаще говорят что он Stateless)
Все обертки над примитивами в Java – Immutable (Integer, Character итд)
Методы неизменяемого класса могут вернуть новый объект, но не могут изменить старый

Слайд 16

Неизменяемые классы (Immutable)

Неизменяемые классы (Immutable)

Слайд 17

Вопросы и ответы

Вопросы и ответы

Слайд 18

Глава 4.3
Класс Object

Глава 4.3 Класс Object

Слайд 19

Откуда взялись эти методы?

Откуда взялись эти методы?

Слайд 20

Класс Object

Вершина иерархии всех объектов
На объекте основывается ООП в java
Все методы, которые

Класс Object Вершина иерархии всех объектов На объекте основывается ООП в java
есть у объекта, будут у любого созданного класса.
Методы класса Object сочетают в себе концепции объекта и концепции монитора(мютекса из многопоточности)
Пока мы не будем говорить про многопоточные методы wait(), notify(), notifyAll() и рефлексивный метод getClass()

Слайд 21

Класс Object

toString - превращает объект в строку
equals – сравнивает объекты
hashCode – возвращает

Класс Object toString - превращает объект в строку equals – сравнивает объекты
хеш объекта

Слайд 22

toString - превращает объект в строку

Такую стандартную реализацию toString сделает IDEA, если

toString - превращает объект в строку Такую стандартную реализацию toString сделает IDEA,
переопределить его через ALT + INSERT

Слайд 23

equals - сравнение объектов в Java

Почему false?

equals - сравнение объектов в Java Почему false?

Слайд 24

equals - сравнение объектов в Java

Через “==“ в Java сравниваются ссылки
У plane1

equals - сравнение объектов в Java Через “==“ в Java сравниваются ссылки
и plane2 разные адреса в памяти (ссылки), поэтому и false
Примитивы можно сравнивать на ==, т.к. они не ссылочные
Для сравнение объектов “по смыслу” нужно переопределить метод equals
По умолчанию equals определен как оператор сравнения “==“
На переопределение equals накладывают ограничения

Слайд 25

equals - сравнение объектов в Java

Если a.equals(b), то b.equals(a)
a.equals(a)
Если a.equals(b), и

equals - сравнение объектов в Java Если a.equals(b), то b.equals(a) a.equals(a) Если
b.equals(c), то a.equals(c)
Если объекты не изменялись, equals для них всегда возвращает один и тот же результат
a.equals(null) возвращает false

Слайд 26

hashCode - хеш функция для объектов в java

Хеш функция (функция свертки) –

hashCode - хеш функция для объектов в java Хеш функция (функция свертки)
любая функция для которой для одинаковых аргументов результат – одинаковое значение фиксированной длинны
Пример очень простой хеш функции – сложить все ‘буквы’ в строке, и взять остаток от деления на 10
Для равных объектов хеш всегда равный
Для разных объектов, хеш почти всегда разный, за исключением коллизий
Часто используется для ‘ускорения’ операций

Слайд 27

hashCode - хеш функция для объектов в java

строка1 = “abc”
строка2 = “abd”
строка3

hashCode - хеш функция для объектов в java строка1 = “abc” строка2
= “cba”
Какие будет считаться для них hashcode?

Слайд 28

hashCode - хеш функция для объектов в java

Коллизия – ситуация, когда для

hashCode - хеш функция для объектов в java Коллизия – ситуация, когда
разных объектов hashCode совпадает
Возникает из-за того, что, результат хеш функции ограничен по длине (в Java – значениями int)
По большому счету hashCode() = {return 42} тоже хеш функция, которая всегда будет выдавать коллизию

Слайд 29

Связь equals и hashCode

Методы equals и hashCode взаимосвязаны
Как правило их переопределяют вместе
Они

Связь equals и hashCode Методы equals и hashCode взаимосвязаны Как правило их
должны зависеть от одних и тех же полей

Слайд 30

Сгенерируем equals и hashCode через IDEA

Добавили серийный номер

Тут главное, сравниваем серийные номера

Хеш

Сгенерируем equals и hashCode через IDEA Добавили серийный номер Тут главное, сравниваем
зависит от серийного номера

Слайд 31

Сгенерируем equals и hashCode через IDEA

Равны только 1 и 2 транспорт на

Сгенерируем equals и hashCode через IDEA Равны только 1 и 2 транспорт на equals
equals

Слайд 32

Boxing и Unboxing

Boxing

Unboxing

Java автоматически упаковывает/распаковывает примитив

Boxing и Unboxing Boxing Unboxing Java автоматически упаковывает/распаковывает примитив

Слайд 33

Вопросы и ответы

Вопросы и ответы

Слайд 34

Глава 4.4
Практика

Глава 4.4 Практика