Создаем первое Java приложение без IDE (HelloWorld)

Всем привет! Эта статья немного запоздала у меня на сайте, так как вышли уже более сложные статьи, например, по фреймворку Spring, но не написать ее я не могу, тем более, что на моем канале уже давно лежит видео-версия данного материала.

Сегодня мы не просто создадим первое Java-приложение. Мы сделаем его без использования какой либо среды разработки (IDE), в текстовом редакторе. Итак, нам понадобится:

  • текстовой редактор (я буду использовать Sublime Text 3);
  • стандартная консоль операционной системы (в Линукс-системах — терминал, а в windows — cmd);
  • заранее установленная jdk (у меня 1.8);
  • пять минут Вашего времени.

Я буду использовать в своем уроке Linux (Mint), но все, что я покажу, можно проделать и на Windows, главное чтобы у вас были настроены все переменные среды, в частности правильно была прописана переменная JAVA_HOME.

Кстати, небольшое отступление. Если Вы планируете в будущем развиваться в Java, то, как показал мой даже не большой опыт, лучше сразу пересаживаться на Linux и изучать его. Почему? Потому, что по мере углубления в профессию, Вы обязательно столкнетесь с тем, что в Вашей очередной компании будет несколько разных серверов, в том числе удаленных, на которых будут стоять брокеры очередей, базы данных, какие-то другие сервисы, коннекторы, либо Вам нужно будет что-то починить в приложении, разворачивать которое локально — это какие-то запредельные танцы с бубном и проще его отладить удаленно. Безусловно для Windows есть Bitvise, но все равно все это проще делать через ssh, autossh и тому подобное. То есть по факту Linux на много больше подходит для разработки чем Windows или Mac и сильно облегчает Вам жизнь.

Ну, а мы возвращаемся к нашему приложению. Итак, открываем консоль, создаем папку для нашего будущего проекта, например HelloWorld, внутри нее создаем папку src — это стандартная папка исходных кодов в любом Java-проекте и переходим в эту папку:

Далее мы запускаем наш текстовой редактор. В моем случае, я просто, перейдя в нужный каталог, запускаю указанный выше Sublime Text 3 командой subl и начинаю писать код нашего первого приложения.

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

У каждого ЛА есть свойства, определяющие, конфигурирующие его: вес, размер, скорость, название модели. Эти свойства представлены как обычными числовыми примитивами (например, размер, скорость — это int (целое число), вес — double (дробное число), а название модели — String (строка)), так и семейством других объектов, например — материал. То есть, у нас может быть отдельное дерево материалов, и какой-то из них может быть свойством ЛА. Другими словами, объекты в качестве свойств могут содержать другие объекты. Так же у объектов есть методы. Это как бы действия, глаголы. Например, метод «лететь». Методы могут принимать входные параметры:

лететь(int координатаА, int координатаБ)

Если метод ничего не возвращает, никакого результата своего выполнения, то перед его названием ставится ключевое слово void:

void fly(int a, int b)

Но метод может и возвращать что-либо, например, результат своего выполнения. В нашем случае — долетел, не долетел. Есть в Java булева переменная boolean, которая способна содержать только 2 значения ЛОЖЬ / ИСТИНА, то есть TRUE / FALSE. И тогда наш метод будет выглядеть так:

boolean fly(int a, int b) {
 // реализация метода
}

И вызов метода:

boolean result = fly(100, 200);

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

Итак, мы уже открыли текстовой редактор и в созданном новом документе вводим:

Несколько комментарий по коду:

class Main — это класс нашего приложения. Что такое класс? Класс — это как бы чертеж объекта, его описание. Про объекты — смотрите выше. Несколько правил: в Java принято, что на 1 файл 1 класс. То есть, написать вот так в одном файле:

public Main1 {
// some code
}
public Main2 {
// some code
}

… нельзя. Так же нельзя в коде создать класс:

public Main {
// some code
}

, а файл сохранить как XYZ.java. То есть имя файла должно совпадать с именем класса. Но при этом в Яве есть вложенные классы и вот у одного внешнего класса может быть несколько вложенных, однако об этом позже.

Что такое public…? Это модификатор доступа. Очень-очень коротко про это: модификатор доступа это область видимости класса, метода, переменной.

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

Идем, дальше. Что такое public static void main(String[] args) {} ? Разбираем:

  • public — как было замечено выше, модификатор доступа. Только для методов они еще могут быть, например, private (то есть доступны только внутри класса) или protected (то есть доступны внутри класса и его наследников).
  • static — модификатор static для переменной или метода работает следующим образом. Обычная переменная или метод создаются отдельно для каждого экземпляра класса. Напомню, ключевое слово class — это только чертеж, описание класса. Чтобы «чертеж» использовать, по нему надо сделать «деталь». В Яве это называется разными терминами, например, «инициализировать» или сделать инстанс класса, экземпляр класса. В коде это может выглядеть так (например, мы хотим из какого-то другого класса обратится к классу Main):

    Main main = new Main();

    main — это переменная типа Main. new — зарезервированное ключевое слово, принуждающее компилятор создать инстанс того или иного класса. То есть, опять же, если совсем на пальцах. Представим что у нас есть чертеж самолета, который называется ЧертежСамолета, мы говорим компилятору:

    ЧертежСамолета самолет = новый ЧертежСамолета();

    … то есть:

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

    Так, собственно, о чем мы? Мы же о static, а не о самолетах. Таким образом, если мы захотим создать второй самолет, это будет:

    ЧертежСамолет самолет2 = новый ЧертежСамолет ();

    Представим себе, что у самолета есть свойство вес — weight. И давайте уже вернемся на английский. И если мы вернемся к вышеуказанному коду, то:

    PlaneBluePrint plane1 = new PlaneBluePrint();
    PlaneBluePrint plane2 = new PlaneBluePrint();

    … и если мы обратимся к переменной, обычной не-static переменной, то:

    plane1.weight = 12;
    plane2.weight = 6;

    … это будут две разные переменные. plane1 и plane2 — два соверешнно разных инстанса (экземпляра) класса.

    И если бы у класса был static метод setWeight, который бы устанавливал статическую переменную weight, а так же была бы НЕ-STATIC переменная name, которая бы устанавливалась сеттером (методом) setName(String name), который так же печатал бы в консоль содержание name и weight, то вызвав сначала

    PlaneBluePrint.setWeight(10);

    а потом

    plane1.name = «A»;
    plane2.name = «B»;

    Мы получили бы в консоли:

    weight = 10
    name = A
    weight = 10
    name =
    B

    И обратите внимание, что метод setName мы вызываем для объектной переменной экземпляра класса plane1 (или plane2), а метод setWeight мы вызываем у самого класса. Таким образом, если коротко — статические переменные и статические методы принадлежат классу, а не его экземпляру и едины для всех его инстансов.
  • Идем дальше. Далее у нас идет void — про него мы уже говорили. Это ключевое слово, обозначающее, что метод ничего не возвращает, никакого результата.
  • main — очень важно запомнить, что метод main — это метод по которому java-компилятор определяет как бы «главный», «исполняемый» класс нашего приложения. Метод main — это точка входа в вашу программу.
  • String[] args — это массив параметров для нашего метода. Пока просто примите как данность, забивать Вам голову еще и этим я точно не буду, тем более что в 90% случаев вы ближайшие лет пять просто будете копировать данную запись и все.

Внутри скобок {…} идет реализация метода, его «тело». Мы используем там следуюущю запись:

System.out.println("");

Данная «команда» выводит в консоль с переводом строки то, что пользователь передал в скобках «…». В нашем случае это HelloWorld.

Пришло время скомилировать и запустить нашу программу, а то и так слишком много букв уже в этой статье.

Сохраняем наш только что написанный класс в ранее созданной папке src под именем, соответствующим названию класса. В нашем случае — Main.java.

Теперь переходим в консоль / терминал. Поднимаемся на один уровень выше каталога src. То есть если у вас каталог src лежит в папке HelloWorld, вы должны находится в папке HelloWorld.

И компилируем приложение следующей командой прямо из консоли:

После выполнения команды смотрим, что у нас появилось нового в структуре нашего проекта:

Java Helloworld

Как видно, у нас появился каталог bin и там файл Main.class. Это уже скомпилированный файл.

Снова нужно удостоверится, что мы в каталоге HelloWorld и ввести следующую команду:

И в консоли Вы увидите результат выполнения нашего первого приложения:

… то есть строчку Hello World!

Обратите внимание, что в Вашем конкретном случае, особенно, если у вас Windows-машина путь «-classpath ./bin» можеть быть другим или писаться по другому.

Вот собственно и все. Поздравляю с Вашим первым Java-приложением!

Ну и в конце более короткая видео-версия данной статьи:

Оставьте комментарий

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