Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.17 Mб
Скачать

Int X; // Целочисленная переменная X

System.out.println("Введи целое число>");

st= bR.readLine( );

x= Integer.parseInt (st);

x+= 10;

st= Integer.toString (x);

System.out.println("st= " + st);

}

catch (Exception e)

{

System.out.println ("исключение ");

}

}

}

Результат:

Введи строку символов>

qwert

st= qwert

Введи целое число>

123

Рис. 4.2. Консольный ввод и вывод

Java и C#. В отличие от языка С++ (и C++/CLI) создатели языков Java и C# отразили и в языковых конструкциях объектно-ориентированный подход - чрезвычайно активно используются как классы, так и объекты классов. Описание функций вне классов запрещено. Все функции, используемые в Java и C# программах, должны принадлежать каким-либо классам - даже такая особая функция, как Main() или main(). Из примера 4.2.1 видно, что C#-компилятор создал для консольного приложения специальный класс Program и включил в этот класс главную функцию Main() программы, объявив её как статическую. Аналогично компилятор языка Java поместил в класс статическую открытую функцию main(). Так что программа на Java и C# представляет собой совокупность описаний классов. Выполнение программы начинается с выполнения главной функции main() или Main(), которая создаст из классов нужные объекты и заставит их функционировать надлежащим образом. При этом, разумеется, активно будут употребляться классы, используемые для ввода-вывода.

Сразу скажем, что в Java и C# функция консольного ввода обычно используется редко, поскольку значительно удобнее вводить информацию посредством интерфейсных элементов, таких как, например, текстовый редактор, о котором будет рассказано позднее. Поэтому пусть не огорчает неудобное использование функции read() ввода символа и функции readLine() ввода строки символов на языке Java. Что касается функции print() или Write() вывода строки символов и функции println() или WriteLine() вывода строки с переводом строки на консоль, то они применяются часто, особенно в отладочных выводах. Кстати, их применение, как видно из примера 4.2.1, просто. Поскольку на консоль выводится строка, то обычно в C# и C++/CLI для преобразования аргументов иного типа в строку применяют функцию ToString().

В Java программе для обеспечения большей надёжности при применении функций ввода-вывода компилятор требует обязательного использования специальных try-catch конструкций для обработки возможных ошибочных ситуаций (исключений) при вводе данных. Обработка исключений будет рассмотрена подробнее позднее, а сейчас отметим, что часть программы, связанная с вводом и выводом, помещена в так называемый try блок, после которого размещён catch блок, который должен предпринять какие-либо меры для спасения программы от вынужденного аварийного завершения. В нашем случае catch блок, воспользовавшись функцией println(), перед аварийным завершении программы выдаст на консоль строку "исключение".

На языке Java функция read() применяется громоздко - вначале по ссылке bR создаётся с помощью оператора new объект класса BufferedReader в управляемой куче, который, заметим, сам использует объект класса InputStreamReader, размещённый также в управляемой куче. Потом, воспользовавшись ссылкой bR, вызывается функция readLine() класса BufferedReader, возвращаемая которой строка, вводимая с консоли, присваивается строке st. Потом строка st выводится функцией println() класса out на консоль. Затем в виде строки с консоли вводится число как последовательность символов-цифр, которую потом функция parseInt() класса Integer преобразует в целое число. К этому числу прибавляется целое число 10. Прежде чем вывести полученную сумму на консоль, результативное число преобразуется функцией toString() класса Integer в строку.

Реакцию нашей программы на некорректный ввод числа выявить легко. Вместо числа введите любую строку, например ffffff, и на консоль будет выдано слово "исключение". Так наша программа среагировала на ошибку перед аварийным завершением её выполнения. Вместо слова "исключение" в catch блоке можно было бы сообщить об ошибочном вводе числа и попросить о повторном вводе, осуществив его с помощью функции readLine() повторно.

Хотя компиляторы языков C# и C++/CLI не настаивают на применении try-catch конструкций, всё же применение их желательно. Обработке исключений в языках Java и C# уделяется особое внимание, поскольку Java и C# технологии ориентированы на разработку надёжных и безопасных программ.

Применение try-catch конструкции при консольном вводе на языке C# иллюстрирует также пример 7.5,2.

B C++/CLI и C# программах примера 4.2.1 для простоты try-catch блоки не применены. В дальнейшем обработке исключений мы уделим дополнительное внимание.

C# и C++/CLI. При вводе и выводе данных часто появляется необходимость преобразовать данные из одного базового типа в другой базовый тип. Здесь окажется полезным класс Convert, содержащий множество статических функций, преобразующих данные, например, ToBoolean(), ToByte(), ToChar(), ToDecimal(), ToDouble(), ToSingle(), ToString(), ToIntl6(), ToInt32(), ToInt64() и другие. В примере 4.2.1 программа на языке C++/CLI преобразует введённую строку (последовательность символов-цифр) в число посредством статической функции Convert:: ToInt32().

Java и J#. Библиотека языка Java содержит классы Boolean, Byte, Character, Double, Float, Integer и Short, включающие функции преобразования типов базовых данных. Например, класс Integer включает функции byteValue(), doubleValue(), floatValue(), intValue(), longValue(), toString(), parseInt() и др. Иные классы включают аналогичные функции. В программе на языке Java примера 4.2.1 введённая строка преобразуется в число функцией parseInt(), а из числа в строку функцией toString().