Почему Java?
Именно на Java написано большинство проектов и приложений, а также крупные Enterprise-приложения, например онлайн-банки. Он классический, строго типизированный, а значит, отлично подойдёт для начального уровня.
Какие плюсы Java мы можем сразу же отметить:
- Код на Java многословный и длинный. С одной стороны это может сразу же отпугнуть, но в этом и есть плюс. В процессе написания кода всё настолько чётко и ясно, что у вас меньше шансов ошибиться или получить неожиданное поведение.
- У Java немного языковых конструкций, и большинство из них трактуются однозначно.
- Он имеет обратную совместимость, то есть при выходе новой версии языка ничего не ломается в старом коде, в отличие от более специализированных языков, например Swift’а.
- Для новичка есть много преимуществ популярности Java. Как минимум то, что у него огромное комьюнити. Это означает, что найти людей, которые разбираются в деталях и могут помочь в изучении, очень легко. Например среди знакомых, по сарафанному радио или просто в группах в соцсетях и каналах в мессенджерах.
- В доступе также большое количество статей, видео и книг, которые постоянно актуализируются, поэтому найти помощь будет легче, чем с экзотическим языком.
Поэтому Java — тот язык, с которого стоит начать обучение программированию, освоить мобильную разработку и на котором стоит сделать своё первое приложение, а уже затем развиваться дальше и учить другие языки.
Java
Чтобы освоить Java, вам могут пригодиться, следующие ресурсы:
- Изучаем Java Сьерра Кэти, Бэйтс Берт — эта книга не только научит вас теории языка Java и объектно-ориентированного программирования, она сделает вас программистом. В ее основу положен уникальный метод обучения на практике. В отличие от классических учебников информация дается не в текстовом, а в визуальном представлении.
- Become a Java Developer — курс от Udacity, который поможет вам изучить Java
- Джошуа Блох: Java. Эффективное программирование — эта книга является классикой для Java-программистов. Для новичков может быть несколько сложновата, но постарайтесь прочитать ее хотя бы половину и вернитесь к ней через годик, все сразу станет на свои места. Кстати, многие вопросы на собеседовании по Java взяты именно отсюда, так что не ленитесь, почитайте.
- Java. Библиотека профессионала. Том 1. Основы | Хорстманн Кей С. — Эта книга давно уже признана авторитетным, исчерпывающим руководством и практическим справочным пособием для опытных программистов, стремящихся писать на Java надежный код для реальных приложений. Быстро освоить основной синтаксис Java, опираясь на имеющийся опыт и знания в программировании.
Изучаем Android SDK
Как только вы освоили базовый синтаксис и поняли базовые концепции, переходите к изучению Android SDK, параллельно читая перечисленные выше книги. Изучение Android SDK вы можете начать с таких ресурсов как:
- Android Kotlin Fundamentals — набор туториалов для начинающих Android-разработчиков от Google на языке программирования Kotlin. Из курса вы узнаете об основных компонентах Android SDK, таких как Activity, Intent, BroadcastReceiver и других.
- Become an Android Developer — курс на Udacity, где за 6 месяцев вам расскажут от том как разрабатывать мобильные приложения под Android
- Школа мобильной разработки — набор лекций об устройстве Android от Яндекс. Часть материала немного устарела, но даже сейчас будет очень полезна как начинающим, так и уже более-менее опытным разработчикам.
- Android Programming: The Big Nerd Ranch Guide — достаточно понятная книга для новичков, чтобы понять программирование под Android OS
- The Busy Coder’s Guide to Android Development — книга, которая уже, наверное стала классикой для Android — программистов, один из самых полных источников знаний по Android OS
Это далеко не полный список, материалов огромное количество, но изучив вышеперечисленные ресурсы, вам с запасом хватит знаний для программирования под Android. Главное — не забывайте ежедневно практиковаться, общаться с наставником или ментором чтобы быстрее понимать свои ошибки и учиться на них.
Изучаем популярные библиотеки
Итак, вы неплохо знаете синтаксис языка, понимаете ООП, умеете применять наследование там где оно нужно и ваши приложения более-менее работают. Возможно, еще без применения архитектуры (MVP/MVVM/VIPER/RIBs) и без навороченных библиотек или фрэймворков. Самое время изучить и их.
В этом разделе я приведу список наиболее популярных библиотек, который используются в большинстве Android — проектов. Изучив их, вы смело сможете претендовать на звание junior или даже middle — разработчика.
HTML файл:
Для начала как всегда начнём с HTML страницы и тут конечно не чего сложного нет.
XHTML
1 2 3 4 5 6 7 8 |
<p>number 1<input type=»text»id=»n1″></p> <p>number 2<input type=»text»id=»n2″></p> <button onclick=»plus()»>+</button> <button onclick=»minus()»>-</button> <button onclick=»multiplication()»>X</button> <button onclick=»division()»></button> <hr> <p>Result: <span id=»out»></span></p> |
Вот такой, совсем короткий HTML получается, кратко расскажу о нём.
Атрибут , это событие клика мыши на элемент, в параметрах задаётся функция, которая будет запускаться при клики на элемент, это в принципе всё что нужно знать.
Остаться на Java?
Java — официальный язык программирования, поддерживаемый IDE Android Studio, внутри которого встроен набор инструментов для разработки мобильных приложений Android SDK. Тотальное большинство существующих мобильных приложений для Android написано именно на Java с частичным использованием языка разметки XML (для вёрстки UI) и систем автоматической сборки (Gradle, Maven или Ant). При этом Java и Kotlin можно использовать в одном в проекте, благодаря компилятору последнего: он преобразует машинной код совместимый с Ява-машиной
Плюсы
Не нужно быть сеньором в разработке, чтобы это знать — Java один из основополагающих и ведущих языков программирования с крупнейшим комьюнити. Java легка в освоении и обладает достаточно высокой производительностью. Актуальность и популярность выливается в один огромный плюс — востребованность на рынке труда, множество вакансий, тысячи гайдов, десятки тысяч библиотек и куча готовых примеров (привет, Stackoverflow). Зная Java, перейти при необходимости на Kotlin не составит труда, тем более, что студии пока что всё равно требуют опыт Явы. Зная только Kotlin вы серьёзно сокращаете количество мест, в которые можете устроится (в коммерческой разработке для Android могут возникнуть задачи, где знание Java будет обязательно).
Минусы
Для тех, кто не особо дружит с ООП, Java может вызывать лютое жжение ниже спины: конструкторы классов, исключений, приводящих к падению приложения при отладке, не говоря уж о сбоях при непосредственно работе. Так же в dev-среде есть мнение, что Java морально устарела: отсутствие должной безопасности, не самого удобного синтаксиса и поддержки функционального программирования вперемешку с огромным пластом легаси кода в проектах сильно снижают интерес к этому языку со стороны новой волны разработчиков. Количество компаний, требующих именно Kotlin растёт день ото дня
Консольный калькулятор Java
Необходимо написать простой консольный калькулятор на Java.
- Метод int getInt() — должен считывать с консоли целое число и возвращать его
- Метод char getOperation() — должен считывать с консоли какое-то значение и возвращать символ с операцией (+, -, * или /)
- Метод int calc(int num1, int num2, char operation) — должен выполнять над числами num1 и num2 арифметическую операцию, заданную operation.
- Метод main() — должен считывать 2 числа (с помощью getInt()), считать операцию (с помощью getOperation(), передать все методу calc() и вывести на экран результат.
Комментарии к задаче:
Прежде чем решать данную задачу, необходимо разбить задачу на подзадачи. Как видно из картинки ниже, всего есть 3 основных шага:
Поэтому в методе int getInt() мы прописали механику считывания числа с консоли и проверки целочисленное число введено или нет.
И потом просто в методе main() вызовем 2 раза метод int getInt(), потому что пользователь будет вводить 2 числа
Обратите внимание, что с помощью конструкции if-else мы прописали, что если число целочисленное, тогда присвоить введенное пользователем значение в переменную num, если же не целочисленное, — вывести в консоль «Вы допустили ошибку при вводе числа. Попробуйте еще раз»
Также обратите внимание, что мы использовали рекурсию в else:
Выбор операции (+,-,*,/) мы осуществили с помощью метода char getOperation()
Как видите, пользователю предлагается ввести операцию. А далее программа должна распознать было ли введенное пользователем значение типа char или нет. Причем нас устроит только, если пользователь введет: +, — , * или /. Например, если пользователь введет число, нас не устроит. Верно? Поэтому мы применили небольшую «хитрость» вот в этих 2 строчках кода:
Мы с помощью метода сканера next() считали всю строчку. А далее, поскольку нам не нужна вся строка, а нужен только первый элемент строки, то есть нулевой элемент, поэтому мы вызвали еще и метод charAt(0). И таким образом мы получим только значение 0-го элемента, а не всей строки.
Если вдруг подзабыли как работают методы сканера, перечитайте еще раз вот эту статью — «Работа со сканером в Java». А также, если необходимо вспомнить как работает метод charAt(), перечитайте вот эту статью — «charAt() в Java»
И далее мы прописали сам метод int calc(int num1, int num2, int operation):
Как видите, мы использовали конструкцию switch-case. И прописали, что:
- если пользователь ввел +, тогда num1+num2, то есть суммируем 2 числа, введенных пользователем.
- если пользователь ввел -, тогда num1-num2, то есть из 1-го числа, введенного пользователем вычитаем 2-е число
- и т.д.
Если вдруг Вам необходимо вспомнить как работает конструкция switch-case, перечитайте вот эту статью — «Условный оператор if в Java. Оператор switch»
Также обратите внимание, что здесь мы тоже использовали рекурсию. Вот в этих строчках кода:. И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:
И после того как мы прописали все необходимы методы, мы в методе main() прописали следующее:
- То есть в переменные num1 и num2 будут присвоены, соответственно, 1-е и 2-е число, введенное пользователем.
- В переменную operation будет присвоена операция, которую ввел пользователь: +, — , * или /
- Далее в переменную result будет присвоен результат вычислений «нашего калькулятора»
- И после этого результат будет выведен в консоль
Надеемся — наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.
Clone
- Метод сlone нужен для копирования объекта.
- В методе clone присутствует защищенный модификатор доступа.
- Для вызова метода clone объекту требуется реализация интерфейса Cloneable. В противном случае выбрасывается исключение CloneNotSupportedException.
- Интерфейс Cloneable является маркерным, то есть методы не определяют интерфейс, а говорят классу об особом отношении.
- Плюс такого интерфейса: можно копировать только объекты, доступные для клонирования.
- Если какое-то поле объекта ссылается на другой объект, то делаем поверхностную копию. В ней копируется только адрес памяти, т.е. используется один и тот же объект.
- При глубоком копировании происходит создание объекта и новое динамическое распределение памяти.
Не обращайте внимание на оператора try — к нему мы вернемся позже
Методы класса Scanner, которые обрабатывают ввод пользователя в Java:
- next(): получает введенную строку до первого пробела
- nextLine(): получает всю введенную строку
- nextInt(): получает введенное число int
- nextDouble(): получает введенное число double
- nextBoolean(): получает значение boolean
- nextByte(): получает введенное число byte (число от -128 до 127)
- nextFloat(): получает введенное число float
- nextShort(): получает введенное число short (число от -32768 до 32767)
Для нашего нового объекта Scanner мы будем использовать метод next:
String first_name; first_name = user_input.next();
Чтоб увидеть весь список доступных методов, введите после нашего объекта user_input точку. Нам нужен next. Дважды кликните по next и введите точку с запятой, чтобы завершить строку. Также мы напечатаем некоторый текст, как предложение о вводе данных:
String first_name; System.out.print("Введите имя: "); first_name = user_input.next();
Обратите внимание, что мы использовали print, а не println, как в прошлый раз. Разница между ними заключается в том, что println переместит курсор на новую строку после вывода, а print оставит курсор на той же строке
Также мы добавим предложение о вводе фамилии:
String family_name; System.out.print("Введите фамилию: "); family_name = user_input.next();
Это тот же код, за исключением того, что java теперь будет хранить все, что пользователь вводит, в нашу переменную family_name вместо переменной first_name.
Чтобы распечатать ввод, мы можем добавить следующее:
String full; full = first_name + " " + family_name; System.out.println("Вас зовут " + full);
Мы установили еще одну переменную String — full. В ней мы сохраним все, что есть в двух переменных first_name и family_name (в строке ввода ввел пользователь). Между ними мы добавили пробел. Последняя строка выводит все это в окно вывода.
Адаптируйте ваш код так, чтобы он соответствовал следующему изображению:
Запустите программу, и в окне «Вывод» отобразится следующее:
На этом этапе Java приостанавливается, пока вы не введете что-либо на клавиатуре. Работа кода не продолжиться, пока вы не нажмете клавишу ввода. Итак, кликните левой кнопкой мыши после «Введите имя:», и вы увидите, что курсор мигает. Введите имя и нажмите клавишу ввода на клавиатуре.
После того, как вы нажмете клавишу ввода, java возьмет то, что было набрано, и сохранит его в имени переменной слева от знака равенства. Для нас это была переменная с именем first_name.
Затем программа переходит к следующей строке кода:
Введите фамилию и снова нажмите клавишу ввода:
Пользовательский ввод завершен, а остальная часть программы выполняется. Это вывод двух имен. Конечный результат должен выглядеть так:
Таким образом, мы использовали класс Scanner для получения ввода от пользователя. Все, что было напечатано, сохранилось в переменных. Затем результат был напечатан в окне вывода.
В следующем уроке мы кратко рассмотрим класс JOptionPane.
Best Practices
Конечно, вам нужно не только знать про рефакторинг, но еще и перенимать опыт best practices у профессионалов мирового уровня. Какая книга в мире Java самая популярная? Чьи советы являются самыми важными в мире?
«Effective Java» by Joshua Bloch
Ее нужно прочитать каждому. Всё.
Идем дальше. «Well-Grounded Java Developer» by Benjamin Evans. Она же есть и в русском варианте. Автор пробегается по JDK и подымает важные темы, чтобы «прокачать» разработчика до нового уровня.
Честно сказать, книг, подобных «Well-Grounded Java Developer», много, а еще куда больше блогов и туториалов от ребят, которые не стесняются делиться опытом. Я остановился на самых главных.
Метод nextLine()
NextLine() в Java применяется для класса Scanner. Этот метод так же, как и readLine(), нужен для получения и чтения данных, написанных пользователем. Чтобы применить nextLine(), в коде нужно прописать объект Scanner.
Этот метод читает и воспроизводит данные до конца строки. Другими словами, он может считывать информацию до тех пор, пока не начнется новая строка или старая не будет разорвана с помощью \n или Enter.
Вот как nextLine() работает в Java:
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); } }
Что пишет пользователь:
Дни бегут, мы выходим в поле Птицы в небе и дети в школе Шум и пение, тьма и свет Сердце новое, смерти нет
Что показывает программа:
Дни бегут, мы выходим в поле
Метод nextLine работает с данными только одной строки, поэтому остальное стихотворение теряется из-за разрыва между предложениями и перехода на новую строчку.
Чтобы показать стих полностью, нужно написать следующий код:
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); } }
Компиляция программы
Чтобы скомпилировать программу Example, запустите компилятор (), указав имя исходного файла в командной строке следующим образом:
Компилятор javac создаст файл , содержащий версию байткода. Как пояснялось ранее, байт-код Java является промежуточным представлением программы, содержащим инструкции, которые будет выполнять виртуальная машина JVM. Следовательно, компилятор javac выдает результат, который не является непосредственно исполняемым кодом.
Чтобы выполнить программу, следует воспользоваться загрузчиком приложений Java, который называется . Ему нужно передать имя класса в качестве аргумента командной строки, как показано ниже.
Выполнение данной программы приведет к выводу на экран следующего результата:
В процессе компиляции исходного кода каждый отдельный класс помещается в собственный выходной файл, называемый по имени класса и получающий расширение . Поэтому исходным файлам программ на Java целесообразно присваивать имена, совпадающие с именами классов, которые содержатся в файлах с расширением . При запуске загрузчика приложений описанным выше способом в командной строке на самом деле указывается имя класса, который нужно выполнить. Загрузчик приложений автоматически будет искать файл с указанным именем и расширением . И если он найдет такой файл, то выполнит код, содержащийся в указанном классе.
Как начать писать код на Java?
Если вы приступаете к изучению Java с нуля, то сразу ответьте себе на вопрос, сколько времени вы готовы уделять практике. Потому что любой язык программирования — это как английский: только на книжках и теории выучить не получится.
Для начала необходимо разобраться с базовыми понятиями программирования. Они похожи во всех языках, начинайте с переменных и типов данных в Java, условных операторов, циклов, функций и массивов. Это именно те синтаксические конструкции языка, которые вы затем будете использовать для построения кода.
Важно уделить внимание ООП — объектно-ориентированному программированию. Это парадигма (подход, идея) описания вещей из реального мира в коде с помощью объединения свойств и методов. Например, у каждого автомобиля есть набор характеристик: марка, тип топлива, мощность, год выпуска — это свойства автомобиля
В свою очередь, каждый автомобиль обладает набором функций: он может ехать, тормозить, управлять светом фар и т. д. В ООП также важно, как знание функций и характеристик автомобиля для водителя
Например, у каждого автомобиля есть набор характеристик: марка, тип топлива, мощность, год выпуска — это свойства автомобиля. В свою очередь, каждый автомобиль обладает набором функций: он может ехать, тормозить, управлять светом фар и т. д
В ООП также важно, как знание функций и характеристик автомобиля для водителя
На данном этапе этих базовых знаний вам будет достаточно, чтобы создать своё первое приложение, например простой калькулятор или игру.
Приведём простой пример кода, который обычно разбирают новички в начале обучения. Наша задача — сделать простейший экран с одной карточкой для отображения поста из соцсети. Код на Java будет выглядеть так:
Отметим, что если вы уже знаете основы программирования, то за 2 недели можно начать писать на Java. А учитывая, что язык заставляет явно и однозначно прописывать каждое своё намерение, изучение проходит гладко. Если вы приступаете к изучению Java с нулевого уровня, лучше закладывать хотя бы 2 месяца на основы и практику.
Теперь затронем вопрос выбора наиболее удобного способа изучения Java. Предлагаем несколько вариантов. Первый: получение специальности программиста в университете. С одной стороны, это позволит узнать не только Java, но и другие языки и виды разработки, вы получите фундаментальные знания программирования. Но обучение в вузе — слишком долгий и сложный путь для тех, кто хочет начать разрабатывать на Android быстро.
Второй вариант: изучение основ самостоятельно по книгам, видео и статьям. Как мы писали выше, в сети множество актуальных материалов по мобильной разработке и в частности по Java. Такой путь обучения подойдёт тем, у кого много терпения и усидчивости. Всё придется выучить и понять самому. А если ваш уровень знаний — нулевой, то даже базовые понятия и конструкции могут показаться сперва слишком сложными и непонятными. К тому же теория без практики не сможет дать полной картины.
Есть третий способ: получение нужных знаний и навыков на дополнительных курсах, например онлайн. Сейчас курсы по Java предлагают разные школы, а вы сможете выбрать сложность и длительность программы под себя. Плюс такого подхода в том, что вы будете учиться вместе с ментором. Он проверяет домашние задания и показывает, какие пробелы в знаниях вам ещё нужно закрыть. Стандартная продолжительность подобной программы около 4–5 месяцев.
Но на знании Java останавливаться не стоит. После того, как вы закрепили основы, написали своё первое приложение, а лучше и не одно, мы советуем изучить ещё один язык, который сегодня набирает всё большую популярность и получает признание от крупных игроков рынка.
Итог
После загрузки файла приложения APK потребуется заполнить множество форм и подготовить множество материалов: описание на разных языках (если необходимо), изображения на разных языках (надписи на изображениях я имею в виду), логотипы, иконки разных размеров, скриншоты со смартфона и планшета.
Наконец отправляем приложение в публикацию. Сотрудники Google Play будут проверять ваше приложение в течении 2 недель, судя по официальным данным. Данное приложение рассматривали в течении 5 суток. Также, стоит учесть, что каждое обновление, также, будут проверять, но на обновления уходит не более 2-3 суток.
Ссылка на GitHub, как обещано. Ссылка на приложение в Google Play.
Итог:
Существует точка зрения по которой Java и Kotlin не совсем соперники. Скорее они существуют параллельно, как бы дополняя друг друга. Но стоит признать, что переход на Kotlin даст проекту новый виток развития, повысит эффективность за счет удаления ненужных строк и уменьшения количества ошибок при отладке, разгрузит штат для обслуживания legacy-кода. Всё больше и больше новых проектов пишется на Kotlin.
Про совместимость уже говорили — компилятор Котлин использует JVM, здесь нет никаких проблем. Если есть необходимость в Java API , то можно использовать Kotlin native или Kotlin JavaScript. Котлин более понятен и легок в освоении практически всех аспектов разработки: классов данных, методов, написании обратных вызовов и т.д. Он специально разработан для улучшения существующих моделей Java с использованием решений для устранения недостатков проектирования API.
Мнение редакции:
Kotlin — это «улучшенная версия» Явы, фактически её апгрейд или даже в какой-то мере ребилд. С этой точки зрения переход на Kotlin полностью оправдан