Введение в java - alexey vladykin · 2018-07-29 ·...

53
Введение в Java Алексей Владыкин 12 сентября 2013 Алексей Владыкин Введение в Java 12 сентября 2013 1 / 35

Upload: others

Post on 08-Jul-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Введение в Java

Алексей Владыкин

12 сентября 2013

Алексей Владыкин Введение в Java 12 сентября 2013 1 / 35

Page 2: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

1 Оргвопросы

2 Знакомьтесь: Java

3 История и эволюция

4 Особенности

5 Синтаксис языка

6 Стандартный инструментарий

Алексей Владыкин Введение в Java 12 сентября 2013 2 / 35

Page 3: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Оргвопросы

Алексей Владыкин Введение в Java 12 сентября 2013 3 / 35

Page 4: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Оргвопросы

О курсе

Лекции, практические сессии, домашние задания

Доступны материалы прошлого года (презентации и видео):http://compscicenter.ru/program/course/java2012

Алексей Владыкин Введение в Java 12 сентября 2013 4 / 35

Page 5: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Оргвопросы

Источники

Bruce EckelThinking in Java

Joshua BlochEffective Java

The Java Language Specificationhttp://docs.oracle.com/javase/specs/jls/se7/html/index.html

The Java Virtual Machine Specificationhttp://docs.oracle.com/javase/specs/jvms/se7/html/index.html

Алексей Владыкин Введение в Java 12 сентября 2013 5 / 35

Page 6: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

Алексей Владыкин Введение в Java 12 сентября 2013 6 / 35

Page 7: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

Один из самых популярных языков программированияПо индексу TIOBE на сентябрь 2013 — самый популярный

Используется в смарт-картах (в том числе SIM-картах), вмобильных устройствах, на настольных компьютерах, на серверах

Алексей Владыкин Введение в Java 12 сентября 2013 7 / 35

Page 8: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

Java — это не только ценный мех язык программирования, но и. . .

Обширная стандартная библиотекаСторонние библиотеки и фреймворкиИнструменты разработки (сборка, тестирование)Методология ООП, паттерны проектированияПлатформа для альтернативных языков(Clojure, Groovy, JRuby, Jython, Kotlin, Scala)

Алексей Владыкин Введение в Java 12 сентября 2013 8 / 35

Page 9: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

Редакции Java

Standard Edition (SE)Micro Edition (ME)подмножество SE + специфические библиотекиEnterprise Edition (EE)SE + дополнительные библиотеки и возможностиJava Cardсильно урезанная версия SE, изменения в виртуальной машинеJavaFXинструментарий для создания интерактивных графическихприложенийAndroid

Алексей Владыкин Введение в Java 12 сентября 2013 9 / 35

Page 10: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

JRE/JDK

Java Runtime Environment (JRE)виртуальная машина и стандартная библиотека классов длязапуска скомпилированных программ

Java Development Kit (JDK)набор инструментов для разработчиков (компилятор),включает в себя JRE

Алексей Владыкин Введение в Java 12 сентября 2013 10 / 35

Page 11: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Знакомьтесь: Java

Реализации Java

Oracle Javahttp://java.oracle.com/

OpenJDKhttp://openjdk.java.net/

IBM J9

Azul Zing

Apache Harmony (retired)

еще несколько десятков

Алексей Владыкин Введение в Java 12 сентября 2013 11 / 35

Page 12: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

James Gosling

Алексей Владыкин Введение в Java 12 сентября 2013 12 / 35

Page 13: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1991 внутренний проект Sun Microsystems по созданию платформы дляразработки встраиваемых систем — Green Project;вместо C++ решили создать новый язык, названный Oak

1992 первое демонстрационное устройство на новой платформе —PDA Star7

1993 попытка занять нишу ТВ-приставок для кабельного телевидения

1994 фокус на разработке интерактивных приложений (апплетов) длявеб-страниц;язык переименован в Java

1996 Java Development Kit 1.0

Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35

Page 14: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1991 внутренний проект Sun Microsystems по созданию платформы дляразработки встраиваемых систем — Green Project;вместо C++ решили создать новый язык, названный Oak

1992 первое демонстрационное устройство на новой платформе —PDA Star7

1993 попытка занять нишу ТВ-приставок для кабельного телевидения

1994 фокус на разработке интерактивных приложений (апплетов) длявеб-страниц;язык переименован в Java

1996 Java Development Kit 1.0

Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35

Page 15: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1991 внутренний проект Sun Microsystems по созданию платформы дляразработки встраиваемых систем — Green Project;вместо C++ решили создать новый язык, названный Oak

1992 первое демонстрационное устройство на новой платформе —PDA Star7

1993 попытка занять нишу ТВ-приставок для кабельного телевидения

1994 фокус на разработке интерактивных приложений (апплетов) длявеб-страниц;язык переименован в Java

1996 Java Development Kit 1.0

Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35

Page 16: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1991 внутренний проект Sun Microsystems по созданию платформы дляразработки встраиваемых систем — Green Project;вместо C++ решили создать новый язык, названный Oak

1992 первое демонстрационное устройство на новой платформе —PDA Star7

1993 попытка занять нишу ТВ-приставок для кабельного телевидения

1994 фокус на разработке интерактивных приложений (апплетов) длявеб-страниц;язык переименован в Java

1996 Java Development Kit 1.0

Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35

Page 17: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1991 внутренний проект Sun Microsystems по созданию платформы дляразработки встраиваемых систем — Green Project;вместо C++ решили создать новый язык, названный Oak

1992 первое демонстрационное устройство на новой платформе —PDA Star7

1993 попытка занять нишу ТВ-приставок для кабельного телевидения

1994 фокус на разработке интерактивных приложений (апплетов) длявеб-страниц;язык переименован в Java

1996 Java Development Kit 1.0

Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35

Page 18: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 19: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 20: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 21: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 22: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 23: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 24: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 25: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 26: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

История и эволюция

1996 Java Development Kit 1.0

1997 JDK 1.1, JIT-компиляция

1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE

2000 J2SE 1.3

2002 J2SE 1.4

2004 J2SE 5.0, изменение нумерации

2006 Java SE 6, уход от понятия «Java 2»

2011 Java SE 7

2014 Java SE 8

Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35

Page 27: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Алексей Владыкин Введение в Java 12 сентября 2013 15 / 35

Page 28: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Подход C/C++:исходный код → машинный код → процессор

программа работает только на той платформе,под которую она скомпилирована

Подход Java:исходный код → байткод виртуальной машины→ виртуальная машина → процессор

программа работает на любой платформе,где есть виртуальная машина Java“Write once, run anywhere!”

Алексей Владыкин Введение в Java 12 сентября 2013 16 / 35

Page 29: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Подход C/C++:исходный код → машинный код → процессор

программа работает только на той платформе,под которую она скомпилирована

Подход Java:исходный код → байткод виртуальной машины→ виртуальная машина → процессор

программа работает на любой платформе,где есть виртуальная машина Java“Write once, run anywhere!”

Алексей Владыкин Введение в Java 12 сентября 2013 16 / 35

Page 30: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Как быстро работает виртуальная машина?

Интерпретация байткода на порядок (10–20 раз) медленнееисполнения аналогичного машинного кода. . .

но есть Just-In-Time компиляциявиртуальная машина компилирует байткод в машинный кодиспользуется с JDK 1.1

а также HotSpotадаптивный оптимизирующий JIT-компиляториспользуется с JDK 1.3

в результате Java 7 всего в 1.5–2 раза медленнее C,а в некоторых тестах не хуже или даже быстрее!

Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35

Page 31: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Как быстро работает виртуальная машина?

Интерпретация байткода на порядок (10–20 раз) медленнееисполнения аналогичного машинного кода. . .

но есть Just-In-Time компиляциявиртуальная машина компилирует байткод в машинный кодиспользуется с JDK 1.1

а также HotSpotадаптивный оптимизирующий JIT-компиляториспользуется с JDK 1.3

в результате Java 7 всего в 1.5–2 раза медленнее C,а в некоторых тестах не хуже или даже быстрее!

Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35

Page 32: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Как быстро работает виртуальная машина?

Интерпретация байткода на порядок (10–20 раз) медленнееисполнения аналогичного машинного кода. . .

но есть Just-In-Time компиляциявиртуальная машина компилирует байткод в машинный кодиспользуется с JDK 1.1

а также HotSpotадаптивный оптимизирующий JIT-компиляториспользуется с JDK 1.3

в результате Java 7 всего в 1.5–2 раза медленнее C,а в некоторых тестах не хуже или даже быстрее!

Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35

Page 33: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Как быстро работает виртуальная машина?

Интерпретация байткода на порядок (10–20 раз) медленнееисполнения аналогичного машинного кода. . .

но есть Just-In-Time компиляциявиртуальная машина компилирует байткод в машинный кодиспользуется с JDK 1.1

а также HotSpotадаптивный оптимизирующий JIT-компиляториспользуется с JDK 1.3

в результате Java 7 всего в 1.5–2 раза медленнее C,а в некоторых тестах не хуже или даже быстрее!

Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35

Page 34: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Виртуальная машина и байткод

Как быстро работает виртуальная машина?

Интерпретация байткода на порядок (10–20 раз) медленнееисполнения аналогичного машинного кода. . .

но есть Just-In-Time компиляциявиртуальная машина компилирует байткод в машинный кодиспользуется с JDK 1.1

а также HotSpotадаптивный оптимизирующий JIT-компиляториспользуется с JDK 1.3

в результате Java 7 всего в 1.5–2 раза медленнее C,а в некоторых тестах не хуже или даже быстрее!

Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35

Page 35: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Сборка мусора

Подход C/C++:выделил память → поработал → освободил память

всё управление памятью в руках программиста

Подход Java:выделил память → поработал → молодец

виртуальная машина считает ссылки на каждый объектосвобождает память, когда ссылок больше нет

Алексей Владыкин Введение в Java 12 сентября 2013 18 / 35

Page 36: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Сборка мусора

Подход C/C++:выделил память → поработал → освободил память

всё управление памятью в руках программиста

Подход Java:выделил память → поработал → молодец

виртуальная машина считает ссылки на каждый объектосвобождает память, когда ссылок больше нет

Алексей Владыкин Введение в Java 12 сентября 2013 18 / 35

Page 37: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Безопасность

Верификация байткоданекорректный байткод будет отвергнут перед исполнением

Автоматическое управление памятьюнет арифметики указателейневозможно испортить память

Встроенный механизм управления правамиможно запустить код в «песочнице» без доступа к файлам, к сети,без возможности создавать потоки и т. п.

Алексей Владыкин Введение в Java 12 сентября 2013 19 / 35

Page 38: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Особенности

Многопоточное и распределенное программирование

Многопоточностьвстроенная поддержка потоковбогатая библиотека примитивов синхронизации

Распределенностьвстроенные сетевые возможностипересылка данных и объектов по сетиработа с удаленными объектами (RMI)

Алексей Владыкин Введение в Java 12 сентября 2013 20 / 35

Page 39: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Синтаксис языка

Алексей Владыкин Введение в Java 12 сентября 2013 21 / 35

Page 40: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Синтаксис языка

HelloWorld.java

public class HelloWorld {public static void main(String [] args) {

System.out.println("Hello world!");}

}

Java Coding Conventionshttp://www.oracle.com/technetwork/java/codeconv-138413.html

Алексей Владыкин Введение в Java 12 сентября 2013 22 / 35

Page 41: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Синтаксис языка

HelloWorldWithComments.java

/*** Prints "Hello world!" and terminates.* @author Alexey Vladykin*/

public class HelloWorldWithComments {/* Canonical example program since 1978,

many thanks to K&R :) */public static void main(String [] args) {

// todo: i18nSystem.out.println("Hello world!");

}}

Алексей Владыкин Введение в Java 12 сентября 2013 23 / 35

Page 42: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Синтаксис языка

PrintArguments.java

public class PrintArguments {public static void main(String [] args) {

for (int i = 0; i < args.length; ++i) {System.out.println("args["+i+"] = "+args[i]);

}}

}

Алексей Владыкин Введение в Java 12 сентября 2013 24 / 35

Page 43: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Синтаксис языка

BottlesOfBeer.java

public class BottlesOfBeer {public static void main(String args []) {

int k = 99;while (k > 0) {

System.out.printf("%d bottle%s of beer on the wall ,\n" +"%d bottle%s of beer ,\n" +"take one down , pass it around ,\n" +"%d bottle%s of beer on the wall.\n\n",k,((k != 1) ? "s" : ""),k,((k != 1) ? "s" : ""),--k,((k != 1) ? "s" : "")

);}System.out.println("No more bottles of beer on the wall!");

}}

Алексей Владыкин Введение в Java 12 сентября 2013 25 / 35

Page 44: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

Алексей Владыкин Введение в Java 12 сентября 2013 26 / 35

Page 45: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

javac

Java CompilerКомпилирует исходный код (*.java) в байткод (*.class)

javac MyClass.java YetAnotherClass.java

javac -d classes MyClass.java

javac -classpath library.jar -d classes MyClass.java

javac -version

Алексей Владыкин Введение в Java 12 сентября 2013 27 / 35

Page 46: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

Отступление: о classpath

Все используемые классы должны быть доступны в classpathВсегда содержит классы стандартной библиотеки(jre/lib/rt.jar)По умолчанию содержит текущую директорию «.»

Задается как список директорий и/или JAR-файловРазделитель списка

«:» в Unix/Linux/Mac OS X«;» в Windows

Алексей Владыкин Введение в Java 12 сентября 2013 28 / 35

Page 47: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

jar

Java Archive ToolСоздает и распаковывает JAR-файлы

jar cf library.jar -C classes_dir .

jar cfm library.jar manifest.mf -C classes_dir .

jar cfe library.jar MyMainClass -C classes_dir .

jar tf library.jar

jar xf library.jar

Алексей Владыкин Введение в Java 12 сентября 2013 29 / 35

Page 48: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

Отступление: о MANIFEST.MF

Любой JAR-файл содержит META-INF/MANIFEST.MF

Пример:

Manifest -Version: 1.0Created -By: 1.6.0 _35 (Sun Microsystems Inc.)

Main-Class — имя класса с методом main

Class-Path — список необходимых JAR’ов, через пробел

Алексей Владыкин Введение в Java 12 сентября 2013 30 / 35

Page 49: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

java

Java Virtual MachineИсполняет байткодГлавный класс должен иметь методpublic static void main(String[] args)

java MyClass

java -classpath classes_dir;library.jar MyClass

java -jar library_with_main_class.jar

java -version

Алексей Владыкин Введение в Java 12 сентября 2013 31 / 35

Page 50: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

javap

Java DisassemblerВыводит class-файлы в читабельном виде

javap MyClass

javap -c MyClass

javap -v MyClass

Алексей Владыкин Введение в Java 12 сентября 2013 32 / 35

Page 51: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

Среды разработки

EclipseIntelliJ IDEANetBeans

Подсветка синтаксисаАвтодополнение, гиперссылкиРефакторингИнтерактивный отладчик

Алексей Владыкин Введение в Java 12 сентября 2013 33 / 35

Page 52: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Стандартный инструментарий

Инструменты для сборки

AntGradleMaven

ГибкостьНезависимость от IDEВозможность сборки в командной строке

Алексей Владыкин Введение в Java 12 сентября 2013 34 / 35

Page 53: Введение в Java - Alexey Vladykin · 2018-07-29 · (Clojure,Groovy,JRuby,Jython,Kotlin,Scala) Алексей Владыкин Введение в Java 12 сентября

Что сегодня узнали

Что такое Java и с чем её едят

В чем особенности Java и отличия от C/C++

Как выглядят программы на Java

Как собрать программу на Java

Как запустить программу на Java

Алексей Владыкин Введение в Java 12 сентября 2013 35 / 35