Как создать консольное приложение java

Обновлено: 07.07.2024

Разработка консольных java-приложений

В данной лабораторной работе разрабатывается консольное приложение для реализации простейшего приложения с использованием массивов, строк и файлов.

Указания к работе

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

Рассмотрим простой пример:

Здесь класс First используется только для того, чтобы определить метод main(), который и является точкой входа и с которого начинается выполнения программы интерпретатором Java. Метод main() содержит аргументы-параметры командной строки String[] args в виде массива строк и является открытым (public) членом класса. Это означает, что метод main() виден и доступен любому классу. Ключевое слово static объявляет методы и переменные класса, используемые для работы с классом в целом, а не только с объектом класса. Символы верхнего и нижнего регистров в Java различаются, чем Java напоминает языки C/C++ и PHP.

Вывод строки «Первая программа на Java!» в примере осуществляет метод println() (ln – переход к новой строке после вывода) свойства out класса System, который доступен в программе автоматически вместе с пакетом java.lang. Приведенную программу необходимо поместить в файл, имя которого совпадает с именем класса и с расширением java. Простейший способ компиляции написанной программы – вызов строчного компилятора:

При успешной компиляции создается файл First.class. Этот файл можно запустить на исполнение из командной строки с помощью интерпретатора Java следующим образом:

Для разработки программы возможно использование и специальных средств разработчика.

  • NetBeans IDE – свободная интегрированная среда разработки для всех платформ Java – Java ME, Java SE и Java EE. Пропагандируется Sun Microsystems, разработчиком Java, как базовое средство для разработки ПО на языке Java.
  • Eclipse IDE – свободная интегрированная среда разработки для Java SE, Java EE и Java ME. Пропагандируется IBM, одним из важнейших разработчиков корпоративного ПО, как базовое средство для разработки ПО на языке Java. – среда разработки для платформ Java SE, Java EE и Java ME. Разработчик – компания JetBrains. Распространяется в двух версиях: свободной бесплатной (Community Edition) и коммерческой проприетарной (Ultimate Edition).
  • JDeveloper – среда разработки для платформ Java SE, Java EE и Java ME. Разработчик — компания Oracle. – профессиональная интегрированная среда разработки (IDE) на языке Java, основанная на программной среде с открытыми исходными кодами Eclipse.
  • BlueJ – Среда разработки программного обеспечения на языке Java, созданная в основном для использования в обучении, но также подходящая для разработки небольших программ.
  • Ниже рассмотрены основные классы, используемые при выполнении лабораторной работы, рассмотрен пример решения одного из заданий.

    Класс java.io.File

    Для работы с файлами в приложениях Java могут быть использованы классы из пакета java.io, одним из которых является класс File.

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

    Основные методы класса File и способы их применения рассмотрены в следующем примере.

    У каталога (директории) как объекта класса File есть дополнительное свойство – просмотр списка имен файлов с помощью методов list(), listFiles(), listRoots().

    Класс System

    Класс System содержит набор полезных статических методов и полей системного уровня. Экземпляр этого класса не может быть создан или получен.

    При запуске этого кода на экран будет выведено только:

    И в файл "d:\file2.txt" будет записано:

    Класс String

    Класс String содержит основные методы для работы со строками:

  • concat(String s) или + – слияние строк;
  • equals(Object ob), equalsIgnoreCase(String s) – сравнение строк с учетом и без учета регистра;
  • compareTo(String s), compareToIgnoreCase (String s) – лексикографическое сравнение строк с учетом и без учета регистра;
  • contentEquals(StringBuffer ob) – сравнение строки и содержимого объекта типа StringBuffer;
  • charAt(int n)– извлечение из строки символа с указанным номером (нумерация с нуля);
  • substring(int n, int m)- извлечение из строки подстроки длины m-n, начиная с позиции n;
  • length() – определение длины строки;
  • valueOf(объект) – преобразование примитивного объекта к строке;
  • toUpperCase() / toLowerCase() – преобразование всех символов вызывающей строки в верхний/нижний регистр;
  • replace(char с1, char с2) – замена в строке всех вхождений первого символа вторым символом;
  • getBytes(параметры), getChars(параметры) – извлечение символов строки в виде массива байт или символов.
  • В следующем примере массив символов и целое число преобразуются в объекты типа String с использованием методов этого класса.

    Пример консольного java-приложения

    Задание: Ввести n строк с консоли. Вывести на консоль строки и их длины, упорядоченные по возрастанию.

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

    1) Запустим Netbeans и нажмём Создать проект в меню Файл или на панели инструментов.

    2) Появиться окошко с выбором типа проекта. Чтобы создать простое консольное приложение необходимо выбрать категорию Java и тип Приложение Java. Жмём Далее.

    3) В следующем окне нам предложат выбрать имя проекта, его расположение и некоторые другие параметры. Имя проекта может не являться названием нашей новой программы, поэтому назвать его можно как угодно, но желательно чтобы название было как-то связано с названием программы, иначе мы просто запутаемся, когда у нас будет большое количество проектов. Давайте в имени проекта укажем Zmey_Console_Hello_Example. Название, конечно, длинное, но зато оно несёт исчерпывающую информацию о себе. В поле Расположение проекта необходимо указать, где будет храниться директория проекта. Советую создать основной рабочий каталог для проектов на одном из локальных дисков и назвать его, например work. Теперь мы можем в этом поле указать D:\work. Остальные параметры оставьте по умолчанию, о них мы поговорим позже. Жмём Завершить.

    4) После выполнения всех операций по созданию проекта откроется редактор основного класса приложения под названием Main. А слева будет окно с текущими проектами.

    Содержание этого класса должно получиться примерно таким:

    Это класс Java. Класс описывает объект, который может быть создан с его помощью. Представьте, что Вам необходимо создать несколько материальных объектов. Для этого необходимо создать мысленно определённый класс, который будет описывать все параметры и свойства материальных объектов этого типа. Например, чтобы создать несколько объектов: компьютер 1, компьютер 2, компьютер 3 по классу "особенный компьютер", необходимо описать класс "особенный компьютер", в котором будут параметры размеров, свойства качества и т.д. Часть из них могут быть неизменными, изменяемым в каких-либо пределах и др. Важно что все объекты этого типа будут обладать всеми этими параметрами и свойствами, а значения могут быть различными.

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

    Затем идёт строка начинающаяся с ключевого слова package. Это название пакета, где размещается данный класс. Прямое редактирование этой строки приведёт к ошибке.

    Следующий блок с комментариями привязан к описанию класса Main и содержит в себе аннотацию автора класса @author. Эта часть также была сгенерирована NetBeans'ом. Все привязанные таким способом блоки комментариев очень полезны, так как они будут включены в документацию нашего приложения.

    Первое ключевое слово public означает что класс является открытым и может быть доступен из любого класса. Существуют также ключевые слова private и protected, которые соответственно означают, что доступ к этому элементу закрыт извне или разрешён только из данного пакета. Необязательно указывать эти ключевые слова, так как NetBeans подставит одно из них по умолчанию. Но я очень советую указывать это явно. Ключевое слово class означает что описываемый элемент является классом. Затем идёт собственно название элемента - Main. Обратите внимание, что название классов должно начинаться с большой буквы и не должно редактироваться напрямую, так как это приведёт к ошибке. В Java существует правило, что название файла класса должно соответствовать названию класса находящегося в нём. Границы элемента определяются символами и > .

    Далее снова идёт блок комментариев привязанный к методу main. Этот блок содержит аннотацию @param, которая описывает принимаемый параметр методом main.

    Далее идёт описание метода main. Метод класса это фактически его функция. Метод main является особенным, потому что это точка входа и класс обладающий таким методом становиться выполняемым.

    Ключевое слово public нам уже известно, а static означает, что данный элемент статический, то есть нет необходимости создавать объект этого типа чтобы получить доступ к этому элементу. Достаточно просто описать, что мы хотим его вызвать. Это станет понятней в дальнейшем. Если не указывать это ключевое слово, то элемент будет обычным. Следующим и последним перед названием метода идёт ключевое слово void. Это тип возвращаемого объекта после выполнения метода и он всегда должен быть перед названием метода за исключением конструктора (особый метод о котором я Вам расскажу позднее). Каждый метод может получать несколько параметров, но возвращает всегда только одно значение либо ничего. Возвращаемый тип void означает, что метод ничего не возвращает. После этого идёт название метод main. Название метода должно начинаться с маленькой буквы за исключением конструктора. Не забывайте, что с точки зрения компьютера одна и та же большая или маленькая буква это две разные буквы. После названия метода идут символы ( и ), между которыми через запятую описываются принимаемые параметры (каждый параметр: тип и имя переменной), если они есть.

    В описании метода main мы видим закоментированную строку с тэгом TODO. Этот тег регистрирует данный комментарий в списке задач и означает напоминание, что ещё необходимо сделать.

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


    Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
    Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
    В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.

    От простого к .

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

    Один файл

    Можно сделать и без лишних папок.
    Берем сам файл HelloWorld.java.
    Переходим в каталог, где лежит данный файл, и выполняем команды.
    В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить

    Отделяем бинарные файлы от исходников

    Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
    Компилируем
    Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.

    Используем пакеты

    А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.

    Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
    В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
    Компилируем
    В каталоге bin автоматически создастся структура каталогов как и в src.

    Если в программе несколько файлов

    HelloWorld.java
    Adder.java

    Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
    Компилируем

    Если удивляет результат

    Есть возможность запустить отладчик. Для этого существует jdb.
    Сначала компилируем с ключом -g, чтобы у отладчика была информация.

    Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
    Указываем точку прерывания на 9 строке в классе Calculator

    Запускаем на выполнение.

    Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.

    Узнаем, что из себя представляет переменная а.

    Выполним код в текущей строке и увидим, что sum стала равняться 2.

    Поднимемся из класса Adder в вызвавший его класс Calculator.

    Удаляем точку прерывания

    Можно избежать захода в методы, используя команду next.

    Проверяем значение выражения и завершаем выполнение.

    Хорошо бы протестировать

    Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ';', в Linux — ':'. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ';', но он воспринимается как разделитель команд.

    Создадим библиотеку

    Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.

    Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку

    Делаем архив jar

    С помощью ключа -C мы запустили программу в каталоге bin.

    Надо узнать, что у библиотеки внутри

    Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
    Информацию о любом классе можно получить с помощью дизассемблера javap.

    Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
    Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).

    Лучше снабдить библиотеку документацией

    Изменим для этого класс калькулятора.

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

    image

    В результате получиться следующее

    Можно подписать jar-архив

    Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
    Генерируем подпись.

    Генерируем Certificate Signing Request (CSR)

    Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище

    Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так

    Использование библиотеки

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

    Собираем программу

    Это можно сделать по-разному.

    Первый способ

    Здесь есть тонкости.
    В строке

    не должно быть пробелов в конце.
    Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
    Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
    Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».

    При использовании команды echo надо следить только за пробелом в конце строки с main-class.

    Второй способ

    В данном способе избегаем ошибки с пробелом в main-class.

    Третий способ

    Включили код нужной библиотеки в исполняемый файл.

    Запуск исполняемого jar-файла

    Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
    Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.

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

    Как быть с приложениями JavaEE

    Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее

    Структура архива JavaEE-приложения должна соответствовать определенному формату. Например

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

    Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».


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

    Исходный код программы

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

    Строка 2 определяет метод main. Программа начинает выполнение с метода main. Метод main – это точка входа, где программа начинает выполнение.

    Метод – это конструкция, которая содержит инструкции. Метод main в этой программе содержит инструкцию System.out.println. Инструкция отображает в консоли строку «Welcome to Java!». Строка (String) – это термин в программировании, означающий последовательность символов. Строка должна быть заключена в двойные кавычки. Каждая инструкция в Java заканчивается точкой с запятой ( ; ), которая служит разделителем инструкций.

    Зарезервированные слова, или как их ещё называют ключевые слова, имеют определённое значение для компилятора, и они не могут использоваться для других целей в программе. Например, когда компилятор видит слово class, он понимает, что слово после class – это имя класса. Другими зарезервированными словами в этой программе являются public, static и void.

    Строка 3 – это комментарий, которая документирует действия программы и её устройство. Комментарии помогают программистам общаться и понимать программу. Они не являются программными инструкциями и, таким образом, игнорируются компилятором. В Java комментариям предшествуют два слеша на строке (//), которая так и называется – строка комментария. Комментарии могут располагаться между /* и */ на одной или нескольких строках, эти строки называются блоком комментариев или параграфом комментариев. Когда компилятор видит //, то он на этой строке игнорирует весь текст после //. Когда видит /*, он сканирует следующий */ и игнорирует любой текст между /* и */.

    Несколько примеров комментариев:

    Пара фигурных скобок в программе формирует блок, который группирует компоненты программы. В Java каждый блок начинается с открывающей фигурной скобки ( <)и заканчивается закрывающей фигурной скобкой. (>). Каждый класс имеет блок класса, который группирует данные и методы класса. Похожим образом каждый метод имеет блок метода, который группирует инструкции в методе. Блоки могут быть вложенными, это означает, что один блок может быть помещён внутри другого, как показано на следующем коде:


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

    Внимание: исходный код программ Java чувствителен к регистру. Будет неправильным, например, заменить в программе main на Main.

    Вы познакомились с несколькими специальными символами в программе (например, , //, ;). Они используются практически в каждой программе. Таблица обобщает их использование:

    Символ Имя Описание
    <> Открывающая и закрывающая фигурная скобка Обозначает блок для окружения инструкций.
    () Открывающая и закрывающая круглая скобка Используется с методами.
    [] Открывающая и закрывающая квадратная скобка Обозначает массив.
    // Двойной слэш Предшествует комментарию.
    " " Открывающая и закрывающая кавычки Окружает строку (т.е. последовательность символов).
    ; Точка с запятой Обозначает конец инструкции.

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



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


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

    Читайте также: