Первое приложение на Java
Теперь когда подготовлено рабочее место и установлено всё необходимое программное обеспечение мы можем приступить к созданию нашего первого приложения на языке Java. Это будет консольное приложение, так как оно является самым простым. Это означает что работать оно будет в командной строке.
Чтобы создать его выполним следующие действия:
1) Запустим Netbeans и нажмём Создать проект в меню Файл или на панели инструментов.
2) Появиться окошко с выбором типа проекта. Чтобы создать простое консольное приложение необходимо выбрать категорию Java и тип Приложение Java. Жмём Далее.
3) В следующем окне нам предложат выбрать имя проекта, его расположение и некоторые другие параметры. Имя проекта может не являться названием нашей новой программы, поэтому назвать его можно как угодно, но желательно чтобы название было как-то связано с названием программы, иначе мы просто запутаемся, когда у нас будет большое количество проектов. Давайте в имени проекта укажем Zmey_Console_Hello_Example. Название, конечно, длинное, но зато оно несёт исчерпывающую информацию о себе. В поле Расположение проекта необходимо указать, где будет храниться директория проекта. Советую создать основной рабочий каталог для проектов на одном из локальных дисков и назвать его, например work. Теперь мы можем в этом поле указать D:\work. Остальные параметры оставьте по умолчанию, о них мы поговорим позже. Жмём Завершить.
4) После выполнения всех операций по созданию проекта откроется редактор основного класса приложения под названием Main. А слева будет окно с текущими проектами.
Содержание этого класса должно получиться примерно таким:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */
package zmey_console_hello_example;
/** * * @author Zmey * @author http://shendenkov.at.ua */public class Main {
/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here }
}
Давайте вначале разберёмся что это всё означает.
Это класс Java. Класс описывает объект, который может быть создан с его помощью. Представьте, что Вам необходимо создать несколько материальных объектов. Для этого необходимо создать мысленно определённый класс, который будет описывать все параметры и свойства материальных объектов этого типа. Например, чтобы создать несколько объектов: компьютер 1, компьютер 2, компьютер 3 по классу "особенный компьютер", необходимо описать класс "особенный компьютер", в котором будут параметры размеров, свойства качества и т.д. Часть из них могут быть неизменными, изменяемым в каких-либо пределах и др. Важно что все объекты этого типа будут обладать всеми этими параметрами и свойствами, а значения могут быть различными.
А теперь подробнее по коду:
Верхняя часть закоментирована, то есть не будет преобразована в машинный код. Это служебная информация сгенерированная NetBeans'ом - шаблон который будет автоматически добавляться к каждому новому созданному классу.
Затем идёт строка начинающаяся с ключевого слова package. Это название пакета, где размещается данный класс. Прямое редактирование этой строки приведёт к ошибке.
Следующий блок с комментариями привязан к описанию класса Main и содержит в себе аннотацию автора класса @author. Эта часть также была сгенерирована NetBeans'ом. Все привязанные таким способом блоки комментариев очень полезны, так как они будут включены в документацию нашего приложения.
Далее идёт описание самого класса Main.
Первое ключевое слово public означает что класс является открытым и может быть доступен из любого класса. Существуют также ключевые слова private и protected, которые соответственно означают, что доступ к этому элементу закрыт извне или разрешён только из данного пакета. Необязательно указывать эти ключевые слова, так как NetBeans подставит одно из них по умолчанию. Но я очень советую указывать это явно. Ключевое слово class означает что описываемый элемент является классом. Затем идёт собственно название элемента - Main. Обратите внимание, что название классов должно начинаться с большой буквы и не должно редактироваться напрямую, так как это приведёт к ошибке. В Java существует правило, что название файла класса должно соответствовать названию класса находящегося в нём. Границы элемента определяются символами { и } .
Далее снова идёт блок комментариев привязанный к методу main. Этот блок содержит аннотацию @param, которая описывает принимаемый параметр методом main.
Далее идёт описание метода main. Метод класса это фактически его функция. Метод main является особенным, потому что это точка входа и класс обладающий таким методом становиться выполняемым.
Ключевое слово public нам уже известно, а static означает, что данный элемент статический, то есть нет необходимости создавать объект этого типа чтобы получить доступ к этому элементу. Достаточно просто описать, что мы хотим его вызвать. Это станет понятней в дальнейшем. Если не указывать это ключевое слово, то элемент будет обычным. Следующим и последним перед названием метода идёт ключевое слово void. Это тип возвращаемого объекта после выполнения метода и он всегда должен быть перед названием метода за исключением конструктора (особый метод о котором я Вам расскажу позднее). Каждый метод может получать несколько параметров, но возвращает всегда только одно значение либо ничего. Возвращаемый тип void означает, что метод ничего не возвращает. После этого идёт название метод main. Название метода должно начинаться с маленькой буквы за исключением конструктора. Не забывайте, что с точки зрения компьютера одна и та же большая или маленькая буква это две разные буквы. После названия метода идут символы ( и ), между которыми через запятую описываются принимаемые параметры (каждый параметр: тип и имя переменной), если они есть.
В описании метода main мы видим закоментированную строку с тэгом TODO. Этот тег регистрирует данный комментарий в списке задач и означает напоминание, что ещё необходимо сделать.
Фактически мы не написали ни одной строчки кода и если мы запустим программу нажатием Выполнить в одноимённом меню или на панели инструментов, то она тут же завершится. Поэтому давайте напишем класс так чтобы он выглядел следующим образом:
package zmey_console_hello_example;
/** * Основной класс нашего консольного приложения * * @author Zmey * @author http://shendenkov.at.ua */public class Main {
/** * Сообщение по умолчанию */ private final String savedMessage = "Hello World";
/** * Конструктор основного класса нашего приложения * * @param message Сообщение выводимое в консоль */ public Main(String message) { // Если переменная message не инициализирована ИЛИ пустая if (message == null || message.isEmpty()) { // то копируем строку из переменной savedMessage //в переменную message message = savedMessage; } // Выводим на экран строку System.out.println("Message: " + message); }
/** * Точка входа в нашу программу * * @param args аргументы командной строки через пробел */ public static void main(String[] args) { // Объявляем переменную типа Main Main mainObject; // Если длина массива с параметрами больше нуля if (args.length > 0) { // то инициализируем переменную mainObject новым объектом //типа Main передавая конструктору класса Main первый //параметр из командной строки mainObject = new Main(args[0]); } else { // иначе инициализируем переменную mainObject новым объектом //типа Main передавая конструктору класса Main значение null mainObject = new Main(null); } }
}
Теперь давайте разберёмся, что мы добавили. Первое что бросается в глаза это многочисленные комментарии, объясняющие логику работы программы.
Появилось поле savedMessage с ключевыми словами private и final, определяющее эту переменную константой, то есть попытка её изменения приведёт к ошибке. Переменная с ключевым словом final должна быть немедленно инициализирована, что и происходит в нашем примере. Так как она объявлена в рамках этого класса то её зона видимости будет ограничена этим классом.
Появился конструктор класса Main, который отличается от других методов тем что его название совпадает с названием класса, начинается с большой буквы и не имеет возвращаемого типа. В остальном он подчиняется тем же правилам, что и обычные методы. Если не задавать конструктор явным образом NetBeans сформирует его сам. Конструктор по умолчанию: public Main(){} . Конструкторов класса может быть более одного.
Запустим программу в NetBeans и окне консоли увидим нашу сохранённую строку. А теперь нажмите Очистить и построить в меню Выполнить или на панели инструментов. В Java нет исполнительного файла с расширением exe. Вместо этого используется исполняемый JAR-архив. Он представляет из себя обычный архив, который включает в себя двоичные файлы с кодами программы на машинном языке манифест объясняющий JVM какой двоичный файл использовать первым.
После того как мы построили наше приложение, его jar-архив будет находиться в директории dist нашего проекта. Поэтому запускаем командную строку и переходим в директорию D:\work\Zmey_Console_Hello_Example\dist . Теперь выполните команду: java -jar Zmey_Console_Hello_Example.jar TestMessage
В результате выполнения этой программы мы увидим строку Message: TestMessage
Теперь давайте резюмируем чему мы научились:
1) Создание проекта нужного типа.
2) Разобрали из чего состоит класс и зачем нужны основные ключевые слова.
3) Составление некоторой логики в действиях программы.
4) Запуск программы в NetBeans и в командной строке.