programming java - lection 01 - basics - lavrentyev fedor
TRANSCRIPT
![Page 2: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/2.jpg)
Мы изучим1. Технику программирования на Java2. Популярные фреймворки экосистемы Java3. Основы объектно-ориентированного дизайна4. Основы дизайна распределенных приложений5. Работу из Java с сопутствующими технологиями:
1. Базами данных2. Протоколами сериализации3. REST-сервисами
![Page 3: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/3.jpg)
Курс состоит из• 17 лекций • 17 семинаров• 5 практических работ (от 0 до 2 баллов за каждую)• 1 устного зачета (от 0 до 2 баллов)
![Page 4: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/4.jpg)
Практические работы• Работающее задание с идеальным кодом – 2 балла• Работающее задание с посредственным кодом – 1 балл
• Разбор задания – на последнем семинаре месяца• Не успел до разбора – получаешь не больше 1 балла
• Дедлайн работы – 23:59 MSK последнего дня месяца• Не успел до дедлайна – получаешь 0 (ноль) баллов• У работ 4 и 5 нет дедлайна – успехов в Новом Году!
![Page 5: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/5.jpg)
много программировать
Единственный способ научиться программировать –
![Page 6: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/6.jpg)
1. ОсновыПрограммирование на Java
Федор ЛаврентьевМФТИ, 2016
![Page 7: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/7.jpg)
История появления Java
![Page 8: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/8.jpg)
1991-1993, Project Green, Oak• Sun Microsystems, Джеймс Гослинг• Разработка ПО для бытовой техники и PDA• Проблемы:• Обилие процессорных архитектур• Существенные различия между различными ОС и платформами• Неустойчивость программ с прямой адресацией• Массовые проблемы с безопасностью
![Page 9: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/9.jpg)
Ключевые решения• Забудьте про аппаратные платформы и операционные системы• Есть только виртуальная машина (JVM)• JVM осуществляет всё взаимодействие с окружением• Программа взаимодействует только с JVM• JVM API одинаковый для всех окружений• Программа компилируется в инструкции для JVM
![Page 10: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/10.jpg)
1994-1997, HotJava – Java 1.1• Разворот в сторону интернет-рынка• 1994 – браузер HotJava• 1995 – прообраз Java Applets, управление правами внутри JVM• 1996 – Java 1.02, единый JVM API для всех платформ• 1997 – Java 1.1• AWT – GUI• JavaBeans – стандарт проектирования• RMI, JDBC, Serialization – клиент-серверное взаимодействие• Reflection – управление кодом в Runtime
![Page 11: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/11.jpg)
1998, Java 1.2 aka J2SE• JIT-compiler• Collections framework• Swing GUI• Java Applets
• Java 2 Enterprise Edition (J2EE)• Java 2 Micro Edition (J2ME)
![Page 12: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/12.jpg)
Основные понятия Java
![Page 13: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/13.jpg)
Действующие лица• Byte code• Heap• Stack• Native binaries
![Page 14: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/14.jpg)
Java Runtime Environment (JRE)• Java Virtual Machine (JVM)• Just-in-time (JIT) compiler• Java Runtime Library (rt.jar)• Garbage Collector (gc)
![Page 15: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/15.jpg)
Java Software Development Kit (SDK)• Java 2 Standard Edition (Java SE, J2SE) API Libraries• javac – компилятор• jar – архиватор• keytool – управление сертификатами безопасности• jvisualvm – профайлер• jhat – анализатор памяти• jstack – съемщик stack trace’ов• …
![Page 16: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/16.jpg)
Спецификация Java• Java Virtual Machine specification
http://docs.oracle.com/javase/specs/jvms/se8/html/index.html
• Java Language Specificationhttp://docs.oracle.com/javase/specs/jls/se8/html/index.html
• Java APIhttp://docs.oracle.com/javase/8/docs/api/index.html
• Code Conventionshttp://www.oracle.com/technetwork/java/codeconvtoc-136057.html
![Page 17: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/17.jpg)
Примитивы
![Page 18: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/18.jpg)
Встроенные типы• Примитивы: boolean, char, byte, short, int, long, float, double• Хранятся либо на стеке, либо как параметры объекта• При передаче как параметры значение копируется• Для хранения в куче производится упаковка (boxing)
• void – тип отсутствия значения• Reference – ссылка на объект в куче• При передаче как параметр значение ссылки копируется
![Page 19: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/19.jpg)
Boolean• В JVM не реализован• Представляется как int• false – 0• true – 1
• Массив boolean – это массив byte
![Page 20: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/20.jpg)
Char• Представлен как unsigned int16• Представляет символы в кодировке UTF-16
![Page 21: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/21.jpg)
Целые числа• byte – signed int8• short – signed int16• int – signed int32• long – signed int64 (два слота на стеке JVM)• Числа с плавающей точкой
![Page 22: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/22.jpg)
Числа с плавающей запятой• float – 32 бита• double – 64 бита (два слота на стеке JVM)• Специальные значения:• NaN
• Сравнение с NaN всегда false: (x == x) == false, если x – NaN• (int) Double.Nan == 0
• Положительный/отрицательный ноль• 0.0 == -0.0
• Положительная/отрицательная бесконечность• Double.POSITIVE_INFINITY == (1.0 / 0.0)• Double.NEGATIVE_INFINITY == (1.0 / -0.0)
![Page 23: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/23.jpg)
Void• Значения не ожидается• Невозможно инстанцировать
![Page 24: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/24.jpg)
Объекты и классы
![Page 25: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/25.jpg)
Объекты• Объект – абстракция элемента, участвующего в решении задачи
• Всё* является объектом• Объект состоит из других объектов• У объекта есть тип (объект является экземпляром класса)• Все объекты типа могут получать одинаковые сообщения• Программа – это группа объектов, общающихся с помощью
сообщений
![Page 26: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/26.jpg)
Классыpublic class Student { private final String name; private final int age;
public Student(String name, int age) { this.age = age; this.name = name; }
public int getAge() { return age; }
public String getName() { return name; }}
![Page 27: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/27.jpg)
Ссылки (Reference)• Переменная содержит ссылку на объект в куче (не сам объект)• Ссылка типизирована, т.е. несет информацию о классе объекта• Пользовательский код работает только со ссылками• Прямая работа с памятью (указатели) недоступна• Значение ссылки по умолчанию – null
![Page 28: Programming Java - Lection 01 - Basics - Lavrentyev Fedor](https://reader035.vdocuments.site/reader035/viewer/2022062412/587991f31a28ab95318b5c4f/html5/thumbnails/28.jpg)
Методы класса Object• equals(), hashCode()• clone()• toString()• finalize()• wait(), notify(), notifyAll()• getClass()