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

Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Введение в Java

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

12 сентября 2012

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

Page 2: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 3: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 4: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

1996 Java Development Kit 1.0

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

Page 5: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

1996 Java Development Kit 1.0

1997 JDK 1.1

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

2013 Java SE 8

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

Page 6: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

Page 7: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 8: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

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

Page 9: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

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

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

Page 10: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

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

Page 11: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

Page 12: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

Page 13: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Разновидности Java

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 14: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Разновидности Java

JRE/JDK

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

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

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

Page 15: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Разновидности Java

Редакции Java

Standard Edition (SE)

Micro Edition (ME)подмножество SE + специфические библиотеки

Enterprise Edition (EE)SE + дополнительные библиотеки и возможности

Java Cardсильно урезанная версия SE, изменения в виртуальной машине

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

Page 16: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Разновидности Java

Реализации Java

Oracle Javahttp://java.oracle.com/

OpenJDKhttp://openjdk.java.net/

IcedTeahttp://icedtea.classpath.org/

IBM J9

Apache Harmony (retired)

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

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

Page 17: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Экосистема Java

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 18: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Экосистема Java

Библиотеки

Библиотеки общего назначенияApache Commons Lang, Google Guava, Joda Time, . . .

Библиотеки для логированияApache Log4J, SLF4J, LogBack, . . .

Библиотеки для модульного тестированияJUnit, TestNG, Mockito, JMock, Hamcrest, . . .

Библиотеки для работы с байткодомASM, BCEL, Javassist, . . .

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

Page 19: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Экосистема Java

Системы сборки

Apache AntИмперативное описание сборки

Apache IvyУправление зависимостями для Ant

Apache MavenДекларативное описание сборки и управление зависимостями

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

Page 20: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Экосистема Java

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

Eclipse IDEIntelliJ IDEANetBeans IDE

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

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

Page 21: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Экосистема Java

Альтернативные языки

Groovy, Kotlin, Scala

ClojureДиалект LISP

JRubyРеализация Ruby на JVM

JythonРеализация Python на JVM

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

Page 22: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Язык Java

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 23: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Язык Java

HelloWorld.java

pub l i c c l a s s He l loWor ld {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

System . out . p r i n t l n ( " He l l o wor ld ! " ) ;}

}

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

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

Page 24: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Язык Java

HelloWorldWithComments.java

/*** P r i n t s " He l l o wor ld !" and t e rm i n a t e s .* @author A l exey V l adyk i n*/

pub l i c c l a s s HelloWorldWithComments {/* Canon i c a l example program s i n c e 1978 ,

many thanks to K&R : ) */pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

// todo : i 18nSystem . out . p r i n t l n ( " He l l o wor ld ! " ) ;

}}

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

Page 25: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Язык Java

PrintArguments.java

pub l i c c l a s s Pr intArguments {pub l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {

fo r ( i n t i = 0 ; i < a rg s . l e n g t h ; ++i ) {System . out . p r i n t l n ( " a r g s [ "+i+" ] = "+a rg s [ i ] ) ;

}}

}

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

Page 26: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

Язык Java

BottlesOfBeer.java

pub l i c c l a s s Bot t l e sO fBee r {pub l i c s t a t i c vo id main ( S t r i n g a r g s [ ] ) {

i n t k = 99 ;whi le ( k > 0) {

System . out . p r i n t f ("%d b o t t l e%s o f bee r on the wa l l , \ n" +"%d b o t t l e%s o f beer , \ n" +" take one down , pas s i t around , \ n" +"%d b o t t l e%s o f bee r on the wa l l . \ n\n" ,k ,( ( k != 1) ? " s " : "" ) ,k ,( ( k != 1) ? " s " : "" ) ,−−k ,( ( k != 1) ? " s " : "" )

) ;}System . out . p r i n t l n ( "No more b o t t l e s o f bee r on the wa l l ! " ) ;

}}

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

Page 27: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

2 Особенности Java

3 Разновидности Java

4 Экосистема Java

5 Язык Java

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

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

Page 28: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция 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 12 сентября 2012 28 / 33

Page 29: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

Page 30: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция 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 12 сентября 2012 30 / 33

Page 31: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

Пример:

Man i f e s t−Ve r s i o n : 1 . 0Created−By : 1 . 6 . 0_35 ( Sun Mic rosys tems I n c . )

Можно получить доступ к манифесту из программы

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

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

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

Page 32: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

jar

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

jar cf library.jar -C classes_dir .

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

jar tf library.jar

jar xf library.jar

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

Page 33: Введение в Java - alexey.vladykin.name · Алексей Владыкин Введение в Java 12 сентября 2012 4 / 33. История и эволюция Java

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

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

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

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

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

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

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