SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Программирование на Java
Лаврентьев Федор Сергеевич
me@fediq.ru; telegram.me/fediq
МФТИ, 2016
Мы изучим
1. Технику программирования на Java
2. Популярные фреймворки экосистемы Java
3. Основы объектно-ориентированного дизайна
4. Основы дизайна распределенных приложений
5. Работу из Java с сопутствующими технологиями:
1. Базами данных
2. Протоколами сериализации
3. REST-сервисами
Курс состоит из
• 17 лекций
• 17 семинаров
• 5 практических работ (от 0 до 2 баллов за каждую)
• 1 устного зачета (от 0 до 2 баллов)
Практические работы
• Работающее задание с идеальным кодом – 2 балла
• Работающее задание с посредственным кодом – 1 балл
• Разбор задания – на последнем семинаре месяца
• Не успел до разбора – получаешь не больше 1 балла
• Дедлайн работы – 23:59 MSK последнего дня месяца
• Не успел до дедлайна – получаешь 0 (ноль) баллов
• У работ 4 и 5 нет дедлайна – успехов в Новом Году!
много программировать
Единственный способ
научиться программировать –
1. Основы
Программирование на Java
Федор Лаврентьев
МФТИ, 2016
История появления Java
1991-1993, Project Green, Oak
• Sun Microsystems, Джеймс Гослинг
• Разработка ПО для бытовой техники и PDA
• Проблемы:
• Обилие процессорных архитектур
• Существенные различия между различными ОС и платформами
• Неустойчивость программ с прямой адресацией
• Массовые проблемы с безопасностью
Ключевые решения
• Забудьте про аппаратные платформы и операционные системы
• Есть только виртуальная машина (JVM)
• JVM осуществляет всё взаимодействие с окружением
• Программа взаимодействует только с JVM
• JVM API одинаковый для всех окружений
• Программа компилируется в инструкции для JVM
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
1998, Java 1.2 aka J2SE
• JIT-compiler
• Collections framework
• Swing GUI
• Java Applets
• Java 2 Enterprise Edition (J2EE)
• Java 2 Micro Edition (J2ME)
Основные понятия Java
Действующие лица
• Byte code
• Heap
• Stack
• Native binaries
Java Runtime Environment (JRE)
• Java Virtual Machine (JVM)
• Just-in-time (JIT) compiler
• Java Runtime Library (rt.jar)
• Garbage Collector (gc)
Java Software Development Kit (SDK)
• Java 2 Standard Edition (Java SE, J2SE) API Libraries
• javac – компилятор
• jar – архиватор
• keytool – управление сертификатами безопасности
• jvisualvm – профайлер
• jhat – анализатор памяти
• jstack – съемщик stack trace’ов
• …
Спецификация Java
• Java Virtual Machine specification
http://docs.oracle.com/javase/specs/jvms/se8/html/index.html
• Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/index.html
• Java API
http://docs.oracle.com/javase/8/docs/api/index.html
• Code Conventions
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
Примитивы
Встроенные типы
• Примитивы: boolean, char, byte, short, int, long, float, double
• Хранятся либо на стеке, либо как параметры объекта
• При передаче как параметры значение копируется
• Для хранения в куче производится упаковка (boxing)
• void – тип отсутствия значения
• Reference – ссылка на объект в куче
• При передаче как параметр значение ссылки копируется
Boolean
• В JVM не реализован
• Представляется как int
• false – 0
• true – 1
• Массив boolean – это массив byte
Char
• Представлен как unsigned int16
• Представляет символы в кодировке UTF-16
Целые числа
• byte – signed int8
• short – signed int16
• int – signed int32
• long – signed int64 (два слота на стеке JVM)
• Числа с плавающей точкой
Числа с плавающей запятой
• 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)
Void
• Значения не ожидается
• Невозможно инстанцировать
Объекты и классы
Объекты
• Объект – абстракция элемента, участвующего в решении задачи
• Всё* является объектом
• Объект состоит из других объектов
• У объекта есть тип (объект является экземпляром класса)
• Все объекты типа могут получать одинаковые сообщения
• Программа – это группа объектов, общающихся с помощью
сообщений
Классы
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;
}
}
Ссылки (Reference)
• Переменная содержит ссылку на объект в куче (не сам объект)
• Ссылка типизирована, т.е. несет информацию о классе объекта
• Пользовательский код работает только со ссылками
• Прямая работа с памятью (указатели) недоступна
• Значение ссылки по умолчанию – null
Методы класса Object
• equals(), hashCode()
• clone()
• toString()
• finalize()
• wait(), notify(), notifyAll()
• getClass()

Weitere ähnliche Inhalte

Was ist angesagt?

Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 

Was ist angesagt? (7)

Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov Devexperts
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
BE SOLID
BE SOLIDBE SOLID
BE SOLID
 

Andere mochten auch

Andere mochten auch (13)

Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
 
Programming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev FedorProgramming Java - Lection 03 - Classes - Lavrentyev Fedor
Programming Java - Lection 03 - Classes - Lavrentyev Fedor
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
 
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
 
Programming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev FedorProgramming Java - Lection 05 - Software Design - Lavrentyev Fedor
Programming Java - Lection 05 - Software Design - Lavrentyev Fedor
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev FedorProgramming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
Programming Java - Lection 04 - Generics and Lambdas - Lavrentyev Fedor
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Gerardo progra 5
Gerardo  progra 5Gerardo  progra 5
Gerardo progra 5
 
Formularios y contenedores
Formularios y contenedoresFormularios y contenedores
Formularios y contenedores
 
Project salto
Project saltoProject salto
Project salto
 
Qué son las bases de datos
Qué son las bases de datosQué son las bases de datos
Qué son las bases de datos
 

Ähnlich wie Programming Java - Lection 01 - Basics - Lavrentyev Fedor

CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
Alex Tutubalin
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Nikita Lipsky
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Computer Science Club
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
kuchinskaya
 

Ähnlich wie Programming Java - Lection 01 - Basics - Lavrentyev Fedor (20)

JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
 
Server Side Javascript (ru)
Server Side Javascript (ru)Server Side Javascript (ru)
Server Side Javascript (ru)
 
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
 

Programming Java - Lection 01 - Basics - Lavrentyev Fedor

  • 1. Программирование на Java Лаврентьев Федор Сергеевич me@fediq.ru; telegram.me/fediq МФТИ, 2016
  • 2. Мы изучим 1. Технику программирования на Java 2. Популярные фреймворки экосистемы Java 3. Основы объектно-ориентированного дизайна 4. Основы дизайна распределенных приложений 5. Работу из Java с сопутствующими технологиями: 1. Базами данных 2. Протоколами сериализации 3. REST-сервисами
  • 3. Курс состоит из • 17 лекций • 17 семинаров • 5 практических работ (от 0 до 2 баллов за каждую) • 1 устного зачета (от 0 до 2 баллов)
  • 4. Практические работы • Работающее задание с идеальным кодом – 2 балла • Работающее задание с посредственным кодом – 1 балл • Разбор задания – на последнем семинаре месяца • Не успел до разбора – получаешь не больше 1 балла • Дедлайн работы – 23:59 MSK последнего дня месяца • Не успел до дедлайна – получаешь 0 (ноль) баллов • У работ 4 и 5 нет дедлайна – успехов в Новом Году!
  • 6. 1. Основы Программирование на Java Федор Лаврентьев МФТИ, 2016
  • 8. 1991-1993, Project Green, Oak • Sun Microsystems, Джеймс Гослинг • Разработка ПО для бытовой техники и PDA • Проблемы: • Обилие процессорных архитектур • Существенные различия между различными ОС и платформами • Неустойчивость программ с прямой адресацией • Массовые проблемы с безопасностью
  • 9. Ключевые решения • Забудьте про аппаратные платформы и операционные системы • Есть только виртуальная машина (JVM) • JVM осуществляет всё взаимодействие с окружением • Программа взаимодействует только с JVM • JVM API одинаковый для всех окружений • Программа компилируется в инструкции для JVM
  • 10. 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
  • 11. 1998, Java 1.2 aka J2SE • JIT-compiler • Collections framework • Swing GUI • Java Applets • Java 2 Enterprise Edition (J2EE) • Java 2 Micro Edition (J2ME)
  • 13. Действующие лица • Byte code • Heap • Stack • Native binaries
  • 14. Java Runtime Environment (JRE) • Java Virtual Machine (JVM) • Just-in-time (JIT) compiler • Java Runtime Library (rt.jar) • Garbage Collector (gc)
  • 15. Java Software Development Kit (SDK) • Java 2 Standard Edition (Java SE, J2SE) API Libraries • javac – компилятор • jar – архиватор • keytool – управление сертификатами безопасности • jvisualvm – профайлер • jhat – анализатор памяти • jstack – съемщик stack trace’ов • …
  • 16. Спецификация Java • Java Virtual Machine specification http://docs.oracle.com/javase/specs/jvms/se8/html/index.html • Java Language Specification http://docs.oracle.com/javase/specs/jls/se8/html/index.html • Java API http://docs.oracle.com/javase/8/docs/api/index.html • Code Conventions http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
  • 18. Встроенные типы • Примитивы: boolean, char, byte, short, int, long, float, double • Хранятся либо на стеке, либо как параметры объекта • При передаче как параметры значение копируется • Для хранения в куче производится упаковка (boxing) • void – тип отсутствия значения • Reference – ссылка на объект в куче • При передаче как параметр значение ссылки копируется
  • 19. Boolean • В JVM не реализован • Представляется как int • false – 0 • true – 1 • Массив boolean – это массив byte
  • 20. Char • Представлен как unsigned int16 • Представляет символы в кодировке UTF-16
  • 21. Целые числа • byte – signed int8 • short – signed int16 • int – signed int32 • long – signed int64 (два слота на стеке JVM) • Числа с плавающей точкой
  • 22. Числа с плавающей запятой • 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)
  • 23. Void • Значения не ожидается • Невозможно инстанцировать
  • 25. Объекты • Объект – абстракция элемента, участвующего в решении задачи • Всё* является объектом • Объект состоит из других объектов • У объекта есть тип (объект является экземпляром класса) • Все объекты типа могут получать одинаковые сообщения • Программа – это группа объектов, общающихся с помощью сообщений
  • 26. Классы 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; } }
  • 27. Ссылки (Reference) • Переменная содержит ссылку на объект в куче (не сам объект) • Ссылка типизирована, т.е. несет информацию о классе объекта • Пользовательский код работает только со ссылками • Прямая работа с памятью (указатели) недоступна • Значение ссылки по умолчанию – null
  • 28. Методы класса Object • equals(), hashCode() • clone() • toString() • finalize() • wait(), notify(), notifyAll() • getClass()