Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2013 09 12_java_lecture_01

3,756 views

Published on

  • Be the first to comment

2013 09 12_java_lecture_01

  1. 1. Введение в Java Алексей Владыкин 12 сентября 2013 Алексей Владыкин Введение в Java 12 сентября 2013 1 / 35
  2. 2. 1 Оргвопросы 2 Знакомьтесь: Java 3 История и эволюция 4 Особенности 5 Синтаксис языка 6 Стандартный инструментарий Алексей Владыкин Введение в Java 12 сентября 2013 2 / 35
  3. 3. Оргвопросы Алексей Владыкин Введение в Java 12 сентября 2013 3 / 35
  4. 4. Оргвопросы О курсе Лекции, практические сессии, домашние задания Доступны материалы прошлого года (презентации и видео): http://compscicenter.ru/program/course/java2012 Алексей Владыкин Введение в Java 12 сентября 2013 4 / 35
  5. 5. Оргвопросы Источники Bruce Eckel Thinking in Java Joshua Bloch Effective Java The Java Language Specification http://docs.oracle.com/javase/specs/jls/se7/html/index.html The Java Virtual Machine Specification http://docs.oracle.com/javase/specs/jvms/se7/html/index.html Алексей Владыкин Введение в Java 12 сентября 2013 5 / 35
  6. 6. Знакомьтесь: Java Алексей Владыкин Введение в Java 12 сентября 2013 6 / 35
  7. 7. Знакомьтесь: Java Один из самых популярных языков программирования По индексу TIOBE на сентябрь 2013 — самый популярный Используется в смарт-картах (в том числе SIM-картах), в мобильных устройствах, на настольных компьютерах, на серверах Алексей Владыкин Введение в Java 12 сентября 2013 7 / 35
  8. 8. Знакомьтесь: Java Java — это не только ценный мех язык программирования, но и. . . Обширная стандартная библиотека Сторонние библиотеки и фреймворки Инструменты разработки (сборка, тестирование) Методология ООП, паттерны проектирования Платформа для альтернативных языков (Clojure, Groovy, JRuby, Jython, Kotlin, Scala) Алексей Владыкин Введение в Java 12 сентября 2013 8 / 35
  9. 9. Знакомьтесь: Java Редакции Java Standard Edition (SE) Micro Edition (ME) подмножество SE + специфические библиотеки Enterprise Edition (EE) SE + дополнительные библиотеки и возможности Java Card сильно урезанная версия SE, изменения в виртуальной машине JavaFX инструментарий для создания интерактивных графических приложений Android Алексей Владыкин Введение в Java 12 сентября 2013 9 / 35
  10. 10. Знакомьтесь: Java JRE/JDK Java Runtime Environment (JRE) виртуальная машина и стандартная библиотека классов для запуска скомпилированных программ Java Development Kit (JDK) набор инструментов для разработчиков (компилятор), включает в себя JRE Алексей Владыкин Введение в Java 12 сентября 2013 10 / 35
  11. 11. Знакомьтесь: Java Реализации Java Oracle Java http://java.oracle.com/ OpenJDK http://openjdk.java.net/ IBM J9 Azul Zing Apache Harmony (retired) еще несколько десятков Алексей Владыкин Введение в Java 12 сентября 2013 11 / 35
  12. 12. История и эволюция James Gosling Алексей Владыкин Введение в Java 12 сентября 2013 12 / 35
  13. 13. История и эволюция 1991 внутренний проект Sun Microsystems по созданию платформы для разработки встраиваемых систем — Green Project; вместо C++ решили создать новый язык, названный Oak Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35
  14. 14. История и эволюция 1991 внутренний проект Sun Microsystems по созданию платформы для разработки встраиваемых систем — Green Project; вместо C++ решили создать новый язык, названный Oak 1992 первое демонстрационное устройство на новой платформе — PDA Star7 Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35
  15. 15. История и эволюция 1991 внутренний проект Sun Microsystems по созданию платформы для разработки встраиваемых систем — Green Project; вместо C++ решили создать новый язык, названный Oak 1992 первое демонстрационное устройство на новой платформе — PDA Star7 1993 попытка занять нишу ТВ-приставок для кабельного телевидения Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35
  16. 16. История и эволюция 1991 внутренний проект Sun Microsystems по созданию платформы для разработки встраиваемых систем — Green Project; вместо C++ решили создать новый язык, названный Oak 1992 первое демонстрационное устройство на новой платформе — PDA Star7 1993 попытка занять нишу ТВ-приставок для кабельного телевидения 1994 фокус на разработке интерактивных приложений (апплетов) для веб-страниц; язык переименован в Java Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35
  17. 17. История и эволюция 1991 внутренний проект Sun Microsystems по созданию платформы для разработки встраиваемых систем — Green Project; вместо C++ решили создать новый язык, названный Oak 1992 первое демонстрационное устройство на новой платформе — PDA Star7 1993 попытка занять нишу ТВ-приставок для кабельного телевидения 1994 фокус на разработке интерактивных приложений (апплетов) для веб-страниц; язык переименован в Java 1996 Java Development Kit 1.0 Алексей Владыкин Введение в Java 12 сентября 2013 13 / 35
  18. 18. История и эволюция 1996 Java Development Kit 1.0 Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  19. 19. История и эволюция 1996 Java Development Kit 1.0 1997 JDK 1.1, JIT-компиляция Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  20. 20. История и эволюция 1996 Java Development Kit 1.0 1997 JDK 1.1, JIT-компиляция 1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  21. 21. История и эволюция 1996 Java Development Kit 1.0 1997 JDK 1.1, JIT-компиляция 1998 J2SE 1.2, «Java 2», разделение на ME/SE/EE 2000 J2SE 1.3 Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  22. 22. История и эволюция 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 Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  23. 23. История и эволюция 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, изменение нумерации Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  24. 24. История и эволюция 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» Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  25. 25. История и эволюция 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 Алексей Владыкин Введение в Java 12 сентября 2013 14 / 35
  26. 26. История и эволюция 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
  27. 27. Особенности Алексей Владыкин Введение в Java 12 сентября 2013 15 / 35
  28. 28. Особенности Виртуальная машина и байткод Подход C/C++: исходный код → машинный код → процессор программа работает только на той платформе, под которую она скомпилирована Алексей Владыкин Введение в Java 12 сентября 2013 16 / 35
  29. 29. Особенности Виртуальная машина и байткод Подход C/C++: исходный код → машинный код → процессор программа работает только на той платформе, под которую она скомпилирована Подход Java: исходный код → байткод виртуальной машины → виртуальная машина → процессор программа работает на любой платформе, где есть виртуальная машина Java “Write once, run anywhere!” Алексей Владыкин Введение в Java 12 сентября 2013 16 / 35
  30. 30. Особенности Виртуальная машина и байткод Как быстро работает виртуальная машина? Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35
  31. 31. Особенности Виртуальная машина и байткод Как быстро работает виртуальная машина? Интерпретация байткода на порядок (10–20 раз) медленнее исполнения аналогичного машинного кода. . . Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35
  32. 32. Особенности Виртуальная машина и байткод Как быстро работает виртуальная машина? Интерпретация байткода на порядок (10–20 раз) медленнее исполнения аналогичного машинного кода. . . но есть Just-In-Time компиляция виртуальная машина компилирует байткод в машинный код используется с JDK 1.1 Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35
  33. 33. Особенности Виртуальная машина и байткод Как быстро работает виртуальная машина? Интерпретация байткода на порядок (10–20 раз) медленнее исполнения аналогичного машинного кода. . . но есть Just-In-Time компиляция виртуальная машина компилирует байткод в машинный код используется с JDK 1.1 а также HotSpot адаптивный оптимизирующий JIT-компилятор используется с JDK 1.3 Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35
  34. 34. Особенности Виртуальная машина и байткод Как быстро работает виртуальная машина? Интерпретация байткода на порядок (10–20 раз) медленнее исполнения аналогичного машинного кода. . . но есть Just-In-Time компиляция виртуальная машина компилирует байткод в машинный код используется с JDK 1.1 а также HotSpot адаптивный оптимизирующий JIT-компилятор используется с JDK 1.3 в результате Java 7 всего в 1.5–2 раза медленнее C, а в некоторых тестах не хуже или даже быстрее! Алексей Владыкин Введение в Java 12 сентября 2013 17 / 35
  35. 35. Особенности Сборка мусора Подход C/C++: выделил память → поработал → освободил память всё управление памятью в руках программиста Алексей Владыкин Введение в Java 12 сентября 2013 18 / 35
  36. 36. Особенности Сборка мусора Подход C/C++: выделил память → поработал → освободил память всё управление памятью в руках программиста Подход Java: выделил память → поработал → молодец виртуальная машина считает ссылки на каждый объект освобождает память, когда ссылок больше нет Алексей Владыкин Введение в Java 12 сентября 2013 18 / 35
  37. 37. Особенности Безопасность Верификация байткода некорректный байткод будет отвергнут перед исполнением Автоматическое управление памятью нет арифметики указателей невозможно испортить память Встроенный механизм управления правами можно запустить код в «песочнице» без доступа к файлам, к сети, без возможности создавать потоки и т. п. Алексей Владыкин Введение в Java 12 сентября 2013 19 / 35
  38. 38. Особенности Многопоточное и распределенное программирование Многопоточность встроенная поддержка потоков богатая библиотека примитивов синхронизации Распределенность встроенные сетевые возможности пересылка данных и объектов по сети работа с удаленными объектами (RMI) Алексей Владыкин Введение в Java 12 сентября 2013 20 / 35
  39. 39. Синтаксис языка Алексей Владыкин Введение в Java 12 сентября 2013 21 / 35
  40. 40. Синтаксис языка HelloWorld.java public class HelloWorld { public static void main(String [] args) { System.out.println("Hello world!"); } } Java Coding Conventions http://www.oracle.com/technetwork/java/codeconv-138413.html Алексей Владыкин Введение в Java 12 сентября 2013 22 / 35
  41. 41. Синтаксис языка 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: i18n System.out.println("Hello world!"); } } Алексей Владыкин Введение в Java 12 сентября 2013 23 / 35
  42. 42. Синтаксис языка 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
  43. 43. Синтаксис языка 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 .nn", 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
  44. 44. Стандартный инструментарий Алексей Владыкин Введение в Java 12 сентября 2013 26 / 35
  45. 45. Стандартный инструментарий 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
  46. 46. Стандартный инструментарий Отступление: о classpath Все используемые классы должны быть доступны в classpath Всегда содержит классы стандартной библиотеки (jre/lib/rt.jar) По умолчанию содержит текущую директорию «.» Задается как список директорий и/или JAR-файлов Разделитель списка «:» в Unix/Linux/Mac OS X «;» в Windows Алексей Владыкин Введение в Java 12 сентября 2013 28 / 35
  47. 47. Стандартный инструментарий 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
  48. 48. Стандартный инструментарий Отступление: о MANIFEST.MF Любой JAR-файл содержит META-INF/MANIFEST.MF Пример: Manifest -Version: 1.0 Created -By: 1.6.0 _35 (Sun Microsystems Inc.) Main-Class — имя класса с методом main Class-Path — список необходимых JAR’ов, через пробел Алексей Владыкин Введение в Java 12 сентября 2013 30 / 35
  49. 49. Стандартный инструментарий 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
  50. 50. Стандартный инструментарий javap Java Disassembler Выводит class-файлы в читабельном виде javap MyClass javap -c MyClass javap -v MyClass Алексей Владыкин Введение в Java 12 сентября 2013 32 / 35
  51. 51. Стандартный инструментарий Среды разработки Eclipse IntelliJ IDEA NetBeans Подсветка синтаксиса Автодополнение, гиперссылки Рефакторинг Интерактивный отладчик Алексей Владыкин Введение в Java 12 сентября 2013 33 / 35
  52. 52. Стандартный инструментарий Инструменты для сборки Ant Gradle Maven Гибкость Независимость от IDE Возможность сборки в командной строке Алексей Владыкин Введение в Java 12 сентября 2013 34 / 35
  53. 53. Что сегодня узнали Что такое Java и с чем её едят В чем особенности Java и отличия от C/C++ Как выглядят программы на Java Как собрать программу на Java Как запустить программу на Java Алексей Владыкин Введение в Java 12 сентября 2013 35 / 35

×