Skip to content

Latest commit

 

History

History
312 lines (238 loc) · 23.6 KB

00_intro.md

File metadata and controls

312 lines (238 loc) · 23.6 KB

Синтаксис Java. ООП. Тестирование и отладка

Build Status Coverage Status

TODO: перед тем, как мы начнём

Знакомство

Работаем в Oracle

Обзор сайтов и литературы по Java и ООП

Сайты

Скачивание, установка и настройка Java

install_java.cmd

REM Командный файл для "тихой" установки Java под Windows
REM /s - silent mode (не задавая вопросов)
REM INSTALLDIR - куда ставить JDK 
REM INSTALLDIRPUBJRE - куда ставить JRE
jdk-8u20-windows-x64.exe /s INSTALLDIR=D:\JDK /INSTALLDIRPUBJRE=D:\JRE 

Для Windows x64:

  • Java 64 устанавливается в: C:\Program Files\Java
  • Java x86 устанавливается в: C:\Program Files (x86)\Java

Почему именно Java? (преимущества)

Что такое Java? История создания языка

История Java началась в 1991 году, когда группа инженеров из компании Sun под руководством Патрика Нотона (Patrick Naughton) и члена Совета директоров Джеймса Гослинга (James Gosling) занялась разработкой небольшого языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения (cable TV switchboxes).

Поскольку такие устройства не потребляют много энергии и не имеют больших микросхем памяти, язык должен был быть маленьким и генерировать очень компактные программы. Кроме того, поскольку разные производители могут выбирать разные центральные процессоры (Central Processor Unit - CPU), было важно не завязнуть в какой-то одной архитектуре компьютеров. Проект получил кодовое название "Green".

Стремясь изобрести небольшой, компактный и машинонезависимый код, разработчики возродили модель, использованную при реализации первых версий языка Pascal на заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал машинонезависимый язык, генерирующий промежуточный код для некоей гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. Такие гипотетические машины часто называются виртуальными - например, виртуальная машина языка Java, или JVM. Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор. Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило их основную проблему.

Однако большинство сотрудников компании Sun имели опыт работы с операционной системой UNIX, поэтому в основу разрабатываемого ими языка бь л положен язык C++, а не Pascal. В частности, они сделали язык объектно-, а не процедурно-ориентированным.

Как сказал Гослинг в своем интервью: "Язык — это всегда средство, а не цель". Сначала Гослинг решил назвать его "Oak" ("Дуб"). (Возможно потому, что он любил смотреть на дуб, растущий прямо под окнами его офиса в компании Sun.) Потом сотрудники компании Sun узнали, что слово Oak уже используется в качестве имени ранее созданного языка программирования, и изменили название Java.

В 1992 году в рамках проекта Green была выпущена первая продукция, названная "*7". Это было средство для чрезвычайно интеллектуального дистанционного управления. (Оно имело мощность рабочей станции SPARK, помещаясь в коробочке размером 6x4x4 дюйма.) К сожалению, ни одна из компаний-производителей электронной техники не заинтересовалась этим изобретением.

Затем группа стала заниматься разработкой устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. (Забавно, что одной из компаний, отказавшихся подписать с ними контракт, руководил Джим Кларк (Jim Clark) — основатель компании Netscape, впоследствии сделавшей очень много для успеха языка Java.)

Весь 1993 год и половину 1994 года продолжались безрезультатные поиски покупателей продукции, разработанной в рамках проекта "Green" (под новым названием "First Person, Inc."). (Патрик Нотон, один из основателей группы, впоследствии в основном занимавшийся маркетингом, налетал в общей сложности более 300 тысяч миль, пытаясь продать разработанную технологию.) Проект "First Person, Inc." был прекращен в 1994 году.

Тем временем в рамках Интернет разрасталась сеть World Wide Web. Ключом к этой сети является броузер, превращающий гипертекст в изображение на экране. В 1994 году большинство людей пользовалось броузером Mosaic, некоммерческим Web-броузером, разработанным в суперкомпьютерном центре Университета штата Иллинойс (University of Illinois) в 1993 году. (Частично этот броузер был написан Марком Андреессеном (Mark Andreessen) за 6,85 доллара в час. В то время Марк заканчивал университет и броузер был его дипломной работой. Затем он стал одним из основателей и главным программистом компании Netscape, и к нему пришли слава и богатство.)

В своем интервью журналу Sun World Гослинг сказал, что в середине 1994 года разработчики языка поняли: "Нам нужно создать действительно крутой броузер. Такой броузер должен представлять собой одно из немногих приложений модной клиент-серверной технологии, в которой жизненно важным было бы именно то, что мы сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность — вопросы, не являвшиеся чрезвычайно важными для рабочих станций. И мы создали такой броузер".

На самом деле броузер был разработан Патриком Нотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он превратился в современный броузер HotJava. Этот броузер был написан на языке Java, чтобы продемонстрировать всю его мощь. Однако разработчики не забывали о мощных средствах, которые теперь называются апплетами, наделив свой броузер способностью выполнять код внутри Web-страниц. "Демонстрация технологии" была представлена на выставке Sun World '95 23 мая 1995 года и вызвала всеобщее помешательство на почве язака Java, продолжающееся и поныне.

Компания Sun выпустила первую версию языка Java в начале 1996 года. Через несколько месяцев после нее появилась версия Java 1.02. Люди быстро поняли, что версия Java 1.02 не подходит для разработки серьезных приложений. Конечно, эту версию можно применять для разработки Web-страниц с пляшущими человечками, однако в версии Java 1.02 ничего нельзя даже напечатать.

Честно говоря, версия Java 1.02 была еще сырой. Ее преемница, версия Java 1.1, заполнила большинство зияющих провалов, намного улучшив возможность отражения и добавив новую модель событий для программирования графического пользовательского интерфейса. Несмотря на это, она все еще была довольно ограниченной.

Выпуск версии Java 1.2 стал основной новостью конференции JavaOne в 1998 году. В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены сложным и масштабным инструментарием. Это был шаг вперед, к реализации лозунга "Write Once, Run Anywhere" ™ ("Один раз напиши— и везде выполняй"), выдвинутого при разработке предыдущих версий.

В декабре 1998 года через три дня (!) после выхода в свет название новой версии было изменено на громоздкое словосочетание Java 2 Standart Edition Software Development Kit Version 1.2 (Стандартное издание пакета инструментальных средств для разработки программного обеспечения на языке Java 2, версия 1.2).

Кроме стандартного издания пакета ("Standart Edition") были предложены еще два варианта: "микроиздание" ("Micro Edition") для портативных устройств, например, для мобильных телефонов, "промышленное издание" ("Enterprise Edition") для создания серверных приложений.

Версии 1.3 и 1.4 стандартного издания пакета инструментальных средств намного совершеннее первоначального выпуска языка Java 2. Они обладают новыми возможностями и, разумеется, содержат намного меньше ошибок.

Платформа Java. JVM, сборка мусора, оптимизация, прогрев. JDK, JRE

JVM - Java Virtual Machine.

  • MyClass.java - файл с исходным кодом.

  • javac MyClass.java - Java Compiler - компилятор.

  • Байт-код: MyClass.class.

  • java MyClass - выполняем программу.

  • Запуск JVM

  • Внутри JVM запускается наша программа.

  • JDK - Java Development Kit (для компиляции)

  • JRE - Java Runtime Environment (для выполнения Java-программ)

Принцип: Write once, run anywhere (WORA)

  • Сборка мусора - new - создание нового объекта Сборщик мусора (GC) удаляет все объекты на которые не ссылается программа при следующем цикле сборки мусора.

Память:

  • Стек - локальные переменные
  • Куча (динамическая память, heap) - new / Garbage Collector
  • Статическая память - при загрузке классов.

Оптимизация, прогрев

  • Перейти в папку JDK (например: D:\JDK\bin).
  • Создать файл HW.java
public class HW {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}
  • Откомпилировать javac HW.java
  • Убедиться, что появился файл: java.class
  • Запустить: java HW
  • Посмотреть на результаты выполнения программы.

https://lisiynos.googlecode.com/git/java/java_1.html

Варианты поставки Java: ME, SE, EE

http://docs.oracle.com/javase/8/docs/

Java ME (Java 2 Micro Edition, J2ME) - подмножество платформы Java для устройств, ограниченных в ресурсах, например: сотовых телефонов, карманных персональных компьютеров, ресиверов цифрового телевидения, проигрывателей дисков Blu-ray и т.д. Язык Java тот же, минимум библиотек.

Java SE (Java Platform, Standard Edition, Java 2 Standard Edition, J2SE) - стандартная версия платформы Java 2, предназначенная для создания и исполнения апплетов и приложений, рассчитанных на индивидуальное пользование или на использование в масштабах малого предприятия.

Java EE (Java Platform, Enterprise Edition, Java 2 Enterprise Edition, J2EE)

  • набор спецификаций и соответствующей документации для языка Java, описывающей архитектуру серверной платформы для задач средних и крупных предприятий.

Перспективы: Java 9 - модульная Java http://openjdk.java.net/jeps/200

Установка и настройка IntelliJ IDEA, создание проекта

Первый проект:

public class Main {
    // psvm
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

.iml - расширение для Idea проектов.

Установка и настройка Apache Maven. Центральный репозиторий. POM (project object model)

  • http://maven.apache.org/ - скачивание maven
  • Распаковать в папку на диске, например в C:\apache-maven-3.2.3
  • Добавить в пути (в переменную окружения PATH) - C:\apache-maven-3.2.3\bin
  • Устанавливаем переменную окружения: M2_HOME=C:\apache-maven-3.2.3

Установка и настройка Git + GitHub. Клиент git для Windows

Установка и настройка web-сервера Apache Tomcat

JavaDoc

Javadoc - генератор документации в HTML-формате из комментариев исходного кода на Java от Sun Microsystems. Стандарт для документирования классов Java. Большинство сред разработки программного обеспечения автоматически генерируют HTML-документацию, используя Javadoc.

Javadoc также предоставляет API для создания доклетов и тэглетов, которые позволяют программисту анализировать структуру Java-приложения.

Применяют для документирования:

  • классов
  • интерфейсов
  • полей (переменных)
  • конструкторов
  • методов
  • пакетов

В каждом случае комментарий должен находиться перед документируемым элементом.

Виды памяти: heap, stack. Опции при запуске JVM для настройки размера памяти

java -Xss

  • Xss - размер стека Куча:
  • Xmx - размер кучи (heap) java -Xms6291456 -cp my.jar MainClass - запуск приложения 6291456 байт java -Xms6144k -- 6144k java -Xms6m - 6 мегабайт
    java -Xms2G - 2 гигабайта -Xmx83886080 -Xmx81920k -Xmx80m -XX:MaxPermSize=128M
  • -Xmnsize - initial and maximum size (in bytes) of the heap for the young generation (nursery)
  • -Xmssize - размер кучи (heap)
  • -Xsssize - размер стека для потока
  • -Xmx8G - размер памяти, которую можно использовать JVM (всего)

256 мегабайт в разных единицах: -Xmn256m -Xmn262144k -Xmn268435456

Составить строчку с настройками Java-машины: http://jvmmemory.com/

Что делать если получаем StackOverflowException?

  • Реально нужно больше стека: увеличить с помощью -Xss
  • Избавится от бесконечной рекурсии

Какие переменные хранятся в стеке?

  • Все локальные переменные метода
  • Все параметры метода