Java — Любые вопросы новичков, возникающие по ходу изучения Java


Содержание
  • Как запустить Java на Windows (XP, 7, 8 и 10)
  • Установка Java
  • Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
  • Ваша первая программа на Java
  • Как выучить Java?
  • Официальная документация Java
  • Рекомендуемые книги по Java
  • Вместо заключения
  • Собеседование на java-программиста (java-developer interview). Часть 2: Вопросы

    Это продолжение цикла статей о собеседовании на java-программиста:

    Java-related технологии и фреймворки рождаются и умирают, а без знания java core далеко не уедешь. Как можно знать Hibernate, но не знать JDBC и SQL? Как можно разбираться в Spring MVC или Struts, но при это плавать в сервлетах? Как можно пользоваться блокирующими очередями, экзекьюторами и локами, но при этом не понимать, как работают wait/notify? Для меня это до сих пор остается загадкой.

    С другой стороны, меня иногда удивляют вопросы сотрудников, которые они задают кандидатам. Зачем спрашивать о Vector и Hashtable — на дворе уже скоро 4-ое тысячелетие. Или «зачем нужен UNION»? Так и хочется ответить — для SQL-инъекций. На счет паттернов проектирования и UML я вообще молчу — неужели до сих пор не наигрались? Но это еще полбеды. Иногда интервьюеры сами допускают довольно грубые ошибки. Об этом чуть позже.

    Ниже приведен список вопросов (точнее небольшая его часть), которые я задаю на собеседовании, с моими комментариями. Вся прелесть в том, что в зависимости от позиции (junior java developer, mid-level, senior developer) и специализации некоторые из вопросов превращаются в более короткие либо более продолжительные диалоги с кандидатом и проверяют не только технические знания, но и умение мыслить и делать логические умозаключения. После многих пунктов вы найдете ссылки на статьи по соответствующей тематике.

    [Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]

    Вопросы собеседования по Core Java

    Для позиций типа Senior эти вопросы можно пропустить. Но иногда все же стоит перестраховаться.

    1. Модификаторы в Java.

    Особо глубоко спрашивать не нужно — вкратце о назначении и вариантах использования. Можно спросить о контекстах использования этих модификаторов (класс/поле/метод). Подробные вопросы о модификаторах доступа, расширении модификаторов при наследовании, переопределение и сокрытие методов, модификатор abstract и final для классов/методов лучше оставить для вопросов по ООП в Java. Подробное знание модификаторов synchronized и volatile можно проверить в вопросах по многопоточности.

    Небольшая статья про модификаторы — здесь.

    2. Иерархия коллекций в Java.

    Рассматриваем Collection, Set, List, Queue, Map и их основные реализации. Можно в принципе спросить о методах, которые есть в интерфейсе Collection, но лучше не надо. Стоит поинтересоваться, какими коллекциями человек пользовался, но опять же без фанатизма. Напоминаю, Vector и Hashtable (и Stack кстати тоже) — прошлый век, тем более в случае работы с legacy кодом всегда можно посмотреть сорцы. Еще можно поговорить о массивах, а следующий код может привести к интересному диалогу:

    По поводу свойств и контракта equals/hashCode спросить стоит и о поломке коллекций тоже, но сильно не увлекайтесь, так как это может привести к любимому вопросу большинства интервьюеров об устройстве HashMap. В свою очередь это напрямую ведет нас к вопросам о структурах данных, алгоритмах и их сложности. Мое мнение по этому поводу — с алгоритмами хорошо знакомы олимпиадники и те, у кого в университете это преподавалось на должном уровне. Мне, например, в этом плане не повезло ни с тем, ни с другим. И разбирался в алгоритмах/АТД по ходу своей работы только тогда, когда возникали соответствующие задачи или просто было время и желание почитать и осознать. В результате — quick sort, merge sort, radix sort напишу; hash map, linked list, binary search tree напишу; semaphore, thread pool, blocking queue тоже напишу. Что-то еще нужно? Окей, напишу.

    Что делать, если шило все же мешает и хочется хоть раз в жизни показать свои глубочайшие знания в области алгоритмов и структур данных и без того напуганному кандидату. Начнем с того, что такие вопросы стоит задавать только senior разработчику и только если задачи такого плана встречаются на проекте достаточно часто (что встречается достаточно редко). Так уж и быть, спрашивайте об устройстве HashMap и скорости поиска, об устройстве LinkedList и сложности операций над ним. Можно попросить, чтобы человек своими словами рассказал, откуда в quick/merge sort берется log2n. Можно еще какую-нибудь задачу алгоритмическую задать. Но помните, возможно с этим человеком вам еще придется работать в одной команде.

    3. Иерархия исключений и ошибок.

    Тут как бы все понятно, но бывает, что люди не знают элементарных вещей. Стоит спросить об иерархии, о checked и unchecked ошибках/исключениях, когда используются те или иные, как и когда их нужно обрабатывать. Можно даже начать небольшой диалог по поводу OutOfMemoryError. Если человек знаком с JDBC, можно поговорить об SQLException и поинтересоваться, оно chekced или unchecked и нормально ли это по мнению кандидата.

    Ответ на этот вопрос можно найти здесь

    4. Вложенные классы в Java.

    Некоторые считают, что этот вопрос не нужен. Лично я так не думаю. Стоит спросить о классификации, вариантах использования, о нарушении инкапсуляции и самое интересное — зачем они нужны по мнению кандидата.

    Моя статья о вложенных классах на Quizful — здесь.

    И статья об анонимных классах — здесь.

    Вопросы по ООП в Java

    5. Основы ООП

    Здесь уже подробно рассматриваем модификаторы доступа и прочие вещи, которые я упомянул в комментариях к первому вопросу. Можно спросить об интерфейсах и абстрактных классах. Пусть человек своими словами расскажет о полиморфизме и инкапсуляции. Если хотите послушать рассуждения человека, можно спросить о таком фрагменте кода:

    Как продолжение, на этом же примере можно поговорить о расширении/сужении типов в аргументах переопределяемых методов в случае, если бы в Java список формальных параметров не входил бы в сигнатуру метода.

    6. Паттерны проектирования

    Напоминаю, не стоит глубоко спрашивать о паттернах проектирования. И ни в коем случае не поучайте кандидата рассказами о том, «насколько они полезные» и «как их правильно реализовывать». Кстати, по поводу красоты/понятности кода и быстроты его написания мой друг говорит следующее: «Чтобы уметь круто хачить на Java, нужно дохера хачить на Java».

    Каталог паттернов проектирования можете найти здесь

    Вопросы собеседования по многопоточности в Java

    7. Многопоточность в Java.

    Хочу посвятить этой теме цикл статей: одним абзацом не отделаешься. Если вкратце, спросите, зачем нужна многопоточность, что такое монитор объекта, спросите о модификаторах syhcnronized и volatile, методах wait/notify/notifyAll, а так же о пакете java.util.concurrent. А следующий фрагмент кода должен привести к достаточно интересному разговору:

    Интересная статья про методы wait/notify доступна здесь.

    Вопросы, связанные с базами данных

    8. SQL

    Для начала стоит задавать вопросы по ANSI SQL. Далее, в зависимости от СУБД, используемой на проекте, можно спрашивать о важных отличиях ее диалекта. Итак, пусть человек расскажет об основных элементах баз данных — таблицах, процедурах, функциях, констрейнтах и т.д. О констрейнтах можно поспрашивать чуть подробнее. Стоит поинтересоваться, как человек понимает null в базах данных. Переходите к агрегатным функциям и о том, как они работают с null, не забудьте о group by и having. Можно дать пару маленьких задачек на эту тему (см. задачи 1-2 ниже). Поспрашивайте о типах join и дайте пару задачек (см. задачи 3-4 ниже).

    Задача 1. Дана таблица T с колонкой A целого типа, содержащая значения 10, 20, 30, null. Чему будут равны результаты выражений «AVG(A)» и «SUM(A) / COUNT(*)»?

    Задача 2. Дана таблица T с колонкой A целого типа. Напишите запрос, который вернет все положительные значения встречающиеся в таблице более одного раза.

    Задача 3. Даны таблицы T1 и T2. В каждой есть колонка A целого типа. Значения в первой таблице — 1, 2, а во второй — 2, 3. Что вернут запросы с inner join, left/right/full outer join и cross join вида «select T1.A, T2.A from T1 . join T2 on T1.A = T2.A».

    Задча 4. Даны 2 таблицы с колонками A целого типа. Напишите запрос, который вернет все значения колонки А из первой таблицы, для которой нет соответствия в колонке A второй.

    Статья о конструкции Join доступна здесь

    9. JDBC API

    Тут тоже без особых извращений. Спросите о Connection, Statement, PreparedStatement, CallableStatement, ResulSet, зачем каждая из этих сущностей нужна. Можно поинтересоваться о том, чем они являются: абстрактными классамм, конкретными классами или интерфейсами и почему.

    Еще вопросы — как создать соединение в JDBC, каким образом лучше добавлять большое количество записей в таблицу, ну и обязательно о транзакциях и autocommit. Чуть не забыл — вопрос об уровнях изоляции транзакций считаю как минимум странным — в следующий раз, когда решите его задавать, вспомните, сколько раз с уровнями изоляции сталкивались лично вы.

    Читайте на блоге подробный туториал по JDBC.

    Вопросы собеседования по веб-программированию

    10. Servlet API

    Для начала надо спросить об HTTP в целом. Что такое хедеры запроса, какие вообще типы запросов бывают, что такое HTTP Status Code.

    Далее нужно спросить про класс HttpServlet, в каком виде можно работать с запросом и ответом. Что такое сессия (HttpSession) и как ее получить. Не забудьте спросить про ServletFilter и варианты их использования.

    Организм требует сна. Статью завершу через некоторое время. Удачи всем.

    Изучение основ, перед изучением Java.

    Язык Java /

    Основы языка Java

    06 янв 2014 05:55

    вот его я б не осмелился рекомендовать несмотря на простоту для новичка — т.к. в нём-то как раз нет ни такого ООП, ни таких структур данных как в питоне и джаве. переходить с него потом на java будет почти так же сложно как начинать с нуля :)

    Хотя конечно рано или поздно придётся и javascript изучать любому новичку!

    И я начинал, и не раз. :) Я больше скажу — со мной такое случается порой и теперь при изучении новых языков или технологий. Однако тем не менее если существует какой-либо более «естественный» путь вхождения в язык/технологию то я предпочитаю идти этим более естественным путём, нежели кидаться в дебри, принимать 70% на веру и 50% зубрить, потом путаться, спотыкаться. Уже давно понял что это слишком сильно тормозит развитие.

    Я в своё время из-за этого java начал на год или два позже изучать. Сначала непоследовательно пошёл, запутался катастрофически в конце концов (хотя пару приложений под j2me написал) и бросил.

    Изменен:06 янв 2014 03:08
    06 янв 2014 12:03

    а у меня все наоборот )). Шилдта прочел — вроде все понял, а написать пару строк кода не мог (. а после Хорстманна забадяжил сразу програмку на SWING на 20 000 строк кода (правда в 1 классе у меня было 15 000 строчек кода — и ничче — все работало, ток Netbeans постоянно в коматоз падал во время фоновой компиляции). эх, веселое было время — есть что вспомнить )

    если с самого начала — Таненбаума читайте или Петцольда «Код. Тайный язык информатики» — потом начните учить C — K&R учебник называется ) — поймете как работать с примитивными данными — битами, байтами, символами и числами (Java имеет Сшный синтаксис — поэтому изучая С вы уже будете изучать Java). Ну а дальше уже Java — Шилдт, Хорстманн, Эккель, Блох, JLS.

    Java — Любые вопросы новичков, возникающие по ходу изучения Java

    2) J2SE (��� ��� ����������� � java core?)
    «Java Platform, Standard Edition (Java SE) lets you develop and deploy Java applications on desktops and servers, as well as in today’s demanding embedded environments. Java offers the rich user interface, performance, versatility, portability, and security that today�s applications require.» @Oracle

    �� �������
    java.applet
    java.beans
    java.awt
    java.rmi
    java.security
    java.sql
    javax.rmi
    javax.swing
    javax.swing.text.html.parser
    javax.xml.bind.annotation
    org.omg.CORBA
    org.omg.PortableInterceptor

    3) J2EE
    «Java Platform, Enterprise Edition (Java EE) 6 is the industry standard for enterprise Java computing. Utilize the new, lightweight Java EE 6 Web Profile to create next-generation web applications, and the full power of the Java EE 6 platform for enterprise applications.» @Oracle

    — Servlet/JSP
    — EJB
    — JDBC
    — JPA
    — WebServices

    Как учить язык программирования Java

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

    1. В чем залог успеха изучения языка программирования?

    В понимании того, зачем вам это нужно. Тут такие дефиниции как «программировать круто» или «буду делать компьютерные игры» или «ща выучу по быстрому и буду бабки нормальные получать» не прокатит. Нужна мощная мотивация и выход из зоны комфорта, которые помогут вам избежать прокрастинацию и лень. Нужна четкая цель с пошаговым планом и с датами. Лучше потратить на такую проработку неделю, чем просто начать хвататься за все подряд. На своем примере скажу — выучить язык мне мешает моя текущая профессия, просто не каждый синиор девелопер в нашей стране получает такой зароботок — поэтому для меня это пока хобби, а от сюда соответствующие результаты.

    1. Что лучше: учить самостоятельно, записаться на курсы или найти ментора?

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

    • Читаем книги и документацию (обязательно. ).
    • Ходим на курсы/вебинары (если нет денег — качаем в записи).
    • Консультируемся у ментора (дорого, зато эффективно).
    • Пишем свои мини программы (обязательно. ).
    • Участвуем в open source проектах на java.
    • Устанавливаем обучающие программы на свой смартфон.
    • Помогаем отвечать на вопросы других неофитов java.
    • Заводим блокнот, в который записываем все то, что дается вам сложно.
    • Участвуем в онлайн соревнованиях по решению задачек на языке.
    • Смотрим обучающие видео в интернете и подписываемся на тематические группы в социальных сетях.
    • После первых же пройденных занятий начинаем отвечать на вопросы, которые задают на собеседованиях на junior java программиста (в интернете куча вариантов).
    • Окружаем себя всем тем, что поможет вам изучить язык, хоть магнитики на холодильник вешайте, главное, чтобы помогало.

    Страшно? Не бойтесь, далее обо всем поподробней.

    1. Столько много литературы по теме, с чего начать, что читать?

    Книги это ваш основной источник знаний. О том, что без книг не обойтись я уже сказал. Книги по Java, условно, можно поделить на две группы — для профессионалов и для новичков. Книги для профессионалов обычно содержат в себе информацию по узкоспециализированному вопросу языка, например «Лямбда-выражения в Java 8», или описывают принцип работы (архитектуру) виртуальной машины, где рассказывается почему разработчики языка стали использовать такой подход в решении вопроса, а не иной. Понятно, что они нам не подходят. Наша цель — книги для новичков. Тут лидерами являются 3 книжки:

    • Java 8. Полное руководство. (Java: The Complete Reference, Ninth Edition) / Герберт Шилдт. — 9 издание. — 2020 — 1376 с.
    • Java. Библиотека профессионала. Том 1. Основы. (Core Java Volume I — Fundamentals) / Кей С. Хорстманн. — 2020 — 864 с.
    • Изучаем Java. (Head First Java ) / Кэти Сиерра, Берт Бейтс. — 2020 — 720 с.

    Шилд показался более структурированный в части последовательности подачи материала. У Хорстманна часто дается код с комментарием «это вы узнаете в следующей главе», зато примеры более сложные и близкие к реальности. Выбирая между этими двумя книгами я бы сказал так — если вы никогда ничего не слышали про программирование — то ваш выбор Шилд (хотя я советую Head First Java). Если вам не надо читать в википедии что такое «цикл», «переменная», «оперативная память» и вообще у вас математический склад ума и вы всегда интересовались техникой и IT отраслью — то я бы посоветовал Хорстманна (более сжатая и информация, меньше времени потратите на учебу). «Изучаем Java» — книга в первую очередь для визуалов и гуманитариев, хотя я лично планирую обучаться далее по ней. Книга похожа на конспект лекций по программированию от дизайнера. На каждой странице будут смешные запоминающиеся картинки с принципами написания кода. По ходу текста присутствуют вставки с наиболее часто встречающимися вопросами и заблуждениями учащихся по описываемой теме. Кроме того, в конце каждой главы есть тестовое задание и / или кроссворд из терминов пройденного материала.

    1. Где найти книги, на каком языке читать?

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

    Не забываем, что курсы это не обязательный элемент в вашей схеме обучения. Курсы бывают онлайновые (интерактивные без участия преподавателя), в виде вебинаров и классические оффлайновые. На последние нужно много времени и денег, из интерактивных мне еще не встречались варианты, которые покрывали бы большую часть java core. По моему мнению вебинары являются золотой серединой. Перед выбором вебинара я советую вам почитать отзывы о преподавателе, это очень важно.

    1. В интернете встречал(а) много лекций и пошаговых обучалок, их достаточно для изучения Java?

    Нет. Еще раз, полное описание языка есть только в книгах и официальном мануале. На многих ресурсах такие обучалки содержат тонну ошибок, вдобавок они плохо структурированы. Из всего многообразия посоветую https://www.tutorialspoint.com/java/ Хотя, материала по данному языку ежегодно выходит море и все на отследишь. Не могу утверждать, что не появилось что-то более адекватное и стоящее. Если вбить в гугл learn java или java tutorial, то просто глаза разбегаются, все пересмотреть просто невозможно! Вот еще два блога, которые мне понравилсь, правда их уже почти не ведут http://pr0java.blogspot.ru/p/blog-page.html и http://kostin.ws/java/

    1. В смартфонах тоже есть приложения обучающие программированию?

    Куда же без смартфонов. У меня Android и я установил для себя с десяток программ, большая часть из них представляет собой какие-то нарезки из официальной документации с ужасным интерфейсом и шрифтом. В целом могу посоветовать вам следующие: SoloLearn, Learn Java, JavaSamples, Enki, Algorithms. Уверен что и на iOS можно будет найти похожий арсенал ПО.

    1. Стоит ли смотреть видеоуроки? И если да — то какие?

    Как говорится «лучше один раз увидеть, чем сто раз услышать». Визуальная картинка всегда воспринимается лучше. Кроме того, на видео вы можете подсмотреть различные фишки работы с IDE или с каким-либо уникальным инструментом разработчика. На том же youtube куча каналов и видео посвященных java. Единственное, чего я советую избегать — каналов для профессионалов (в основном видео с конференций для программистов) и каналов, где, обычно, стоит мужик на фоне маркерной или меловой доски и что-то там рассказывает на протяжении нескольких видеороликов подряд, периодически что-то чертя на доске. Обычно в таком виде встречаются видеолекции для студентов (ну и презентации с конференций), они нудные и мало информативны, точнее они обычно про теорию, а нам нужна ПРАКТИКА, на видео должен быть представлен КОД.

    1. Как-то нудно все, есть ли интересные формы обучения java?

    Тадам, вам повезло, за окном 21 век и все смотрят в сторону поколения Z, а оно, как известно, без игровой формы вообще мало что переваривает :) Искали? Держите!

    Вот вам ещё парочка достаточно известных сайтов с задачками, но уже не в игровой форме:

    1. А почему все ресурсы в интернете ссылаются на какой-то github?

    Хотите вы того или нет, а современное программирование не представляет свою жизнь без системы контроля версии. Она позволяет делать ответвления в программном коде (вилки в разработке), облегчает работу в команде, а так же позволяет вернуться к сохранной точке в программном коде (если вы вдруг поняли, что направление которое вы выбрали — тупиковое, и надо вернутся к коду, который был 3 часа назад). Гитхаб — это как раз такой оналйновый сервис. Опять же для смурфпрограммистов как я есть игровой сайт-обучалка:

    1. Вы советовали отвечать на вопросы новичков в программировании на Java, но я же сам только начал учить язык!

    Нет лучшего способа что-то запомнить, чем научить этому кого-то другого. Смело топаем на такие форумы и площадки как :

    cyberforum.ru
    programmersforum.ru
    codeby.net
    sources.ru
    ru.stackoverflow.com

    И пытаемся отвечать на вопросы пользователей

    1. Где на просторах интернета можно взглянуть на вопросы на вакансию junior java программиста? С ответами кАнеШнА :)

    Начните с этой статьи:

    1. Какие материалы и ресурсы в интернете еще можно посмотреть, почитать, изучить?

    Их много, все и не перечислишь. Можно порыться на coursera.org плюс udemy.com или посмотреть лекции от MIT.

    1. Что учить после того, как я выучу Java Core?

    Java core это приблизительно 30% от того, что надо знать уважающему себя java программисту :))) К тому моменту как вы закончите обучения Java Core, вы уже сами будете знать что учить дальше. А дальше идет развилка технологий — все зависит от того чем вы хотите заниматься. Тут есть несколько основных направлений:

      • работа на корпоративный сектор — изучать стек технологий относящихся к спецификациям JavaEE (Enterprise Edition — почитайте по ссылке абзац с перечнем технологий). Основным инструментом тут является Spring Framework. Понятно, что данное направление ориентировано на написания серверной части проектов — backend.
      • разработка под мобильную платформу android — не секрет, что приложение для данной платформы пишутся именно на java (в данный момент популярность набирает язык Kotlin). При выборе данного направления изучается свой отдельный набор технологий. Самым популярным фреймворком для андройда являеся Dagger.
      • создание игр — а вот тут я вас хочу огорчить, для этого редко используется Java. Практически все игры в наше время пишутся на игровых движках. Самые популярные из бесплатных (платить придется за дополнительные модули) Unity и Unreal Engine, самое смешное, что первый использует для написания кода C# а второй С++ и визуальный скриптовый язык блупринтов. То есть java в игровой индустрии в пролете.

    Как вы заметили java не очень популярна в части frontend языка. Кроме вышеперечисленного вам в любом случае придется изучать SQL запросы (какое направления вы бы не выбрали), а так же html/xml/css т.к. без веба в наши дни никуда. Программировать в наши дни без знаний паттернов проектирования тоже сложно. Хорошим подспорьем будет изучение основ javascript, т.к. этот язык находится на буме своей популярности и его пихают во все щели (и сайты на нем пишут, и игры, и приложения для мобилок, и уже на сервер портировали благодаря Node.js), короче быть НЕ КОРПОРАТИВНЫМ программистом и не сталкиваться с javascript в наши дни невозможно.

    На этом все. Обещаю постепенно дописывать статью, а вы не стесняйтесь — задавайте вопросы, по возможности отвечу :)

    Java — Любые вопросы новичков, возникающие по ходу изучения Java

    Вопросы для собеседования на Java Developer

    Потоки ввода/вывода в Java

    Servlets, JSP, JSTL

    • © 2020 GitHub , Inc.
    • Terms
    • Privacy
    • Security
    • Status
    • Help

    You can’t perform that action at this time.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

    Java — Любые вопросы новичков, возникающие по ходу изучения Java

    Создание проектов с нуля и до полного функционала

    Дом. задания с решениями

    Каждый урок закрепляется несколькими заданиями

    Поддержка во вопросам

    Форум для проблем и вопросов учеников

    Любые устройства

    HTML меню для открытия видео и исходников

    Разделы для изучения

    Ниже указаны возможные направления, которые можно изучить с помощью нашего ресурса. Желательно проходить все последовательно, т.к. темы идут по нарастающей (от простого к сложному)

    Об авторе

    Батыршинов Тимур, 33 года: основатель обучающего центра «JavaBegin». Главный тренер.

    За 7 лет обучил более 46000 человек (онлайн и оффлайн).

    Опыт разработки на Java — более 14 лет.

    Автор более 50 курсов по разным направлениям Java: основы, веб, Android, Spring и многие другие.

    Отзывы учеников

    “ До прохождения тренинга Тимура по ООП я работал несколько лет с объектной моделью, где каждый объект обладал заранее определённыи методами.
    Всё это время я полагал, что ООП именно в этом и состоит — про наследование, полиморфизм и композицию не имел никакого понятия (это было невостребовано).
    Когда читал об этих принципах в Википедии, возникало ощущение, как в знаменитой песне — «всё понятно — но что конкретно?».
    Пытался читать литературу по Java и NetBeans. Вся она грешит какой-то мелочностью, за которой сути не увидишь. А если долго не видеть сути — разве хочется продолжать обучение? К тому же чтение теории практики не заменяет.
    С помощью серии видеоуроков от Тимура Батыршинова у меня получилось разобраться с принципами ООП и NetBeans и получить практические навыки программирования на Java. Видеоуроки достаточно сжатые (не расятнуты). В них доступно преподносится новый материал.
    Это сочетается домашними заданиями, в которых есть вопросы, побуждающие что-то додумывать в процессе выполнении практических заданий.
    Таким образом изложенный материал закрепляется гораздо лучше. Все, что непонято, можно выяснить на вебинарах, получив ответы от Тимура или других учащихся.
    В общем, просто, удобно, понятно, быстро. Тимур, спасибо большое! ”

    Шлемов Максим Руководитель проекта NetWizard

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

    Евгений Дымов г.Южноукраинск

    “ Я прошел базовый курс от Тимура, и поэтому решил сделать свой маленький отзыв.На самом деле я до этого проходил еще в Минске такие курсы для новичков по JAVA и мне есть с чем сравнивать. Те курсы, конечно, они дали какие-то результаты, но я бы их оценил – нормальные такие курсы по знаниям.
    Складывалось такое ощущение, что какие-то дыры есть, возможно, что нормально просто казалось, а именно на курсах у Тимура было ощущение, что собран костяк, самые необходимые знания, самые нужные для начала, которые нужно точно и конкретно знать, чтобы продвигаться в дальнейшем.Просто сказать, что курсы Тимура более такие конкретные, которые дают самую необходимую информацию.
    Нет нечего лишнего, все только самое нужное и Тимур все это очень хорошо сложил воедино и по порядочку сформировал, то есть надо, в начале, проектирование сделать и т.д., то есть он способствует развитию программиста, как стать непросто программистом, а стать хорошим программистом, писать качественно код.
    За это ему, конечно, спасибо. Он молодец, что так проанализировал и собрал всю информацию, и предлагает на своих курсах ученикам. ”

    Стрельчёнок Дмитрий г.Минск

    “ Хочу сказать, что довольно давно я хотел понять, что такое объектно-ориентированное программирование.
    Со временем мне пришлось программировать на простом языке, на Бейсике, когда я писал свою научную работу. Довольно большая была программа, но это было очень давно.
    А объектно-ориентированное программирование для меня было, как загадка, то есть что это такое, не понятно. Вроде все понятно, но суть не ясна. В принципе, я получил все, что хотел. Спасибо Тимуру за такой курс. Я думаю, что я буду продолжать обучение у него. ”

    Пятин Андрей Александрович 49 лет, г.Киров

    “ Хочу поделиться первыми успехами по Java. Сдавала собеседование, и 13 человек взяли 3, в том числе и меня. Стоит учесть, что Java для меня первый язык программирования и образование экономическое, а кромеменя сдавали собеседование те, кто учится на программистов, или уже знают другие языки.
    Все это благодаря тренингу Тимура. Всем очень понравились мои ответы (особенно про разницу между абстрактным классом и интерфейсом, композицией и агрегацией, использование коллекций и другие). Сказали, что есть понимание того, о чем говорю, а не просто заученный книжный текст.
    Всем рекомендую пройти этот курс, Тимур учит ПОНИМАТЬ Java и как учить Java, а не просто учит как и что писать в коде. Тимур, спасибо большое за вашу работу!! ”

    Татьяна Гаврилова Руководитель отделения Университетское Ивано-Франковского филиала ПриватБанка

    “ Я удовлетворен тем высоким уровнем преподавания и изложения информации, которым владеет Тимур, и не жалею средств, которые были вложены в этот курс.Все это сполна окупается и более того.
    Итак, что важно отметить?Мы, наша группа, прошли базовые блоки по ООП и по GUI, и уже сейчас я могу сказать о первых результатах.До курсов у меня были какие-то знания в JAVA, но была очень сильная неуверенность в этих знаниях. Даже если бы изначальных знаний не было, я бы сполна получил их с уроков Тимура.хочу сказать об уверенности, которую я начал ощущать, как начинающий программист, после прохождения первых блоков.
    Этот курс, этот тренинг, полностью оправдывает мои ожидания.
    Да, я продолжаю работу с Тимуром в следующем блоке по БД.В заключении хочу отметить, что мне особенно понравилось в этих курсах.
    Во-первых, это качественный авторский подход. В этом я имею ввиду, что Тимур классный молодой человек, продвинутый, с которым легко работать. Он находиться на современной волне преподавания, что очень важно для учащихся.Во-вторых, мне лично очень нравиться структура изложения информации.
    Все доступно и последовательно.
    В-третьих, Тимур всегда вам сможет ответить на любые ваши вопросы на вебинарах.
    Спасибо тебе, Тимур, за твою работу.Желаю тебе всего хорошего, а всем добра. ”

    Собеседование на java-программиста (java-developer interview). Часть 2: Вопросы

    Это продолжение цикла статей о собеседовании на java-программиста:

    Java-related технологии и фреймворки рождаются и умирают, а без знания java core далеко не уедешь. Как можно знать Hibernate, но не знать JDBC и SQL? Как можно разбираться в Spring MVC или Struts, но при это плавать в сервлетах? Как можно пользоваться блокирующими очередями, экзекьюторами и локами, но при этом не понимать, как работают wait/notify? Для меня это до сих пор остается загадкой.

    С другой стороны, меня иногда удивляют вопросы сотрудников, которые они задают кандидатам. Зачем спрашивать о Vector и Hashtable — на дворе уже скоро 4-ое тысячелетие. Или «зачем нужен UNION»? Так и хочется ответить — для SQL-инъекций. На счет паттернов проектирования и UML я вообще молчу — неужели до сих пор не наигрались? Но это еще полбеды. Иногда интервьюеры сами допускают довольно грубые ошибки. Об этом чуть позже.

    Ниже приведен список вопросов (точнее небольшая его часть), которые я задаю на собеседовании, с моими комментариями. Вся прелесть в том, что в зависимости от позиции (junior java developer, mid-level, senior developer) и специализации некоторые из вопросов превращаются в более короткие либо более продолжительные диалоги с кандидатом и проверяют не только технические знания, но и умение мыслить и делать логические умозаключения. После многих пунктов вы найдете ссылки на статьи по соответствующей тематике.

    [Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]

    Вопросы собеседования по Core Java

    Для позиций типа Senior эти вопросы можно пропустить. Но иногда все же стоит перестраховаться.

    1. Модификаторы в Java.

    Особо глубоко спрашивать не нужно — вкратце о назначении и вариантах использования. Можно спросить о контекстах использования этих модификаторов (класс/поле/метод). Подробные вопросы о модификаторах доступа, расширении модификаторов при наследовании, переопределение и сокрытие методов, модификатор abstract и final для классов/методов лучше оставить для вопросов по ООП в Java. Подробное знание модификаторов synchronized и volatile можно проверить в вопросах по многопоточности.

    Небольшая статья про модификаторы — здесь.

    2. Иерархия коллекций в Java.

    Рассматриваем Collection, Set, List, Queue, Map и их основные реализации. Можно в принципе спросить о методах, которые есть в интерфейсе Collection, но лучше не надо. Стоит поинтересоваться, какими коллекциями человек пользовался, но опять же без фанатизма. Напоминаю, Vector и Hashtable (и Stack кстати тоже) — прошлый век, тем более в случае работы с legacy кодом всегда можно посмотреть сорцы. Еще можно поговорить о массивах, а следующий код может привести к интересному диалогу:

    По поводу свойств и контракта equals/hashCode спросить стоит и о поломке коллекций тоже, но сильно не увлекайтесь, так как это может привести к любимому вопросу большинства интервьюеров об устройстве HashMap. В свою очередь это напрямую ведет нас к вопросам о структурах данных, алгоритмах и их сложности. Мое мнение по этому поводу — с алгоритмами хорошо знакомы олимпиадники и те, у кого в университете это преподавалось на должном уровне. Мне, например, в этом плане не повезло ни с тем, ни с другим. И разбирался в алгоритмах/АТД по ходу своей работы только тогда, когда возникали соответствующие задачи или просто было время и желание почитать и осознать. В результате — quick sort, merge sort, radix sort напишу; hash map, linked list, binary search tree напишу; semaphore, thread pool, blocking queue тоже напишу. Что-то еще нужно? Окей, напишу.

    Что делать, если шило все же мешает и хочется хоть раз в жизни показать свои глубочайшие знания в области алгоритмов и структур данных и без того напуганному кандидату. Начнем с того, что такие вопросы стоит задавать только senior разработчику и только если задачи такого плана встречаются на проекте достаточно часто (что встречается достаточно редко). Так уж и быть, спрашивайте об устройстве HashMap и скорости поиска, об устройстве LinkedList и сложности операций над ним. Можно попросить, чтобы человек своими словами рассказал, откуда в quick/merge sort берется log2n. Можно еще какую-нибудь задачу алгоритмическую задать. Но помните, возможно с этим человеком вам еще придется работать в одной команде.

    3. Иерархия исключений и ошибок.

    Тут как бы все понятно, но бывает, что люди не знают элементарных вещей. Стоит спросить об иерархии, о checked и unchecked ошибках/исключениях, когда используются те или иные, как и когда их нужно обрабатывать. Можно даже начать небольшой диалог по поводу OutOfMemoryError. Если человек знаком с JDBC, можно поговорить об SQLException и поинтересоваться, оно chekced или unchecked и нормально ли это по мнению кандидата.

    Ответ на этот вопрос можно найти здесь

    4. Вложенные классы в Java.

    Некоторые считают, что этот вопрос не нужен. Лично я так не думаю. Стоит спросить о классификации, вариантах использования, о нарушении инкапсуляции и самое интересное — зачем они нужны по мнению кандидата.

    Моя статья о вложенных классах на Quizful — здесь.

    И статья об анонимных классах — здесь.

    Вопросы по ООП в Java

    5. Основы ООП

    Здесь уже подробно рассматриваем модификаторы доступа и прочие вещи, которые я упомянул в комментариях к первому вопросу. Можно спросить об интерфейсах и абстрактных классах. Пусть человек своими словами расскажет о полиморфизме и инкапсуляции. Если хотите послушать рассуждения человека, можно спросить о таком фрагменте кода:

    Как продолжение, на этом же примере можно поговорить о расширении/сужении типов в аргументах переопределяемых методов в случае, если бы в Java список формальных параметров не входил бы в сигнатуру метода.

    6. Паттерны проектирования

    Напоминаю, не стоит глубоко спрашивать о паттернах проектирования. И ни в коем случае не поучайте кандидата рассказами о том, «насколько они полезные» и «как их правильно реализовывать». Кстати, по поводу красоты/понятности кода и быстроты его написания мой друг говорит следующее: «Чтобы уметь круто хачить на Java, нужно дохера хачить на Java».

    Каталог паттернов проектирования можете найти здесь

    Вопросы собеседования по многопоточности в Java

    7. Многопоточность в Java.

    Хочу посвятить этой теме цикл статей: одним абзацом не отделаешься. Если вкратце, спросите, зачем нужна многопоточность, что такое монитор объекта, спросите о модификаторах syhcnronized и volatile, методах wait/notify/notifyAll, а так же о пакете java.util.concurrent. А следующий фрагмент кода должен привести к достаточно интересному разговору:

    Интересная статья про методы wait/notify доступна здесь.

    Вопросы, связанные с базами данных

    8. SQL

    Для начала стоит задавать вопросы по ANSI SQL. Далее, в зависимости от СУБД, используемой на проекте, можно спрашивать о важных отличиях ее диалекта. Итак, пусть человек расскажет об основных элементах баз данных — таблицах, процедурах, функциях, констрейнтах и т.д. О констрейнтах можно поспрашивать чуть подробнее. Стоит поинтересоваться, как человек понимает null в базах данных. Переходите к агрегатным функциям и о том, как они работают с null, не забудьте о group by и having. Можно дать пару маленьких задачек на эту тему (см. задачи 1-2 ниже). Поспрашивайте о типах join и дайте пару задачек (см. задачи 3-4 ниже).

    Задача 1. Дана таблица T с колонкой A целого типа, содержащая значения 10, 20, 30, null. Чему будут равны результаты выражений «AVG(A)» и «SUM(A) / COUNT(*)»?

    Задача 2. Дана таблица T с колонкой A целого типа. Напишите запрос, который вернет все положительные значения встречающиеся в таблице более одного раза.

    Задача 3. Даны таблицы T1 и T2. В каждой есть колонка A целого типа. Значения в первой таблице — 1, 2, а во второй — 2, 3. Что вернут запросы с inner join, left/right/full outer join и cross join вида «select T1.A, T2.A from T1 . join T2 on T1.A = T2.A».

    Задча 4. Даны 2 таблицы с колонками A целого типа. Напишите запрос, который вернет все значения колонки А из первой таблицы, для которой нет соответствия в колонке A второй.

    Статья о конструкции Join доступна здесь

    9. JDBC API

    Тут тоже без особых извращений. Спросите о Connection, Statement, PreparedStatement, CallableStatement, ResulSet, зачем каждая из этих сущностей нужна. Можно поинтересоваться о том, чем они являются: абстрактными классамм, конкретными классами или интерфейсами и почему.

    Еще вопросы — как создать соединение в JDBC, каким образом лучше добавлять большое количество записей в таблицу, ну и обязательно о транзакциях и autocommit. Чуть не забыл — вопрос об уровнях изоляции транзакций считаю как минимум странным — в следующий раз, когда решите его задавать, вспомните, сколько раз с уровнями изоляции сталкивались лично вы.

    Читайте на блоге подробный туториал по JDBC.

    Вопросы собеседования по веб-программированию

    10. Servlet API

    Для начала надо спросить об HTTP в целом. Что такое хедеры запроса, какие вообще типы запросов бывают, что такое HTTP Status Code.

    Далее нужно спросить про класс HttpServlet, в каком виде можно работать с запросом и ответом. Что такое сессия (HttpSession) и как ее получить. Не забудьте спросить про ServletFilter и варианты их использования.

    Организм требует сна. Статью завершу через некоторое время. Удачи всем.

    Вопросы по Java на собеседовании (1)

    1. Принципы объектно-ориентированного программирования (ООП)
    2. Class и его свойства
    3. Методы базового суперкласса Object
    4. Отношения между классами : ассоциация, агрегация и композиция
    5. Конструкторы класса
    6. Абстрактный класс
    7. Статический класс и его свойства
    8. Модификаторы свойств класса
    9. Использование this и super
    10. Сигнатура метода
    11. Переопределение и перегрузка методов
    12. Инициализация статических полей
    13. Использование оператора instanceof
    14. Использование модификатора final
    15. Порядок инициализации статических полей потомка и его предка
    16. Определения понятия «интерфейса»
    17. Вложенные и внутренние классы
    18. Аннотации классов
    19. Использование метода finalize
    20. Отличие final, finally, finalize

    1. Принципы объектно-ориентированного программирования (ООП)

    Объе́ктно-ориенти́рованное программи́рование (ООП) — это методология программирования, основанная на представлении программного обеспечения в виде совокупности объектов, каждый из которых является экземпляром определенного класса. Базовой основой любого класса является Object, включающий определенный набор методов.

    Основные принципы ООП : абстракция, инкапсуляция, наследование, полиморфизм.

    Абстракция означает выделение значимой информации и исключение из рассмотрения незначимой. С помощью принципа абстракции программа разбивается на объекты. Информация в программе обрабатывается в виде цепочки действий между отдельными объектами. Главное достоинство абстракции связано с тем, что она позволяет отделить реализацию объектов от их описания.

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

    Инкапсуляция (encapsulation) — это свойство объединения данных и методов в одном классе, позволяющее отделить внутреннее представление от внешнего (интерфейса). Инкапсуляция позволяет закрыть доступ к полям и методам класса другим объектам, либо предоставить доступ к полям класса через свои методы. Можно сказать, что, с точки зрения java, инкапсуляция – это «сокрытие реализации».

    При использовании ООП желательно использовать непрямой доступ к свойствам (полям) какого-либо класса из методов других классов. Для этого в классе необходимо предусмотреть соответствующие методы.

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

    Полиморфизм (polymorphism) — это свойство позволяет использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Полиморфные объекты наследуют один и тот же базовый класс; не обязательно, что базовый класс является родителем, он может «быть предком в третьем колене».

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

    Подробное описание и примеры ООП представлены здесь.

    2. Class и его свойства

    Класс (Class) – это шаблон описания одного или нескольких объектов. Объект представляет экземпляр класса. Шаблон (класс) включает свойства, определяемые характеристиками объектов (полями объекта) и методами их управления. Поля класса определяют, например, такие характеристики объекта, как вес, размер, цвет, площадь и т.д. Методы класса позволяют «оперировать» его полями – определять значение (методы set), выдавать значение (методы get) и т.д.

    Class может наследовать свойства другого класса. Первоосновой любого класса является суперкласс Object. Пример класса :

    В примере представлен класс прямоугольника Rectangle, наследующий свойства класса (фигуры) Shape, и включающий переопределенные методы draw базового класса Shape и toString суперкласса Object. Метод toString возвращает описанные в Shape свойства класса width и height в текстовом виде. При описании свойств класса был использован модификатор public.

    Более подробное описание класса с примерами представлено здесь.

    3. Методы суперкласса Object

    Object является базовым суперклассом для всех остальных объектов/классов Java, т.е. каждый класс наследует свойства Object. Соответственно все классы наследуют следующие методы суперкласса Object :

    public final native Class getClass(); возвращает в run-time класс данного объекта;
    public native int hashCode(); возвращает hash-код;
    public boolean equals(Object obj); сравнивает текущий клас с объектом obj;
    protected native Object clone() throws CloneNotSupportedException; клонирование объекта;
    public String toString(); возвращает строковое представление объекта;
    public final native void notify(); возобновление работа потока, находящегося в ожидании освобождения «монитора» данного объекта;
    public final native void notifyAll(); возобновление работы всех потоков, находящихся в ожидании освобождения «монитора» данного объекта;
    public final native void wait(long timeout) throws InterruptedException; поток переходит в режим ожидания в течение указанного времени timeout;
    public final void wait(long timeout, int nanos) throws InterruptedException; переход потока в режим ожидания в течение указанного времени timeout;
    public final void wait() throws InterruptedException; перевод потока в ожидание, пока другой поток не вызовет notify() или notifyAll() методы для этого объекта;
    protected void finalize() throws Throwable; вызывается сборщиком мусора, когда garbage collector определил, что ссылок на объект больше нет.

    Подробное описание с примерами использования методов hashCode и equals представлено в разделе безопасности. Примеры использования методов многопочного программирования wait, notify, notifyAll c описанием класса Thread (поток) и интерфейса Runnable можно увидеть здесь. Метод finalize описан ниже.

    4. Отношения между классами : ассоциация, агрегация и композиция

    Ассоциация — это отношение, при котором объекты одного типа определенным образом связаны с объектами другого типа. Так объект одного типа может содержать или использовать объект другого типа. Например, игрок Player играет в определенной команде Team. В этом случае класс Player будет связан отношением ассоциации с классом Team. Таким образом, идея ассоциации достаточно простая — два объекта могут быть между собой связаны и это надо как-либо образом описать.

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

    Агрегация определяет отношение одного объекта к другому. Так, например, студент может посещать дополнительные факультативные занятия.

    Композиция определяет более «жесткое отношение», при котором один объект может быть только частью другого объекта. Например Машина и Двигатель : двигатель может существовать отдельно без машины, но он не может быть в двух или трех машинах одновременно, в отличии от студента, который может посещать различные факультативные занятия.

    5. Конструкторы класса

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

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

    6. Абстрактный класс

    Класс может быть объявлен абстрактным при помощи ключевого словом ‘abstract’. Абстрактный класс не предполагает создания экземпляров, а может быть использован только как базовый класс. Таким образом, абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может как содержать, так и не содержать абстрактные методы. Абстрактный метод базового класса должен быть переопределен для его неабстрактных потомков; в базовом классе абстрактный метод только описывается.

    Пример абстрактного класса представлен здесь.

    7. Статический класс и его свойства

    Класс или его свойства могут быть объявлены статическими при помощи ключевого словом ‘static’. При обращении к статическим свойствам класса необходимо в префиксе указывать наименование класса. Статический класс может обращаться к нестатическим членам класса только при помощи объекта реализации класса.

    В java можно использовать статический импорт, применяемый для импорта статических членов класса или интерфейса. Так, например, для импорта статических методов Math.pow() и Math.sqrt() можно использовать в секции import следующий код :

    Статический импорт позволяет использовать вызов методов без наименования класса в префиксе.

    8. Модификаторы свойств класса

    Модификаторы класса позволяют определить уровень доступа к свойству класса. В java существуют следующие модификаторы доступа :

    public (открытый) : поле и метод доступны всем;
    protected (защищённый) : поле и метод доступны всем классам пакета и наследникам;
    private (закрытый) : поле и метод доступны только методам этого класса;
    без модификатора : default, friendly, доступ по умолчанию только внутри своего собственного пакета.

    Примечание : конструктор класса также может иметь модификатор. Если класс имеет единственный конструктор с модификатором private, то невозможно создать объект данного класса. От такого класса нельзя наследоваться. При попытке наследования будет выдаваться ошибка :
    There is no default constructor available in nameClass
    А при попытке создать объект этого класса:
    nameClass() has private access in nameClass

    Можно ли обойти отмеченное выше Примечание? Можно, если в этом классе создать метод, который возвращает экземляр данного класса. Пример :

    А теперь, создаем объект класса, у которого единственный конструктор с модификатором private. Конечно, new TestPrivate() здесь не пройдет, но решить данную задачу с использованием внутреннего статического метода можно.

    9. Использование this и super

    Чтобы обратиться к свойству текущего класса используют this, а к свойству базового класса — super. Так, например, в следующем примере класс Dog наследует свойства класса Animal и переопределяет метод eat(). Для обращения к переопределенному методу eat() своего класса используется вызов this.eat() в методе thisEat. Но, чтобы обратиться из наследника Dog к методу eat() базового класса Animal используется вызов super.eat() в методе superEat.

    Более подробное описание наследования и пример использования this и super представлено здесь.

    10. Сигнатура метода

    Сигнатура метода (method signature) включает наименование метода с параметрами. При этом порядок параметров методов имеет значение. В сигнатуру метода не входят модификаторы, возвращаемое значение и вызываемые методом исключения. Также в сигнатуры не включены операнды synchronized, native и аннотация метода.

    11. Переопределение и перегрузка методов

    Если в иерархии классов сигнатура метода класса-наследника совпадает с сигнатурой метода родительского класса, то метод подкласса переопределяет метод базового класса. Вызов переопределённого метода из своего подкласса всегда ссылается на версию, определённую подклассом, а версия метода родительского класса будет скрыта. Чтобы вызвать «переопределенный» метод родительского класса следует использовать super.

    В одном java-классе можно создавать несколько методов с одинаковыми наименованиями, но разными сигнатурами. Создание метода с тем же именем, но с другим набором параметров называется перегрузкой. На основе фактических параметров JVM определяет какой из перегруженных методов класса должен выполняться при вызове.

    Статические методы могут быть перегружены нестатическими. При вызове из другого класса статического метода используется наименование класса, при вызове нестатического метода – объект реализации.

    12. Инициализация статических полей

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

    Динамический блок является дополнением к конструктору. В следующем коде роль динамического блока играет процедура init :

    Статические блоки в java выполняются до выполнения конструктора. С их помощью инициализируются статические поля.

    13. Использование оператора instanceof

    Оператор instanceof позволяет проверить принадлежность объекта к определенному классу/родителю. Выражение возвращает true, если объект является экземпляром класса или его потомком. В следующем примере демонстрируется использование оператора instanceof в различных условиях :

    14. Использование модификатора final

    Модификатор final может быть применен к полям, методам или классам. Смысл в его применении зависит от сущности, к которой он применен :

    1. Класс с модификатором final не может иметь наследников.
    2. Метод с модификатором final не может быть переопределен в классах наследниках.
    3. Поле помеченное при помощи слова final не может изменить свое значение после инициализации. Инициализируется поле либо при описании, либо в конструкторе, либо в статическом или динамическом блоке.
    4. Значение локальных переменных, а также параметров метода помеченных при помощи слова final не могут быть изменены после присвоения.

    15. Порядок инициализации статических полей потомка и его предка

    Статические поля класса могут быть инициализированы как при объявлении, так и в статических и динамических блоках. Сначала по-порядку вызываются все статические блоки от первого предка до последнего наследника. После этого попарно от предка до последнего потомка вызываются динамические блоки инициализации и конструкторы.

    16. Определения понятия «интерфейса»

    Ключевое слово «интерфейс» (interface) используется для описания полностью абстрактного класса. В описании интерфейса определяются статические поля и методы без тела (кода). Описание методов интерфейса выполняется в классе, реализующим данный интерфейс.

    Реализация интерфейса «определяет поведение» класса. Т.е. именно так должны выглядеть все классы, которые реализуют данный интерфейс : включать статические поля и методы. Таким образом, любой класс, реализующий конкретный интерфейс, «знает» только те статичесие поля и методы, которые представлены в интерфейсе, но не более этого (наследование и реализация в несколько поколений расширяет диапазон статических полей и методов наследника).

    Пример описания интерфейса SomeInterface и его реализации в классе SomeClass :

    По умолчанию все поля, описанные в интерфейсе автоматически являются статическими (static) и неизменными (final). Все методы и переменные неявно объявляются как public. Начиная с 8-ой версии Java в интерфейсе можно объявлять static методы, но они должны включать тело метода.

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

    Описание и пример использования интерфейса представлено здесь.

    17. Вложенные и внутренние классы

    Вложенный класс (nested classes) представляет собой класс, который объявлен внутри объявления другого класса. Вложенные классы могут быть статическими и нестатическими. Нестатические вложенные классы имеют и другое название — внутренние классы (inner classes).

    Внутренние Java классы делятся на три вида :

    • внутренние классы-члены;
    • локальные классы;
    • анонимные классы.

    Внутренние классы-члены (member inner classes) ассоциируются не с самим внешним классом, а с его экземпляром. Такие классы имеют доступ ко всем полям и методам внешнего класса.

    Локальные классы (local classes) определяются в блоке java кода. На практике чаще всего объявление происходит в методе некоторого другого класса. Хотя объявлять локальный класс можно внутри статических и нестатических блоков инициализации.

    Анонимный класс (anonymous class) — это локальный класс без имени.

    Из внутреннего нестатического класса можно обратиться к нестатическому полю внешнего класса с использованием наименования внешнего класса и оператора this. Например, OuterClass.this.fieldName.

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

    Описание и пример использования вложенных (внутренних) классов представлено здесь.

    18. Аннотации классов

    Аннотация («annotation») в языке Java – это специальная форма метаданных, которая может быть добавлена в исходный код. Аннотированы могут быть пакеты, классы, методы, переменные и параметры. Аннотации стали доступны в самом языке начиная с 5-ой версии Java. В 6-ой версии Java аннотации были интегрированы в компилятор javac.

    Имеются встроенные широко используемые аннотации, которые отслеживаются средой разработки IDE и применяются к методу класса :

    • @Override — проверка переопределения метода. IDE вызывает предупреждение компиляции, если метод не найден в родительском классе;
    • @Deprecated — IDE отмечает, что метод устарел и вызывает предупреждение компиляции, если метод используется.
    • @SuppressWarnings — аннотация указывает IDE подавить предупреждения компиляции.

    Аннотации, применяемые к другим аннотациям :

    • @Retention — определяет режим хранения аннотации (в исходном коде или в скомпилированном классе);
    • @Documented — отмечает аннотацию для включения в документацию;
    • @Target — отмечает аннотацию как ограничивающую (какие элементы java-аннотации могут быть к ней применены);
    • @Inherited — отмечает, что аннотация может быть расширена подклассами аннотируемого класса.

    Подробнее об аннотациях можно прочитать здесь.

    19. Использование метода finalize

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

    Можно использовать finalize для чистки данных. Но, во-первых, нет гарантии, что он будет вызван, если где-то в коде осталась ссылка на объект. Ну, и во-вторых, нет гарантии на то, что метод будет вызван сразу. Это связано с тем, что если в объекте переопределен метод finalize, то он вызывается не сразу, а помещается в очередь, которая обрабатывается специально созданным для этого потоком. Следует отметить, что в очередь на «финализацию» попадают только те объекты, в которых переопределен метод finalize.

    Порядок очистки объектов

    Cборщик мусора Garbage Collector не вызывает методы finalize() напрямую (по крайней мере, в HotSpot 1.6), а только добавляет соответствующие объекты в специальный список, вызывая статический метод java.lang.ref.Finalizer.register(Object). Объект класса Finalizer формирует двусвязный список ссылок на объекты, для которых необходимо вызвать finalize(). Т.е. в списке хранятся ссылки на следующий и предыдущий finalize().

    Непосредственный вызов методов finalize() происходит в отдельном потоке «Finalizer» (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины, а точнее в статической секции при загрузке класса Finalizer. Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, то он подвесит поток «Finalizer», но не сборщик мусора. Таким образом, если объект не имеет метода finalize(), то он будут исправно удаляться, а вот объекты с методом finalize будут увеличивать очередь до тех пор, пока «не отвиснет» поток «Finalizer», не завершится приложение или не кончится память.

    Есть вероятность того, что метод finalize() не будет вызван совсем. Это может произойти в том случае, когда сборщик мусора будет готов вызвать метод объекта, но программа завершила свою работу.

    20. Отличие final, finally, finalize

    У этих операторов общим является только корень final, и то, что они являются зарезервированными словами в Java.

    final — модификатор, применяющийся к классам, методам, переменным.

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

    Изучение Java новичку в программировании

    19.06.2012, 17:30

    Самые Азы в программировании на Java ..
    Привет , крутые дядьки программеры , и не очень ) ! У меня возникло неимоверное желание посвятить.

    Помощь в Java новичку
    Добрый день, увлекаюсь web программированием. Ввиду того, что php, html, css не хватает для полного.

    Поможите Java новичку.
    Начал разбираться в сем могучем средстве для написания программок. Столкнулся с проблемой ввода с.

    Java полному новичку
    Решил 100% и уже точно .что хочу стать программистом.Раньше была куча сомнений, постоянно смотрел в.

    Изучение JAVA
    Добрый день, уважаемые Java специалисы. Скажите пожалуйста, хочу начать изучать Java на курсах.

    19.06.2012, 20:23 2 19.06.2012, 20:50 3

    кстати, давно заметил, что прикрепленные/важные темы практически никто не замечает

    16.07.2012, 12:36 4

    Новички всегда боятся читать то, что уже было сделано ДЛЯ НИХ ЖЕ. Или банально лень, хотят получить ответ непосредственно на свой вопрос, не учитывают они того, что пока дождешься ответа — можно уже перечитать все прикрепленные темы и узнать гораздо больше, чем хотел. В прямых ответах недостаток в том, что вы прорубываете в лесу знаний тропинку, а не просеку..

    Разметка страницы и программирование на Java разные вещи Сложности, я думаю, возникнут только с тем, чтобы наконец понять, что с помощью встроенных и внешних библиотек можно очень много чего сделать, не придумывать велосипед. А ещё сложности могут быть с решением ошибок компилятора из-за отсутствия опыта. И решение некоторых проблем и странностей оболочек разработки для Java Часы мучений, нервов и разбирательств с помощью гугла постепенно выведут вас из этого ужаса

    Как научиться программировать на Java — полное руководство

    В данном руководстве мы расскажем обо всём, что нужно знать перед началом изучения программирования на Java . Вы узнаете о возможностях платформы, её применении, а также о том, как правильно начать изучение Java .

    Что такое язык программирования Java?

    В 1991 году « Зелёная команда », подразделение Sun Microsystems , возглавляемое Джеймсом Гослингом , создала язык для программирования бытовых электронных устройств. На тот момент он назывался Oak (« Дуб »). Почему « Дуб »? Просто потому, что за окном рабочего кабинета Гослинга росло это дерево.

    « Зелёная команда » продемонстрировала использование Oak в интерактивном телевизоре. Но для цифрового кабельного телевидения тех лет эта технология была слишком передовой. Одновременно с этим набирал популярность интернет, для которого новый язык программирования подходил лучше всего.

    Через некоторое время новый язык переименовали в Green , и уже после этого — в Java , в честь кофе с острова Ява. Поэтому на логотипе Java изображена кружка с кофе.

    Во время разработки Java были популярны C/С++ , поэтому Гослинг сделал синтаксис языка похожим на C/C++ и реализовал для него принцип « написать один раз — запустить где угодно ». В 1995 году Sun Microsystems выпустили первую официальную версию Java . И одновременно с этим было объявлено, что Java войдёт в состав браузера Netscape Navigator .

    В 2010 году компания Sun Microsystems вместе с языком программирования Java была приобретена корпорацией Oracle .

    История версий Java

    1. Июнь 1991 – старт проекта разработки языка программирования Java .
    2. JDK 1.0 – Январь 1996 года.
    3. JDK 1.1 – Февраль 1997 года.
    4. J2SE 1.2 – Декабрь 1998 года.
    5. J2SE 1.3 – Май 2000 года.
    6. J2SE 1.4 – Февраль 2002 года.
    7. J2SE 5.0 – Сентябрь 2004 года.
    8. Java SE 6 – Декабрь 2006 года.
    9. Java SE 7 – Июль 2011 года.
    10. Java SE 8 – 18 марта 2014 года.
    11. Java SE 9 – 21 сентября 2020 года.

    Функции языка программирования Java

    Java — межплатформенный язык

    Код Java , написанный на одной платформе ( то есть операционной системе ), можно запустить без изменений на других платформах.

    Для запуска Java используется виртуальная машина Java ( Java Virtual Machine, JVM ). JVM обрабатывает байтовый код, после чего процессор обрабатывает код, полученный от JVM . Все виртуальные машины работают аналогично, поэтому один и тот же код работает одинаково во всех операционных системах, что и делает Java межплатформенным языком программирования.

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

    Существуют различные стили программирования, и один из самых популярных — объектно-ориентированное программирование. При таком подходе сложная проблема разбивается на более мелкие путём создания объектов. Благодаря чему код можно использовать повторно.

    Объектно-ориентированные функции есть во многих языках программирования, включая Java , Python и C++ . Если вы серьёзно настроены освоить программирование, объектно-ориентированный подход стоит включить в план своего обучения.

    Java работает быстро

    Ранние версии языка программирования Java часто критиковали за медленную работу. Но сегодня ситуация кардинально поменялась. Новые версии JVM работают значительно быстрее, а интерпретирующие их процессоры становятся всё шустрее.

    Сегодня Java — один из самых быстрых языков программирования. Хорошо оптимизированный Java-код работает почти так же быстро как низкоуровневые языки программирования, такие как C/C++ и намного быстрее, чем Python , PHP и т.д.

    Java — безопасная платформа

    Java представляет собой :

    • безопасную платформу для разработки и запуска приложений;
    • предоставляет средства для автоматического управления памятью, что снижает уязвимость кода;
    • обеспечивает безопасную передачу данных.

    Обширная базовая библиотека

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

    java.lang – это продвинутые функции для строк, массивов и т.д.

    java.util – библиотека для работы со структурами данных, регулярными выражениями, датой и временем и т.д.

    kava.io — библиотека для ввода/вывода файлов, обработки исключений и т.д.

    Применение платформы Java

    Перед обучением Java программированию с нуля , нужно знать, что на это платформе работает более 3 миллиардов устройств по всему миру. Для чего конкретно можно её применить:

    1. Приложения для Android — для разработки Android-приложений язык программирования Java часто используется в сочетании с Android SDK ( от английского software development kit — комплект разработки программного обеспечения ).
    2. Веб-приложения — Java используется для создания сетевых приложений с помощью серверных программ, фреймворка Struts и JSP . Вот некоторые популярные веб-приложения, написанные на Java: Google.com , Facebook.com , eBay.com , LinkedIn.com .

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

    1. Разработка программного обеспечения – на Java написаны такие программы как Eclipse , OpenOffice , Vuze , MATLAB и многие другие.
    2. Обработка Big Data – для обработки « больших данных » можно воспользоваться фреймворком Hadoop , написанным на Java .
    3. Трейдинговые системы – используя платформу Oracle Extreme Java Trading Platform , можно писать программы для трейдинга.
    4. Встраиваемые устройства – на основе технологии Java Embedded от Oracle сегодня работают миллиарды устройств, таких как телевизоры, SIM-карты , проигрыватели Blu-ray и т.д.

    Также программирование на Java используется для разработки игр, научных приложений ( к примеру, для обработки естественного языка ) и во многих других областях.

    Терминология Java, которую следует знать

    Java – это набор технологий ( язык программирования и компьютерная платформа ), предназначенных для создания и запуска программного обеспечения. Однако термином Java часто обозначают и сам язык программирования.

    Язык программирования Java – межплатформенный объектно-ориентированный язык программирования общего назначения, обладающий широкими возможностями.

    Java 9 – последняя на момент написания данной статьи версия Java .

    Java EE , Java Me и Java SE – эти названия обозначают Java Enterprise Edition , Micro Edition и Standard Edition , соответственно.

    Java EE нацелена на приложения, запускаемые на серверах. Java ME создана для ограниченных по мощности устройств, таких как встраиваемые устройства. Java SE — стандартное издание Java для написания обычных программ.

    Если вы новичок в Java-программировании , рекомендуем начать с Java SE .

    JVM — Java Virtual Machine (« виртуальная машина Java ») — это программа, позволяющая компьютеру запускать программы, написанные на Java .

    JRE – Java Runtime Environment (« среда выполнения Java ») включает в себя JVM , соответствующие библиотеки и другие компоненты, необходимые для запуска программ. Но в JRE нет компилятора, отладчика и других средств разработки.

    JDK – Java Development Kit ( комплект Java разработчика ) содержит JRE и другие инструменты разработки, такие как компиляторы, отладчики и т.д.

    Как запустить Java на своей операционной системе

    Как запустить Java на Mac OS

    Вот что нужно сделать для Java программирование с нуля и установки платформы на Mac OS X или macOS :

    1. Скачайте свежую версию Java ( JDK ) со страницы загрузки Java SE .
    2. Дважды кликните по скачанному DMG-файлу и следуйте инструкциям программы-установщика.
    3. Для верификации установки откройте терминал и введите следующую команду:

    javac –version

    Если Java установлена верно, на экран будет выведена версия программы ( например, javac 1.8.0_60 ).

    Следующим шагом будет установка IDE ( интегрированной среды разработки ) для написания и запуска Java-кода . Мы установим бесплатную версию IntelliJ IDEA и запустим на ней Java . Вот что нужно для этого сделать:

    1. Перейдите на страницу загрузки IntelliJ и скачайте бесплатную версию Community Edition .
    1. Откройте скачанный DMG-файл и следуйте инструкциям по установке. Для быстрого доступа можно переместить IntelliJ IDEA в папку « Программы ».
    2. Откройте IntelliJ IDEA . Выберите опцию « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « Ok » . После этого примите политику приватности Jetbrains , нажав на кнопку « Accept » .
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию. Если не уверены, просто пропускайте этот шаг, нажав кнопку « Skip All and Set Defaults » (« Пропустить всё и установить настройки по умолчанию »).
    1. Программа покажет вам страницу приветствия. Нажмите на кнопку « Create New Project » (« Создать новый проект »).
    2. В следующем окне выберите « Java » в левой панели и нажмите « New » вверху окна программы для выбора « JDK » . Здесь надо выбрать место, куда установили JDK , после чего нажать Next .
    1. У вас будет вариант создать проект из шаблона (« Create project from template » ). Игнорируем его и нажимаем кнопку « Next » .
    2. На следующем шаге установки языка программирования Java введите имя проекта и нажмите кнопку « Finish » .
    3. В левой панели вы увидите свой проект. Если панели не видно, перейдите в меню Views > Tool Windows > Project .
    4. Зайдите в Hello > New > Java и задайте имя класса. Мы назвали его First .
    1. Напишите Java-код и сохраните проект.
    2. Для запуска только что написанной программы, зайдите в Run > Run… Нажмите на First ( то есть имя созданного нами файла ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Linux

    Для запуска примеров из уроков программирования с нуля Java на Linux понадобится JAVA SE Development Kit ( JDK ) и IDE для разработки своих проектов. Следуйте инструкции шаг за шагом, чтобы начать работу с Java .

      Откройте терминал и наберите следующую команду для установки Java:

    java –version

    Если выводится текущая версия, установка прошла успешно. Если же нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .

    1. Скачайте бесплатную версию Community Edition , нажав кнопку « Загрузить ».
    2. После скачивания смените в терминале директорию на директорию загрузок и извлеките tar-файл Java в папку /opt следующей командой:
    1. После распаковки поменяйте директорию на папку bin программы IntelliJ IDEA :
    1. Два раза нажимаем « Next » и создаём проект.
    2. На следующем шаге введите имя проекта и нажмите кнопку « Finish » . Теперь в левой панели вы увидите свой проект. Если этой панели не видно, перейдите в меню Views > Tool Windows > Project .
    3. Добавьте новый класс Java . Выберите src на левой панели правой кнопкой и зайдите в New > Java Class . Задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите Java-код и сохраните проект.
    2. Для запуска программы, зайдите в Run > Run … Нажмите на HelloWorld ( название проекта ) — программа скомпилирует файл и запустит его.

    Как запустить Java на Windows (XP, 7, 8 и 10)

    Для освоения Java основ программирования и запуска платформы на Windows потребуется JAVA SE Development Kit (JDK) и IDE для разработки проектов. Следуйте пошаговой инструкции, приведенной ниже:

    Установка Java

    • Перейдите на страницу загрузки Java Standard Edition Development Kit .
    1. В разделе Java SE Development Kit вверху таблицы нажмите « Accept License agreement» (« Принять лицензионное соглашение »). Затем кликните по ссылке Windows (x64) , если у вас 64-битная операционная система или Windows (x86) , если у вас 32-битная ОС .
    1. После скачивания запустите установочный файл и следуйте инструкциям, которые будут появляться на экране. Нажмите « Next ». Выберите все функции, нажав « This feature will be installed on local hard drive » и скопируйте место установки ( оно выделено жёлтым ) в « Блокнот », после чего снова нажмите « Next ».
    1. В процессе установки появится запрос об установке JRE . Нажмите « Next » , а затем « Finish » для завершения установки.
    2. Теперь необходимо отредактировать переменную PATH . Перейдите в Панель управления > Система и безопасность > Система . В левой панели выберите « Дополнительные параметры системы».
    1. Нажмите « Переменные среды» . В разделе « Системные переменные» найдите переменную PATH и в следующем окне нажмите « Изменить» .
    1. Выберите весь текст в поле « Значение переменной» и скопируйте его в отдельный текстовый файл. Так будет легче его отредактировать и проверить на наличие ошибок. Посмотрите, есть ли в скопированном тексте строка: C : ProgramData Oracle Java javapath ; . Если да, то можно переходить к следующему шагу. Если нет, то вставьте скопированное ранее место установки в начало переменной и добавьте в конце строки bin вот так: C : Program Files ( x 86) Java jdk 1.8.0_112 bin ; Обратите внимание, что ваша версия JDK ( jdk 1.8.0_112 ) может отличаться. Скопируйте значение переменной и вставьте его в окошко PATH .
    1. Нажмите « ОК », чтобы сохранить внесенные изменения.
    2. Чтобы проверить, правильно ли установлена платформа для введения в программирование Java , откройте командную строку , набрав cmd в строке поиска Windows или через команду « Выполнить… » ( Windows — R ). Введите команду java -version . Если отображается текущая версия Java , значит, установка прошла успешно. Если нет, сверьтесь со страничкой помощи Oracle .

    Установка IntelliJ >страницу загрузки IntelliJ IDEA .
  • Скачайте бесплатную версию Community Edition , нажав « Загрузить ».
    1. После загрузки запустите файл установки и следуйте инструкциям, которые будут появляться на экране. Затем создайте ярлык на рабочем столе для 64-битной версии и добавьте ассоциации с расширением .java . Нажмите « Next » и продолжайте установку.
    1. После установки откройте IntelliJ IDEA , нажав на значок на рабочем столе.
    2. Выберите « Don ’ t import settings » (« Не импортировать настройки ») и нажмите « OK ». После этого принимаем политику приватности Jetbrains, нажав « Accept ».
    3. Теперь можно настроить интерфейс под себя. Также можно пропустить этот шаг и оставить всё по умолчанию, нажав кнопку « Skip All and Set Defaults » .
    4. Программа покажет страницу приветствия. Нажмите « Create New Project » (« Создать новый проект »).
    1. В следующем окне выберите « Java » в левой панели и нажмите « New » в верхней части окна программы для выбора JDK . Здесь надо выбрать местоположение, куда установили JDK во время установки Java , после чего нажать « Next ».
    2. IntelliJ IDEA найдёт JDK и распознает его. Никакие другие опции отмечать не нужно, просто нажмите « Next » .
    3. На следующем экране введите имя проекта: HelloWorld и нажмите « Finish ». Если программа скажет, что директории не существует, нажмите « ОК ». Если вы не видите левой панели, перейдите в меню Views > Tool Windows > Project .
    4. Чтобы задать имя класса, выберите в левой панели папку src. Кликните по ней правой кнопкой мыши, зайдите в New > Java и задайте имя класса. В имени класса не должно быть пробелов.
    1. Напишите код и сохраните проект Java урока программирования .
    2. Для запуска программы, зайдите в меню Run > Run … Нажмите на HelloWorld — программа скомпилирует файл и запустит его.

    Ваша первая программа на Java

    Чтобы познакомить пользователей с новым языком программирования, используют программу Hello World (« Привет, мир! »). Это простая программа, которая выводит на экран слова Hello, World ! В этом разделе мы научим вас писать данную программу на Java , используя IntelliJ IDEA .

    1. Откройте IntelliJ IDEA .
    2. Перейдите в File > New > Project… > Java ( в левой панели навигации ).
    3. Задайте имя проекта ( Project Name ) из курса программирования J a va . Мы назовём его Hello World и нажмём « Finish ».
    4. Теперь нужно создать новый класс Java .
    5. Выберите папку src в левой панели, после чего перейдите в меню File > New > Java Class и задайте имя нового класса- HelloWorld .
    6. Скопируйте следующий код в файл HelloWorld.java и сохраните его.
    1. Нажмите кнопку запуска ( Run ). Если всё в порядке, вы увидите на экране надпись Hello, World !

    Как выучить Java?

    Официальная документация Java

    Oracle , компания, владеющая Java , публикует качественные уроки. Официальная документация освещает все функции Java и регулярно обновляется.

    Примечание: единственный минус — официальная документация Java не всегда написана самым простым языком.

    Рекомендуемые книги по Java

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

    Java: Полное руководство (10-е издание)

    Отличная книга для тех, кто только начинает изучать Java . Последнее издание включает все функции релиза Java 8 .

    В книге описано всё, что нужно знать о программировании на Java , включая синтаксис, ключевые слова и фундаментальные основы программирования, а также библиотеку API Java , апплеты Java и многое другое.

    Философия Java (4-е издание)

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

    Java 8. Карманный справочник: Скорая помощь Java-программистам

    Эта книга содержит понятные ответы на вопросы, возникающие при обучении J ava программированию с нуля . Она кратко рассказывает обо всех основных концепциях Java ( включая Java 9 ). Не хотите листать сотни страниц в поисках нужной строчки? Купите эту книгу.

    Вместо заключения

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

    Перед тем, как приступить к изучению Java , воспользуйтесь несколькими советами:

    • Не читайте обучающие статьи и примеры как роман. Единственный способ стать хорошим программистом — писать много кода.
    • Если переходите с другого языка программирования ( скажем , C# ), не надо писать код в стиле C# .
    • Найдите онлайн-сообщества, посвященные Java . Когда научитесь писать простые программы на Java , найдите популярные сайты и форумы, посвященные Java . Пробуйте решать проблемы, возникающие у других программистов. Это отличный способ расширить собственные знания. К тому же, если у вас возникнет загвоздка, вы будете знать, где можно попросить помощи.

    Надеемся, эта статья подтолкнёт вас к изучению Java и поможет начать работу над первыми программами.

    Данная публикация представляет собой перевод статьи « Learn Java Programming. The Definitive Guide » , подготовленной дружной командой проекта Интернет-технологии.ру

    Цукерберг рекомендует:  Мгновенная проверка правильности введения Email в форму
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих