Введение в Java - Alexey Vladykin · Введение в Java...

46
Введение в Java Алексей Владыкин 8 сентября 2014 Алексей Владыкин Введение в Java 8 сентября 2014 1 / 28

Transcript of Введение в Java - Alexey Vladykin · Введение в Java...

Page 1: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Введение в Java

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

8 сентября 2014

Алексей Владыкин Введение в Java 8 сентября 2014 1 / 28

Page 2: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

4 Hello World

5 Инструменты разработчика

Алексей Владыкин Введение в Java 8 сентября 2014 2 / 28

Page 3: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

Алексей Владыкин Введение в Java 8 сентября 2014 3 / 28

Page 4: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

Почему стоит изучать Java?

Один из самых популярных и востребованных языковпрограммирования. Много лет в верхних строчках индекса TIOBE

На Java пишут:высоконагруженные системы (Одноклассники)корпоративные приложения (Confluence, JIRA)настольные приложения (Minecraft!)программы и игры для телефонов, в том числе под Androidапплеты для смарт-картинтерактивный контент для Blu-ray

Язык развивается и совершенствуется

Алексей Владыкин Введение в Java 8 сентября 2014 4 / 28

Page 5: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 5 / 28

Page 6: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

Что мы будем изучать?

Java Standard Edition (SE)(а есть еще Micro Edition, Enterprise Edition, JavaCard, Android)

Реализация от Sun/Oracle(а есть еще Oracle JRockit, IBM J9, Azul Zing, Apache Harmony)

Несколько самых распространенных сторонних библиотек иинструментов

Алексей Владыкин Введение в Java 8 сентября 2014 6 / 28

Page 7: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

James Gosling

Алексей Владыкин Введение в Java 8 сентября 2014 7 / 28

Page 8: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 9: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 10: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 11: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 12: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 13: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 14: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 15: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 16: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 17: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 18: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 19: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 20: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 21: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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 8 сентября 2014 9 / 28

Page 22: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

Алексей Владыкин Введение в Java 8 сентября 2014 10 / 28

Page 23: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

Традиционный подход:исходный код → машинный код → процессор

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 11 / 28

Page 24: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

Традиционный подход:исходный код → машинный код → процессор

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 11 / 28

Page 25: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

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

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

Page 26: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

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

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

Page 27: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

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

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

Page 28: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

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

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

Page 29: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

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

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

Page 30: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 13 / 28

Page 31: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 13 / 28

Page 32: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 14 / 28

Page 33: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Особенности

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

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 15 / 28

Page 34: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Hello World

Алексей Владыкин Введение в Java 8 сентября 2014 16 / 28

Page 35: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Hello World

HelloWorld.java

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

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

}

Java Coding ConventionsDemo

Алексей Владыкин Введение в Java 8 сентября 2014 17 / 28

Page 36: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Hello World

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

EclipseIntelliJ IDEANetBeans

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

Алексей Владыкин Введение в Java 8 сентября 2014 18 / 28

Page 37: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Hello World

JRE/JDK

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 19 / 28

Page 38: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

Алексей Владыкин Введение в Java 8 сентября 2014 20 / 28

Page 39: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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 8 сентября 2014 21 / 28

Page 40: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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

Все используемые классы должны быть доступны в classpathПо умолчанию содержит текущую директорию «.» и классыстандартной библиотеки

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 22 / 28

Page 41: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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 8 сентября 2014 23 / 28

Page 42: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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

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

Пример:

Manifest -Version: 1.0Created -By: 1.8.0 _05 (Oracle Corporation)

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

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

Алексей Владыкин Введение в Java 8 сентября 2014 24 / 28

Page 43: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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 8 сентября 2014 25 / 28

Page 44: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

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

Ant — build.xml

Gradle — build.gradle

Maven — pom.xml

Автоматизация процесса сборки(компиляция, запуск тестов, генерация документации и т.п.)Независимость от среды разработкиВозможность сборки в командной строке

Алексей Владыкин Введение в Java 8 сентября 2014 26 / 28

Page 45: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

Инструменты разработчика

Maven

<?xml version="1.0" encoding="UTF -8"?><project xmlns="http://maven.apache.org/POM /4.0.0"

xmlns:xsi="http://www.w3.org /2001/ XMLSchema -instance"xsi:schemaLocation="http:// maven.apache.org/POM /4.0.0

http: // maven.apache.org/xsd/maven -4.0.0. xsd">

<modelVersion >4.0.0 </modelVersion >

<groupId >ru.compscicenter.java2014 </groupId ><artifactId >hello -world </artifactId ><version >1.0</version >

</project >

mvn clean install

Demo

Алексей Владыкин Введение в Java 8 сентября 2014 27 / 28

Page 46: Введение в Java - Alexey Vladykin · Введение в Java АлексейВладыкин 8сентября2014 Алексей Владыкин Введение в Java

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

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

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

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

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