Java с нуля: первая программа (ч. 1)

Этой статьей мы начинаем цикл публикаций для абсолютных новичков в Java. В последующих материалах будут рассмотрены, ко всему прочему, такие темы, как работа с Git, GitHub, командной строкой и многое другое — мы разберем весь набор инструментов и тем, необходимый начинающему Java-джентльмену.
Введение
Чтобы написать свою первую программу, требуется не так много усилий. При этом даже можно не устанавливать никакие приложения: ни среду разработки, ни текстовый редактор, ни даже Java — ничего!
Чтобы познакомиться с языком, достаточно открыть любой онлайн-редактор кода, поддерживающий Java. Пишем в гугле java compiler online и выбираем понравившийся. Я остановлюсь на этом: он простой, выглядит хорошо и обладает всеми необходимыми на данном этапе возможностями.
В последующих статьях мы будем использовать для написания кода текстовый редактор Sublime Text, а затем окончательно перейдем на профессиональную среду разработки Intellij IDEA.
1. Первая программа
Откройте онлайн-редактор и удалите все, что там написано. Затем наберите в нем в точности, включая все пробелы и отступы, следующие строки кода:
public class MyFirstApp {	
    public static void main(String[] args) {
        System.out.println("Write once, run anywhere");
    }
}
Переименуйте имя файла в MyFirstApp.java.
Для запуска программы нажмите Run.
Если все сделано верно, то в консоли отобразится текст: Write once, run anywhere. Переводится, как "Написано однажды, работает везде" — это девиз Java.

Если в коде есть какие-то проблемы, то выведется ошибка. Для ее устранения нужно еще раз внимательно сверить свой код с предложенным выше.
А теперь попробуем разобраться с самой программой.
Чтобы во всех подробностях объяснить каждую строчку даже этой маленькой программки, нам пришлось бы предварительно изучить множество тем, о которых мы еще ничего не знаем. Поэтому рассмотрим код на том уровне, которого будет сейчас достаточно для общего понимания его работы.
2. Объявление класса
Удалим лишний код программы, чтобы он не отвлекал. Будем добавлять его по мере необходимости.
public class MyFirstApp {	

}
В первой строке мы сообщаем, что здесь начинается программа или, если говорить в терминах Java, объявляется класс.
Чтобы было проще понять, что такое класс, его можно воспринимать как способ организации или оформления кода в файле. К нему также подойдет аналогия с контейнером для кода. Все программы в Java записываются внутри подобных классов. Выглядит это немного замысловато, но вы привыкнете.
В строке 1 и 3 используются фигурные скобки, открывающаяся { и закрывающаяся }, идущие всегда парой. Они являются ограничителями, показывающими, где начинается и заканчивается класс. Все, что находится внутри этих скобок, называется телом класса.
В некоторых языках программирования { ставится на новой строке, а не на той, где объявляется класс или другие конструкции языка.
Например:
public class MyFirstApp
{	
    public static void main(String[] args)
    {
        System.out.println("Write once, run anywhere");
    }
}
Никогда так не пишите, даже если увидите такой стиль в суперпопулярных книжках от именитых программистов. Дело в том, что все эти люди когда-то давно писали на языке С и С++ и переняли из них привычку ставить скобки в их стиле. Так исторически сложилось, а переучиваться они не видят смысла. Но вам нужно писать правильно, как принято в современном Java-мире!
2.1. Разбор кода
Рассмотрим строку с объявлением класса чуть подробнее. Она состоит из ряда слов, идущих последовательно в определенном порядке.
public — модификатор доступа, делающий данный класс публичным, общедоступным — мы его ни от кого не прячем.
Да, в Java одни классы можно прятать от других классов, библиотек и т. д. Зачем это делать, сейчас сложно объяснить, т. к. еще не хватает знаний. Но в качестве примера можно привести ситуацию, когда Гарри Поттер надел на себя мантию-невидимку и не хотел, чтобы Северус Снегг видел его, а значит, заговорил с ним, попросил что-то, отправил куда-то и т. д. Также и мы можем не хотеть, чтобы один класс мог видеть и использовать другой класс.
class — ключевое слово, сообщающее о том, что данная конструкция описывает класс, а не что-то другое.
Имя класса (с большой буквы) — позволяет отличать один класс от другого. Программа может состоять из сотен и тысяч классов, а хорошо продуманные имена позволяют в них хоть как-то ориентироваться.
Наверное, вы обратили внимание на способ написания имени класса MyFirstApp, когда все слова начинаются с большой буквы. Это делает их похожими на верблюжьи горбы. Поэтому данный способ называется CamelCase. Существуют и другие, но в Java используется именно этот.
public и class являются зарезервированными (ключевыми) словами Java. Таких слов много. Со временем вы будете знать их все.
Также стоит помнить, что имя файла должно в точности повторять, включая первую большую букву, имя класса, описанного в нем. В нашем случае и класс и файл имеют имя MyFirstApp. Это очень удобно, потому что не нужно открывать файл, чтобы узнать, какой класс в нем описан. Достаточно посмотреть на имя файла.
Программа будет работать даже, если имя файла написать с маленькой буквы. Но все разработчики Java следуют соглашению, что имя файла должно начинаться с большой буквы. Привыкайте к таким правилам и тоже следуйте им.
Имя файла еще имеет и расширение .java, которое необходимо указывать для всех java-файлов, чтобы отличать один тип файла от другого.
2.2. Тезисы
Подведем промежуточный итог, выделив ряд правил, которые мы прошли (их нужно запомнить):
  • для объявления класса необходимо использовать запись вида public class ИмяКласса
  • для обозначения начала и конца объявления класса используются фигурные скобки { }, которые всегда идут парой
  • имя класса принято начинать с большой буквы
  • при именовании класса необходимо использовать CamelCase
  • имя файла и класса должны совпадать
  • файл с Java-кодом должен иметь расширение .java
3. Метод main
Границы программы заданы, класс объявлен. Далее реализуем в нем какую-то функциональность. Для этого нужно объявить (создать) метод.
public class MyFirstApp {	
    public static void main(String[] args) {

    }
}
В других языках эта конструкция может называться процедурой или функцией. В Java — называется методом. Это блок кода, который выполняет какую-то полезную работу. Это функциональная возможность класса, т. е. то, что он умеет делать.
Метод, как и класс, записывается по определенным правилам и тоже содержит ряд ключевых слов и фигурные скобки, обозначающие его границы.
Метод main — непростой метод: он отвечает за запуск программы, и его внешний вид строго декларирован (утвержден).
3.1. Разбор кода
Разберем, из чего состоит объявление метода main.
public — так же, как и для класса сообщает о том, что метод является публичным, общедоступным (да, методы тоже можно прятать или оставлять открытыми). В данном случае мы его не скрываем от JVM (Java Virtual Machine — виртуальная машина Java, в которой запускаются и работают Java-программы), чтобы она могла выполнить его независимо от того, где находится класс с этим методом или сама JVM.
static — сейчас понять назначение этого слова будет тяжело, т. к. чтобы про него рассказать, требуется разобрать дополнительные темы, которые мы еще не проходили. На данном этапе достаточно знать, что модификатор static позволяет JVM запускать метод main без дополнительных действий с ее стороны.
В качестве аналогии можно привести кота, у которого есть кормушка с кнопкой. Чтобы начать использовать кормушку, коту не нужно ее строить. Он жмет кнопку и получает корм. В нашем случае виртуальная машина просто запускает метод main, не создавая экземпляр класса, в котором он находится (примите эту информацию как есть. В последующих статьях мы подробнее раскроем эту тему).
void — указывает на тип возвращаемого значения. Каждый метод внутри себя выполняет какую-то деятельность. Результатом этой работы может быть какое-то значение. Например, результатом работы метода, который складывает два числа 2 + 2 является новое число 4. Это значение он может передать дальше в программу, либо оно навсегда останется в нем.
Снова обратимся к коту за аналогией. Он подходит к электронной кормушке, нажимает кнопку и получает порцию корма. В данном случае результатом работы кормушки является корм, который он передает коту. А тот его уже дальше использует по своему назначению.
Во второй ситуации кот подходит к холодильнику. Результатом его работы является сохраненный холодом от порчи корм. Кот на этот раз ничего не получает. Корм остается в холодильнике.
В нашем случае слово void означает, что метод не возвращает никакого значения, т. е. результатом его работы не является что-то, что мы могли бы использовать за пределами метода main. В этом случае мы похожи на кота, которому холодильник ничего не дал.
main — имя метода. Позволяет отличать один метод от другого, т. к. класс может содержать огромное их количество. В нашем случае метод называется main, т. е. «главный», «основной». Имена методов в Java принято записывать с маленькой буквы.
Имена методов могут состоять из нескольких слов, например, findCat, deleteAllNumbers, receiveKeyIfResumeExist и т. д. В этом случае тоже используют camelCase, но первое слово в имени начинается с маленькой буквы.
() — открывающаяся и закрывающаяся круглая скобка. Они выполняют две функции: сообщают, что перед нами метод; а также могут внутри себя содержать описание принимаемых аргументов.
String[] args — принимаемые методом аргументы. В данном случае метод main принимает в качестве аргумента массив строк, который называется args. Чтобы представить, что такое массив, подумайте о коробке конфет или о лотке для яиц. Это все массивы, где хранятся элементы одного типа: либо только конфеты, либо только яйца. С массивами мы детально разберемся в другой статье.
Тут можно привести пример со стиральной машиной, которую перед запуском можно настроить на нужный режим стирки. Нажимая все ее кнопки, вы передаете в нее аргументы с определенными значениями: время стирки, нужен ли отжим, тип материала и т. д.
{ } — открывающаяся и закрывающаяся фигурная скобка. Задают границы метода. Все, что находится внутри них, называется телом метода.
Как я написал выше, main — это не простой метод. Это — самый главный метод. Его еще называют точкой входа в программу. При запуске программы, в первую очередь, запускается именно он. Внешний вид метода строго декларирован и прописан в спецификации языка. В противном случае JVM не сможет найти его, и программа не запустится
Спецификация языка — это технический pdf-документ с описанием синтаксиса и семантики языка.
На данном этапе вам нужно просто запомнить, как выглядит метод main. Представьте, что это магическое заклинание, которое звучит как public static void main(String[] args) — повторяйте его, чтобы запомнить.
3.2. Тезисы
Снова подведем промежуточный итог, выделив ряд правил, которые мы прошли:
  • для объявления метода main необходимо использовать запись вида public static void main(String[] args)
  • для обозначения начала и конца метода используются фигурные скобки { }, которые всегда идут парой
  • имя метода принято начинать с маленькой буквы
  • при именовании метода, если он состоит из более чем одного слова, тоже используют camelCase, но первое слово в имени начинается с маленькой буквы
4. Вывод текста на консоль
Нам осталось разобраться с последней строкой кода, которая позволяет вывести на экран текст Write once, run anywhere.
public class MyFirstApp {	
    public static void main(String[] args) {
        System.out.println("Write once, run anywhere");
    }
}
Это еще одно заклинание на языке Java, которое условно можно разбить на следующие части:
  • System.out.println — отвечает за вывод текста. Просто запомните, как это пишется
  • ( ) — парные круглые скобки
  • "Write once, run anywhere" — текст, обрамленный с двух сторон кавычками, который будет отображен при запуске программы
  • точка с запятой — сообщает о том, что строка с кодом закончилась
5. Эксперименты
1) Ранее было написано, что имя класса и имя файла должны совпадать. Давайте попробуем нарушить это правило и посмотрим на последствия.
Изменим имя файла MyFirstApp.java на MyApp.java, и запустим программу. Отобразится ошибка:
Она означает, что в строке 1 файла MyApp.java объявляется публичный класс с именем MyFirstApp, а значит и находиться он должен в файле с таким же именем.
2) Теперь нарушим еще одно правило, написав имя класса и файла с маленькой буквы, назвав их myFirstApp. Запустив программу, видим, что отобразилось сообщение Write once, run anywhere.
Можно сделать вывод, что писать имя файла и класса с большой буквы является лишь договоренностью всех программистов друг с другом. Это сделано для того, чтобы в коде не путать имена переменных (начинаются с маленькой буквы. О них мы поговорим в другой статье) с именами классов.
3) Попробуем изменить имя метода main, например, на Main. Запустив программу, увидим следующую ошибку:
JVM не смогла запустить программу т. к. не нашла метод main (с маленькой буквы). О чем и свидетельствует ошибка Error: main method not found.
4) Вернем методу его первоначальное имя, но удалим слова public static и снова запустим. Возникнет та же самая ошибка, что и в предыдущем пункте, связанная с тем, что при запуске программы не был найден метод main, записанный по всем правилам.
Самостоятельно попробуйте удалять разные части программы и смотреть, какие при этом будут возникать ошибки.
6. Для любознательных
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!