Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Консольное приложение

Простейший аплет
Аплет с параметрами
Комбинированное приложение
Консольное с окном Frame
Аплет с окном Frame
Комбинированное с окном Frame
Библиотека классов
Аплет с обработкой событий
Консольное с обработкой событий

Назад Вперед

2.1. Простое консольное приложение

В примере показана структура простого консольного приложения Java. Это приложение вводит число с клавиатуры, а затем отображает его на консоли.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Главный класс консольного приложения должен называться точно так же, как и файл исходного текста этого класса.

В этом классе необходимо определить статический метод с именем main. Данный метод играет роль точки входа приложения, то есть ему будет передано управление сразу после запуска консольного приложения.

В качестве стандартного потока вывода консольное приложение использует поток java.lang.System.out, а в качестве стандартного потока ввода - java.lang.System.in. Есть и стандартный поток для вывода сообщений об ошибках - java.lang.System.err.

Описание примера

В нашем примере мы определили класс SimpleConsoleApp, разместив его исходный текст в файле с именем SimpleConsoleApp.java. Файл должен называться именно так, в противном случае компилятор выдаст сообщение об ошибке.

В классе SimpleConsoleApp есть поле szAppName класса String, конструктор и один метод с именем main:

public class SimpleConsoleApp
{
  String szAppName;

  public SimpleConsoleApp()
  {
    . . .
  }

  public static void main(String args[])
  {
    . . .
  }
}

Статический метод main не возвращает никакого значения и потому имеет тип void. В качестве единственного аргумента этому методу передается массив строк параметров запуска приложения.

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

В нашем приложении конструктор выполняет очень простую задачу - он инициализирует поле szAppName, записывая в него ссылку на строку названия приложения:

public SimpleConsoleApp()
{
  szAppName = new String(
    "Simple Console Application");
}

Рассмотрим теперь исходный текст метода main.

Внутри этого метода мы определили несколько переменных, которые будут использованы для ввода с консоли целого числа:

int i = 0;
byte bKbd[] = new byte[256];
String szStr = "";
StringTokenizer st;

Далее метод main создает объект sc класса SimpleConsoleApp:

SimpleConsoleApp sc = 
  new SimpleConsoleApp();

Это приводит к вызову конструктора, инициализирующего поле szAppName. Следующая строка выводит название приложения на консоль, обращаясь к указанному полю:

System.out.println(sc.szAppName);

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

System.out.print("Enter number: ");

Здесь мы воспользовались методом print, не вызывающем при выводе перевод строки. Поэтому текстовый курсор остановится сразу за строкой "Enter number: ".

Теперь о вводе строки с клавиатуры.

Мы применили метод read, вызвав его для стандартного потока ввода java.lang.System.in. Заметим, что во время работы этого метода, а также в процессе преобразования полученного массива символов в целое число возможно возникновение исключений. Поэтому мы заключили фрагмент кода, выполняющий эти функции, в блок try-catch:

int i = 0;
byte bKbd[] = new byte[256];
String szStr = "";
StringTokenizer st;

try
{
  int iCnt = System.in.read(bKbd);
  szStr = new String(bKbd, 0, iCnt);
      
  st = new StringTokenizer(szStr, "\r\n");
  szStr = 
    new String((String)st.nextElement());
      
  Integer intVal = new Integer(szStr);
  i = intVal.intValue();
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

Метод read считывает символы с клавиатуры и записывает их в массив байт с именем bKbd. Этот метод возвращает управление, когда пользователь закончил ввод и нажал клавишу <Enter>. При этом в переменную iCnt записывается количество прочитанных символов.

Далее мы должны преобразовать последовательность введенных символов в число (ожидается, что пользователь будет вводить цифры). Для этого мы выполняем промежуточное преобразование массива символов в текстовую строку класса String, удаляем из нее символы возврата каретки и перевода строки, а затем создаем на базе полученной строки объект класса Integer.

Создание строки выполняется так:

szStr = new String(bKbd, 0, iCnt);

Строка String содержит 16-разрядные символы Unicode. Чтобы преобразовать массив байт в строку Unicode, мы задаем значение старшего байта во втором параметре конструктора, равное нулю.

Удаление символов возврата каретки и перевода строки выполняется при помощи класса StringTokenizer, предназначенного для разбора текстовых строк. Создавая объект этого класса, мы передаем конструктору через второй параметр список символов-разделителей:

st = new StringTokenizer(szStr, "\r\n");
szStr = 
  new String((String)st.nextElement());

Метод nextElement возвращает первый элемент строки до разделителя, то есть в нашем случае всю строку до символов возврата каретки и перевода строки.

Далее строка преобразуется в объект класса Integer (целое число):

Integer intVal = new Integer(szStr);

В процессе этого преобразования возможно возникновение исключения java.lang.NumberFormatException (например, если пользователь ввел текстовую строку, которую невозможно преобразовать в численное значение). Блок catch выводит название исключения на консоль.

На следующем этапе мы преобразуем объект Integer к примитивному типу int, вызывая для этого метод intValue:

i = intVal.intValue();

Таким образом мы воспользовались классом Integer для преобразования текстовой строки в значение типа int. Результат этого преобразования затем отображается на консоли:

System.out.println("Number: " + i);

Назад Вперед

[Назад]