подавляющее большиство фукций на пространстве последовательостей? |
Основы языка Java
Задача 2.2.Напишите программу, печатающую на экране красивое поздравление с новым учебным годом.
Текст программы
public class NewYear { // magic ! public static void main(String[] args) { Xterm.clear(); Xterm.setPosition(25,8); Xterm.print("С новым годом ", Xterm.Red); Xterm.print("(учебным)", Xterm.Blue); Xterm.print("!", Xterm.Red); Xterm.setPosition(0,16); /* Конец программы */ } }
В этой программе используются два вида комментариев из трех, существующих в языке Java. Текст, расположенный после символов // вплоть до конца строки, и произвольное количество строк текста между символами /* и */, компилятором просто игнорируются. Знакомство с третьим видом комментариев, предназначенным для автоматического документирования программ, отложим до третьей главы книги. Второй из комментариев, включенных в приведенную выше программу, является типичным примером комментария, ухудшающего код. Не включайте в свои программы бесполезные комментарии!
Некоторые фрагменты этой (и многих последующих) программы обсуждаться до начала третьей главы не будут. Только тогда, после полноценного знакомства с основными концепциями объектно-ориентированного программирования на языке Java, можно будет разобраться с тем, что же означает строка public static void main(String[] args). Пока мы будем просто считать, что так надо!
Содержательная же часть приведенной программы (тело функции main, т.е. текст, расположенный между внутренними фигурными скобками) сейчас будет подробно разобрана. Рекомендуется откомпилировать и запустить эту программу для того, чтобы увидеть результат ее работы, — это поможет лучше понять ее. При этом следует иметь в виду, что кроме файла NewYear.java в данном случае необходим еще и файл Xterm.java (его содержимое приведено для справки в последней секции данной лекции).
Объект, с которым ведется работа в программе, — Xterm. Подробно он рассматривается чуть ниже, а пока отметим только то, что он определяет терминал, обеспечивающий ввод чисел и вывод строк текста. Объект Xterm содержит в себе некоторую информацию или, как говорят находится в некотором состоянии. Состояние характеризуется тем текстом, который отображается в окне терминала, и положением курсора, отвечающего за позицию, в которой появится очередной выводимый символ.
На самом деле в классе Xterm нет компонент, содержащих указанную информацию (она хранится совсем в другом объекте), однако подобное упрощение реальной ситуации является весьма удобным.
Множество всех состояний, в которых может находиться объект, называется пространством состояний. По отношению к объекту могут быть выполнены некоторые, заранее определенные действия — методы (methods), а процесс выполнения этих действий называют вызовом метода. В результате этих действий состояние объекта может измениться.
В языке Java для вызова метода необходимо сначала указать объект, к которому применяется тот или иной метод, а затем после точки записать имя метода. Именно этот синтаксис, в котором главная роль отводится объекту, над которым производится действие, послужил основой для названия парадигмы — "объектно-ориентированная".
Некоторые из методов требуют для своего выполнения указания дополнительных объектов. Такие дополнительные объекты называют параметрами или аргументами и перечисляют их через запятую в круглых скобках после имени метода. В случае метода без параметров скобки тем не менее обязательны. Завершается любой оператор в языке Java точкой с запятой.
Рассматриваемая программа содержит вызов трех различных методов класса Xterm: clear, setPosition и print. Первый из них очищает окно терминала и не имеет параметров, второй перемещает курсор в позицию, задаваемую параметрами метода, а третий позволяет вывести строку текста. При этом первый параметр метода print определяет выводимую строку, а второй задает цвет символов.
Все встретившиеся в данной программе методы не возвращают значений, однако это вовсе не является обязательным. Метод может возвращать в качестве результата своей работы объект произвольного типа с помощью оператора return.
Типы, переменные и операторы
Типы данных в языке Java подразделяются на простые ( primitive ) и ссылочные ( reference ). К простым относятся величины логического типа boolean, символьного char, целых типов byte, short, int и long, и типов для представления действительных чисел float и double. Ссылочные типы позволяют работать с объектами и массивами.
Множество всех объектов с одинаковым пространством состояний и одинаковым набором методов называется классом (class). Почти все, с чем приходится иметь дело в языке Java, — это объекты различных классов.
Логический тип предназначен для хранения величин, имеющих значения (Ложь) или (Истина), а символьный тип позволяет хранить многочисленные символы различных алфавитов всех народов мира. Особенностям представления числовых типов и работе с ними посвящен следующий параграф.
Для работы с объектами, массивами и сущностями простых типов используются переменные (variables). Присваивание переменной какого-то значения, содержащегося в некоторой другой переменной, результата вызова метода или вычисленного выражения, осуществляется с помощью оператора присваивания =.
В языке Java все переменные должны быть описаны, т.е. для каждой переменной в программе до ее первого использования должно присутствовать ее определение. Общий вид определения переменных таков:
тип идентификатор [= значение] [, идентификатор [= значение ]...];
Описание переменной определяет ее тип и имя ( идентификатор ). Имя представляет из себя последовательность из букв, цифр, символов подчеркивания и доллара, причем первый символ не может быть цифрой, а прописные и строчные буквы различаются.
Квадратные скобки в приведенной записи означают фрагменты, которые могут быть опущены. В частности, переменная может быть объявлена без присваивания ей начального значения (инициализации). В языке Java все такие переменные автоматически инициализируются нулем.
Java — строго типизированный язык. Это, в частности, означает, что переменной одного типа, вообще говоря, нельзя присвоить значение другого типа — несовпадение типов приведет к сообщению об ошибке на этапе компиляции. Для каждого типа строго определены наборы допустимых значений и разрешенных операций. Например, для типов int и double операция сложения определена, а для типа boolean — нет.
Из приведенного правила есть исключения. В языке Java производится автоматическое преобразование, например, целых чисел в действительные. В приведенном ниже примере обе переменные будут проинициализированы единицей, причем для переменной g при этом произойдет преобразование целого числа один в действительное (что именно это значит, описано в следующем параграфе):
double f = 1.0, g = 1;
Обратное преобразование (из действительного числа в целое) в языке Java автоматически произойти не может, так как это может повлечь за собой искажение исходного значения. В тех ситуациях, когда действительно необходимо выполнить подобную операцию (найти целую часть числа), необходимо воспользоваться оператором преобразования типа:
double f = 1.1; int n = (int) f, m = (int) (f + 0.8);
Для преобразования типа переменной или какого-то выражения необходимо перед ним указать в круглых скобках новый тип. В приведенном выше примере обе целочисленные переменные ( m и n ) окажутся равными единице.
Кроме уже встретившихся операторов вызова метода, присваивания и преобразования типа в языка Java определен целый ряд других. Операторы бывают унарными (с одним аргументом), бинарными (с двумя) и тернарными (с тремя). Большинство операторов языка Java являются бинарными: к ним относятся, например, операции сложения и умножения чисел. Унарные операторы подразделяются на префиксные и постфиксные, а тернарный оператор в языке всего один.
Существует и другая классификация операторов: они делятся на арифметические, битовые, операторы отношения и логические. Арифметические и битовые операторы разбираются в "Особенности представления чисел в ЭВМ" после знакомства с представлением чисел в ЭВМ, а логические операторы и операторы отношения — в конце текущей лекции.