Изучаем java

Для продвинутых

  • Раздел Java на developer.com собрал в себе руководства как по целым пластам языка, вроде Enterprise Edition, так и разъяснения отдельных нюансов, вроде новомодных лямбда-выражений. Вот, например, статья, прочитав которую, вы разберётесь с тем, что такое аннотации, зачем они нужны и как правильно их использовать.
  • На сайте Tutorials Point есть раздел с исчерпывающим количеством туториалов по Java. Также там есть отдельный раздел для Java 8.
  • Java2S — коллекция примеров на все случаи жизни. Примечательно, что здесь есть не только чистая Java, но и работа с разными библиотеками, например JUnit. Хорошо описаны и нововведения Java 8 — Date-Time API, лямбды, потоки (streams).
  • Oskar Veerhoek — канал на YouTube, посвящённый OpenGL. Если вы собираетесь связать свою жизнь с программированием, маловероятно, что вам никогда не придётся работать с графикой. В течение курса из 41 видео автор расскажет вам, как работать с OpenGL в Java. Курс начинается с самых основ и написания 2D Minecraft’а, а заканчивается шейдерами, освещением и созданием 3D комнаты.

Базовые конструкции

Если у вас есть опыт программирования на С/C++, то знакомство с Java пройдёт легко, поскольку базовый синтаксис этих языков очень похож.

Изучение начинается с написания простейшей программы, вроде Hello World, выводящей в консоль строку приветствия. Далее в разной степени изучается следующий «джентльменский набор»:

  • понятия класса и метода;
  • переменные и константы, их типы и основы работы с ними;
  • массивы;
  • работа со строками как объектами, String API;
  • арифметические и логические операции и выражения;
  • команды для написания нелинейных программ, включающие в себя условный оператор if-else, тернарный оператор, оператор множественного выбора switch, циклы с определённым числом повторений for, включая его вариант for each, c неопределённым числом повторений while и do-while;
  • операторы для изменения порядка выполнения break и continue;
  • введение в пакетную систему Java, импорт классов, создание объектов, вызов статических и нестатических методов.

В этот раздел также входят навыки по установке и настройке JDK, вызову компилятора и виртуальной машины JVM в командной строке.

Материал по базовым конструкциям можно найти в упомянутых выше книгах:

  • «Java. Библиотека профессионала. Том 1. Основы» — глава 3;
  • «Java 8. Полное руководство» — главы 3, 4, 5.

Объектно-ориентированное программирование

Объектно-ориентированное программирование (ООП) в настоящее время активно вытесняет «структурные» и «процедурные» подходы, разработанные в 1970-х годах, фактически становясь доминирующей методикой. Java — это объектно-ориентированный язык, и для его продуктивного использования необходимо владеть ООП. Для ООП требуется иной образ мышления по сравнению с подходом, типичным для процедурных языков.

Изучение ООП начинается с рассмотрения класса — элемента, составляющего основу Java. Поля класса содержат данные, методы — код. Методы могут иметь параметры и возвращать значения. Конструкторы — особые методы. Объекты создаются на основании классов. Инкапсуляция — первый принцип ООП — подразумевает связывание и сокрытие. Изучаются модификаторы полей и методов: public, protected, private. Вводится понятие перегрузки методов. Затем рассматриваются понятия и механизмы наследования и полиморфизма. Разъясняется разница между статическими полями и методами и нестатическими. Обсуждаются абстрактные классы и методы, вводится понятие интерфейса.

Материал по этому разделу можно найти в книгах:

  • «Java. Библиотека профессионала. Том 1. Основы» — главы 4, 5, 6;
  • «Java 8. Полное руководство» — главы 6, 7, 8.

Обобщённое программирование

Обобщения — это параметризованные типы. Они позволяют объявлять классы, интерфейсы и методы, где тип данных указан в виде параметра. Используя обобщения, можно создать универсальный класс, который будет правильно обрабатывать данные разных типов. Классы, интерфейсы или методы, оперирующие параметризованными типами, называют обобщёнными.

Обобщения позволяют писать более безопасный код, который читается легче, чем код, перегруженный переменными типа Object и приведениями типов. Обобщения используются в классах коллекций, в том же ArrayList.

Материал по этому разделу можно найти в книгах:

  • «Java. Библиотека профессионала. Том 1. Основы» — глава 8;
  • «Java 8. Полное руководство» — глава 14.

Исключения (Exception)

В мире программирования возникновение ошибок и непредвиденных ситуаций при выполнении программы называют исключением. Они могут возникать в результате неправильных действий пользователя, отсутствии необходимого ресурса на диске или потери соединения с сервером по сети. Причинами исключений при выполнении программы также могут быть ошибки программирования или неправильное использование API. Ваша программа должна чётко знать, как поступать в такой ситуации. Для этого в Java предусмотрен механизм исключений.

При возникновении ошибки в процессе выполнения программы JVM создаёт объект нужного типа из иерархии исключений Java — множества возможных исключительных ситуаций, унаследованных от общего «предка» — класса Throwable. Исключение можно также создать вручную с помощью оператора throw. При этом выполнение основного кода программы прерывается, а обработчик исключений JVM пытается найти способ обработать исключение.

Блоки кода, для которых предусмотрена обработка исключений в Java, создаются с помощью конструкций try{}catch, try{}catch{}finally, try{}finally{}.

При возбуждении исключения в блоке try обработчик исключения ищется в следующем за ним блоке catch. Если в catch есть обработчик этого типа исключения, управление переходит к нему. Если нет, то JVM ищет обработчик этого типа исключения в цепочке вызовов методов до тех пор, пока не будет найден подходящий catch.

После выполнения блока catch управление передаётся в необязательный блок finally. Если подходящий блок catch не найден, JVM останавливает выполнение программы и выводит стек вызовов методов (stack trace), выполнив перед этим код блока finally при его наличии.

Материал по этому разделу можно найти в книгах:

  • «Java. Библиотека профессионала. Том 1. Основы» — глава 7;
  • «Java 8. Полное руководство» — глава 10.

План курса

Программа обучения включает видео уроки по обучение Java на практике для начинающих. Благодаря практическим заданиям, Вы сможете закрепить полученные знания по каждой теме курса. Включен подробный разбор самых популярных вопросов на собеседовании на должность Junior-разработчика по части Java SE.

развернуть все

свернуть все

Введение — О курсе Программирование на Java с нуля — Уровень 2

1. JUnit — тестирование

  • 1.1 JUnit — тестирование. Часть 113:02
  • 1.2 JUnit — тестирование. Часть 209:06

2. Collection Fraimework

  • 2.1 ArrayList24:35
  • 2.2 ArrayList. Часть 216:47

  • 2.3 LinkedList28:26

  • 2.4 Собеседование по коллекциям List05:12

  • 2.5 Устройство памяти в Java07:52

  • 2.6 Equals и hashcode11:04

  • 2.7 HashSet33:50

  • 2.8 Collection14:43

  • 2.9 Iterable16:58

  • 2.10 Собеседование по пройденным коллекциям06:01

  • 2.11 TreeSet14:59

  • 2.12 HashMap33:52

  • 2.13 Собеседование по HashMap12:07

  • 2.14 Map и Set остальные коллекции08:07

  • 2.15 Queue08:55

  • 2.16 Собеседование по Collections Framework08:46

3. Generics

  • 3.1 Generics. Введение17:05

  • 3.2 Параметризируем коллекции13:55

  • 3.3 Super, extends и WildCard14:45

  • 3.4 Параметризированные методы11:47

  • 3.5 Собеседование и разбор дз08:29

4. Многопоточность

  • 4.1 Многопоточность. Введение10:49

  • 4.2 Остановка потоков. Метод join26:42

  • 4.3 Потоки-демоны и состояние гонки10:54

  • 4.4 Синхронизация методов и мониторы20:53

  • 4.5 Атомарные типы данных и volatile07:34

  • 4.6 Многопоточность. Собеседование 105:38

  • 4.7 CountDownLatch и ExecutorService17:05

  • 4.8 ThreadFactory, интерфейс Callable и класс Future14:35

  • 4.9 Блокирующая очередь. Wait, notify и notifyAll19:07

  • 4.10 DeadLock или взаимная блокировка11:49

  • 4.11 Потокобезопасные коллекции08:16

  • 4.12 Semaphore, CyclicBarrier. Задача про гонку30:10

  • 4.13 Многопоточность. Собеседование 208:23

5. Stream API

  • 5.1 Лямбда-выражения и функциональные интерфейсы19:20

  • 5.2 Введение в стримы. Методы filter, map и collect18:48

  • 5.3 Терминальные и промежуточные операторы14:56

  • 5.4 Тип Optional, метод parallelStream, способы создания стримов15:15

  • 5.5 Stream API. Собеседование05:04

6. Потоки ввода/вывода

  • 6.1 Введение в потоки ввода/вывода. Класс File13:45

  • 6.2 Чтение из файла, класс FileInputStream и try с ресурсами11:24

  • 6.3 StringBuilder, StringBuffer, чтение в массив и InputStreamReade18:45

  • 6.4 Чтение и запись с использованием буфера. Класс Scanner17:40

  • 6.5 Классы Reader, Writer и RandomAccessFile11:44

  • 6.6 Сериализация и десериализация24:07

  • 6.7 Собеседование04:53

7. Java Core

  • 7.1 Как работает Java05:12

  • 7.2 Отличие интерфейсов и абстрактных классов07:12

  • 7.3 Исключения и метод finalize10:59

  • 7.4 Основные парадигмы ООП06:14

  • 7.5 Финальное собеседование16:58

Завершение курса — Получение Сертификата

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

В самоучителе «Язык программирования Java для новичков» раздел автоматического сборщика мусора является наиболее интересным.

В Java, в отличие от языка «Си», невозможно ручное удаление объекта из памяти. Для этого реализован метод автоматического удаления — сборщик мусора. При традиционном удалении через null происходит лишь устранение ссылки на объект, а сам объект удаляется. Существуют методы принудительной сборки мусора, хотя они не рекомендованы для использования в обычной работе.

Модуль автоматического удаления неиспользуемых объектов работает в фоновом режиме, запускается при неактивности программы. Для очистки объектов из памяти программа останавливается, после освобождения памяти прерваная операция возобновляется.

Сколько времени уйдёт на изучение Java?

Тут всё индивидуально и зависит от интенсивности обучения. Вообще, чтобы изучить основы и выработать навыки программирования, вам потребуется не менее 6-12 месяцев, то есть будьте сразу готовы, что это долгий и кропотливый труд.

Обязательно составьте план своего изучения и выделяйте на это несколько часов в день. Помните, что главное — это практика.

Естественно, все мы хотим сэкономить и думаем, что выучим язык программирования Java самостоятельно, используя многочисленные открытые источники. Да, кое-какие знания вы так приобретёте, но всё же это не лучший выход. Очень часто новички начинают буксовать на задачках (на том же Степике, например), в результате чего самостоятельное обучение затягивается, время идёт, жизнь меняется, ваше желание постепенно угасает. Итог — годы прошли, а вы до сих пор не программист.

Лучше всего — платные курсы. Именно платные — это станет хорошей мотивацией не бросить. Для начала пусть это будут основы и базовые знания. Если говорить об OTUS, то вам пригодятся подготовительные Java-курсы. Освоив их, можете переходить на следующую ступень обучения. Как вариант — сразу выбор Java-специализации.

Итак, вот один из алгоритмов возможных действий:
1. Изучите основные понятия языка программирования Java.
2. Установите Java на свой ПК.
3. Установите IDE.
4. Напишите и запустите первую программу на Java.
5. Начните проходить любые курсы по основам Java (например, подготовительные курсы от OTUS).
6. Получив базовые знания, приступайте к курсам по глубокому погружению в практику программирования на Java.

Да, будет сложно. Но если вы действительно хотите стать Java-программистом, у вас всё получится!

.

Java: что за зверь?

Java — мультифункциональный объектно-ориентированный язык со строгой типизацией.

Что это значит?

С мультифункциональностью всё достаточно просто: Java действительно почти «волшебная таблетка» — на ней можно разрабатывать десктопные приложения, приложения под Android, заниматься веб-разработкой… Подробнее об этом ниже.

Строгая (сильная) типизация не позволяет смешивать в выражениях разные типы и не выполняет автоматически неявные преобразования. Это добавляет мороки: какие-то части приходится прописывать самому, а свободы у вас меньше, — зато в обмен на это вы получаете надёжность.

Объектно-ориентированный язык — это язык, созданный по модели объектно-ориентированного программирования. В ней существуют классы и объекты. Классы — это типы данных, а объекты — представители классов. Вы создаёте их сами, даёте названия и присваиваете им свойства и операции, которые с ними можно выполнять. Это как конструктор, который позволяет построить то, что вы хотите. Именно с помощью этой системы объектов в основном программируют на Java.

Основные термины в Java

Начав изучать Java, вы неизбежно столкнётесь со следующими терминами:
— Java Virtual Machine (JVM) — виртуальная машина Java. Представляет собой программный модуль, используемый для интерпретации исходного байт-кода в машинный код, а также для исполнения этого кода;
— Java Runtime Environment (JRE) — среда выполнения Java. Включает реализацию JVM для конкретной платформы и комплект библиотек, используемых для выполнения Java-программ;
— Java Development Kit (JDK) — набор инструментов программиста, используемых для написания Java-программ. Сюда входят компилятор, JRE, стандартные библиотеки Java, документация, разные утилиты.
— исходный код — текстовый файл на Java с расширением .java;
— байт-код — низкоуровневый машинно-независимый код, представляющий набор инструкций для JVM;
— машинный код — комплект машинных инструкций в двоичном формате, которые выполняются процессором;
— компиляция — процесс преобразования исходного кода в байт-код;
— интерпретация — процесс преобразования байт-кода в машинный код;
— платформа — программно-аппаратная среда, где осуществляется выполнение программ и приложений. Самые популярные платформы —Microsoft Windows, Linux, Solaris, Mac OS.

Лучше ориентироваться в основных терминах поможет следующая таблица:

Несколько слов о популярности Java

Последние годы язык программирования Java регулярно входит в тройку самых популярных языков программирования. Вы должны это знать, если периодически следите за обновлениями рейтингов TIOBE, State of Octoverse, RedMonk и прочих. Где-то рассчитывают, исходя из количества поисковых запросов, где-то — с учётом числа репозиториев на GitHub. Вне зависимости от особенностей расчётов, Java постоянно в топе.

Однако Java популярен не только из-за своей применимости. Дело в том, что зарплата Java-программиста в среднем выше, чем разработчика на Python, PHP, JavaScript. В той же Москве она составляет 150 — 200 тыс. рублей. Но если вы знаете Java, вы найдёте высокооплачиваемую работу не только в столице, но и в регионах.

Производительность и лучшие практики

Пустая коллекция вместо Null

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

Создание объектов только когда необходимо

Создание объектов — одна из самых затратных операций в Java. Лучше всего создавать их только тогда, когда они действительно нужны.

Deadlocks (Дедлоки)

Взаимная блокировка (Deadlock) потоков может происходить по многим причинам, и полностью защититься от них в Java 8 очень сложно. Чаще всего, это происходит, когда один синхронизируемый объект ожидает ресурсов, которые заблокированы другим синхронизированным объектом.

Вот пример тупика этого потока:

Результат этой программы:

Взаимоблокировок можно избежать, изменив порядок вызова потоков:

Вывод:

Базовые советы

Если вы решили учить Java, начните сразу, не откладывайте.
Безусловно, следует понимать, что освоение новой профессии — дело непростое, на это придется потратить немало времени и энергии. Так что, прежде чем принять окончательное решение, стоит хорошенько подумать, изучить информацию в Сети, послушать и почитать, что говорят люди с опытом. Помимо обдумывания целесообразности изучения программирования в целом, безусловно имеет смысл потратить время и на выбор языка программирования, с которого вы начнете свой путь. Логично, что мы в JavaRush считаем Java лучшим языком для старта карьеры в программировании, и, надо заметить, можем аргументированно доказать, почему это так, и зачем учить Java в 2020-ом году

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

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

Критические мнения следует принимать во внимание, если вы находитесь в процессе взвешивания всех за и против, но когда решение уже принято — лучшей стратегией будет пропускать их мимо ушей.

Не хватайтесь сразу за все обучающие материалы одновременно.

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

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

Применение метасимвольных аргументов

Представьте, что мы хотим добавить метод для сравнения средних значений массивов в класс из примера 3. Причем типы массивов могут быть разные:

Так как параметризованный тип, какой тип параметра вы укажете для , когда создадите параметр метода типа ? Напрашивается следующий вариант:

Но это не сработает, так как в этом случае метод будет принимать аргументы только того же типа, что и существующий объект:

Чтобы создать обобщенную версию метода , следует воспользоваться другим средством обобщений Jаvа – метасимвольным аргументом. Метасимвольный аргумент обозначается знаком ? и представляет неизвестный тип.

Мета символ не оказывает никакого влияния на тип создаваемых объектов класса . Это определяется оператором в объявлении класса Average. Мета символ просто совпадает с любым достоверным объектом класса .

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

Ограничивать метасимвольный аргумент особенно важно при создании обобщенного типа, оперирующего иерархией классов. Например:

Пользуйтесь несколькими обучающими ресурсами

Вам потребуется множество инструментов для достижения цели. Вот полезные подборки для успешного обучения.

1. Только практика: CodeAcademy

Это, пожалуй, одна из самых известных онлайн-платформ для изучения разных языков программирования. И, конечно же, тут есть специальный раздел для изучающих Java. Здесь вы с самого первого урока начнете писать код. Если задание покажется слишком сложным (а для новичков — это совершенно нормально), то можете воспользоваться полезными подсказками. Логика обучения проста: читаете задание, пишите код, запускаете его, смотрите результат, переходите к следующему уроку. Задания постепенно усложняются до тех пор, пока вы не научитесь писать код с чистого листа. Есть очень полезный раздел FAQ и возможность обсуждения задания с другими учениками.

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

2. Играйте и программируйте с нуля: CodeGym.cc

Существуют онлайн-курсы по Java с необычной особенностью — игрофикацией. Сейчас многие платформы стали внедрять обучение в формате игры. Так вы получаете должную мотивацию, наглядно отслеживаете успехи и легче достигаете нужной цели.

В CodeGym вы начинаете с нулевого уровня. Процесс обучения проходит в футуристической вселенной с космическими путешествиями, роботами и прочими классными штуками. Ваша цель — пройти 4 обучающих квеста и «прокачать» своего персонажа (робота). Каждый квест состоит из 10 уровней. В каждом уровне по 10–12 уроков, которые вам объясняют члены экипажа космического корабля. Урок сводится к минимуму теории и набору заданий с мгновенной проверкой, а также подсказками по улучшению кода. Вы сразу начинаете писать код и решаете простейшие задачи до тех пор, пока не будете готовы к более сложным и масштабным проектам по разработке.

Здесь вы можете не «застревать» на какой-то теме, а переходить к изучению следующей и возвращаться к проблемной задаче позже. В курсе имеется невероятное количество задач — более 1200. Это количество равнозначно примерно 300–500 часам написания кода.

3. Конкурсы по программированию: Codewars

Есть еще одна онлайн-платформа с акцентом на практику. Хотя, конечно, она больше подходит для тех, у кого за плечами есть опыт в разработке. Codewars позволяет отточить свои навыки в каком-то языке программирования с помощью обучающих задач (ката).

Вы можете писать свой код в браузере и пошагово проверять его в тестовых сценариях. Также можете сравнивать свой код с чужим, расширять базу знаний и обсуждать лучшие варианты. Каждое задание представляет собой конкурс с другими программистами, и ему присваивается свой рейтинг. Как только вы научитесь решать не самые простые задачи, то сможете отточить свои навыки и поучаствовать в более сложных конкурсах. Основное отличие данной платформы — здесь вы можете учиться и практиковаться в группе.

4. Слушайте лекции профессионалов: EdX

EdX — это образовательная платформа, созданная Гарвардским университетом и MIT. В ней представлено множество предметов, в том числе, программирование на Java и смежные области. EdX содержит массу утвержденных вводных курсов и сертифицированных программ, проводимых университетами.

Хотите быть в курсе последних новостей, обзоров и обновлений в Java­-мире? И это правильно. Java постоянно развивается, обновляется и добавляет новые возможности. Не забывайте каждый день читать полезные статьи по Java. 

Помните совет о том, чтобы вступить в профильные сообщества для более эффективного обучения? Можете задавать свои вопросы в разделе Java на Stack Overflow или Coderanch. Кроме того, есть как минимум три крупных сообщества на Reddit (learnprogramming, java и learnjava), где вы познакомитесь с полезными подсказками по изучению как всего программирования, так и отдельно взятого языка. Если нужна более конкретная информация (например, как улучшить код в каких-то заданиях), то почитайте специальный раздел помощи на CodeGym –другие студенты и «наставники по разработке» подскажут вам решение любой задачи. И, наконец, есть еще крупное Java-сообщество на Oracle. Оно рассчитано на новичков и продвинутых разработчиков.

Быть разработчиком — это постоянно совершенствоваться и получать новые знания. Если вы изначально разовьете навык самообразования, то гарантированно добьетесь успехов. Итак, вы готовы начать?

Перевод статьи John SelawskyHow to learn to code in Java: why you should and where to start

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector