К. Арнольд, Д. Гослинг - Язык программирования Java (1160779), страница 3
Текст из файла (страница 3)
Вполне возможно, что на их месте окажетесь вы сами через несколько месяцев или даже лет. Комментируя свою программу, выэкономите собственное время. Кроме того, при написании комментариев нередко обнаруживаются ошибки в программе — когда приходитсяобъяснять кому-то, что происходит, то поневоле задумываешься над этим сам.Комментарий третьего типа встречается в самом начале программы, между символами /** и */. Комментарий, начинающийся с двух звездочек,является документирующим. Документирующие комментарии используются для описания назначения следующего за ними фрагментапрограммы; в нашем примере характеризуется метод main. Специальная программа, которая называется javadoc, извлекает документирующиекомментарии и генерирует по ним справочный файл в формате HTML.1.4.
Именованные константыКонстантами называются фиксированные значения — например, 12, 17.9 или “String like this”. С их помощью можно работать с величинами,которые не вычисляются заново, а остаются постоянными во всем жизненном цикле программы.Программисты предпочитают иметь дело с именованными константами по двум причинам. Первая из них заключается в том, что имя константыпредставляет собой некоторую форму документации. Оно может (и должно!) описывать, для чего используется то или иное значение.Другая причина в том, что именованная константа определяется всего в одном месте программы. Когда ее значение понадобится изменить, этодостаточно будет сделать в одном месте, что заметно упрощает модификацию программы.
Чтобы создать именованную константу в Java, следуетуказать в ее объявлении ключевые слова static и final и задать начальное значение:class CircleStuff {static final double p = 3.1416;}Если вдруг окажется, что точности в четыре цифры после десятичной точки недостаточно, значение p легко изменить. Мы объявили p какпеременную типа double — 64-разрядное число с плавающей точкой с двойной точностью, так что p можно задать и поточнее — скажем,3.14159265358979323846.Взаимосвязанные константы можно группировать в рамках класса.
Например, в карточной игре могут пригодиться следующие константы:class Suit {finalfinalfinalfinal};staticstaticstaticstaticintintintintCLUBS = 1;DIAMONDS = 2;HEARTS = 3;SPADES = 4;При такой группировке на масти можно ссылаться как на Suit.HEARTS, Suit.SPADES и т. д. — все названия мастей сосредоточены в пределаходного класса Suit.1.4.1. Символы UnicodeДавайте ненадолго остановимся и обратим внимание на символ p, использованный в качестве имени константы в предыдущем примере.
Вбольшинстве языков программирования идентификаторы обычно ограничиваются буквами и цифрами, входящими в набор символов ASCII.Java вводит вас в современный мир интернационального программного обеспечения; в Java используется кодировка Unicode — международныйстандарт для набора символов. Символы Unicode состоят из 16 бит, благодаря чему обеспечивается поддержка букв, входящих в большинствоязыков мира.
По-этому мы и смогли использовать p как имя константы в приведенном выше примере. Символ p входит в греческую секциюUnicode и, следовательно, может присутствовать в исходном тексте программы. В настоящее время при программировании, как правило,используется набор символов ASCII, 7-битная кодировка или ISO-Latin-1 — 8-битный стандарт, который обычно называется Latin-1. Однако передобработкой эти символы переводятся в Unicode, так что в Java всегда используется кодировка Unicode.Упражнение 1.5Измените приложение HelloWorld так, чтобы выводимая строка была представлена именованной константой.Упражнение 1.6Измените приложение Fibonacci так, чтобы вместо константы-литерала (50) в условии цикла фигурировала именованная константа.1.5.
Порядок выполнения“Порядком выполнения” называется очередность, в которой выполняются операторы программы. Один из примеров воздействия на порядоквыполнения — цикл while в программе для вывода чисел Фибоначчи. К числу других операторов, изменяющих порядок выполнения, относятсяконструкции if/else, for, switch, do/while и блоки — несколько операторов, сгруппированных внутри фигурных скобок { и }. Давайтеусовершенствуем программу для вывода чисел Фибоначчи — перенумеруем все члены последовательности и пометим нечетные числазвездочкой:/** Вывести несколько первых чисел Фибоначчи,помечая нечетные числа символом ‘*’ */static final int MAX_INDEX = 10;public static void main (String[] args) {int lo = 1;int hi = 1;String mark;System.out.println(“1: ” + lo);for (int i = 2; i < MAX_INDEX; i++) {if (hi % 2) == 0)mark = “ *”;elsemark = “”;System.out.println(i + “: ” + hi + mark);hi = lo + hi;// Изменение значения hilo = hi — lo;/* Новое значение lo равностарому hi, то есть суммеза вычетом старого lo */}}}Вот как выглядит результат работы программы:1: 12: 13: 2 *4: 35: 56: 8 *7: 138: 219: 34 *Для упрощения нумерации ряда вместо while используется цикл for.
Цикл for является частным случаем while с добавлением инициализации иприращения переменной цикла. Приведенный выше цикл for эквивалентен следующему циклу while:{int i = 2;while (i < MAX_INDEX) {// .. выводi++;}}Оператор ++ в этом фрагменте может показаться непонятным тому, кто не знаком с языками программирования, восходящими к C. Этотоператор увеличивает на единицу значение переменной, к которой он применяется, — в данном случае, i. Оператор ++ является префиксным,если он стоит перед операндом, и постфиксным, если он стоит после него. Аналогично, оператор — уменьшает на единицу значениепеременной, к которой он применяется, и также может быть префиксным или постфиксным.
Операторы ++ и — ведут свое происхождение изязыка программирования C. В приведенном выше примере операторi++;может быть заменен выражениемi = i + 1;Помимо простого присваивания, в Java имеются и другие операторы присваивания, которые применяют арифметические действия к значению вих левой части. Например, еще одна возможность представить i++ в цикле for может быть такой:i += 1;Значение в правой части оператора += (то есть 1) прибавляется к значению переменной в левой части (то есть i), и результат записывается в туже переменную.
Большинство бинарных операторов в Java (другими словами, операторов с двумя операндами) может аналогичным образомобъединяться с оператором =.Внутри цикла for используется конструкция if/else, проверяющая текущее значение hi на четность. Оператор if анализирует значение выраженияв скобках. Если оно равно true, то выполняется первый оператор или блок внутри оператора if.
Если же значение равно false, то выполняетсяоператор или блок, следующий за ключевым словом else. Наличие else не требуется; если else отсутствует и условие равно false, то блок ifпропускается. После выполнения одной из двух возможных ветвей конструкции if/else, управление передается оператору, следующему заоператором if.В нашем примере проверка hi на четность осуществляется с помощью оператора %. Он вычисляет остаток от деления левого операнда направый. Если значение слева четно, то остаток будет равен 0, и следующий оператор присвоит переменной marker звездочку — индикатор дляпометки четного числа. Для нечетных чисел выполняется условие else, присваивающее marker пустую строку.Метод println выполняется несколько сложнее — оператор + используется для конкатенации следующих строк: i, разделитель, строка длязначения hi и строка-индикатор. В случае применения оператора + к строкам он выполняет их конкатенацию, тогда как в арифметическихвыражениях он занимается сложением.Упражнение 1.7Модифицируйте цикл так, чтобы значение переменной i изменялось не в прямом, а в обратном направлении.1.6.
Классы и объектыJava, как и любой другой объектно-ориентированный язык программирования, располагает средствами построения классов и объектов. Каждыйобъект в Java имеет тип; им является тот класс, к которому принадлежит данный объект. В каждом классе есть члены двух видов: поля и методы.●●Полями называются переменные, содержащие данные класса и его объектов. В них хранятся результаты вычислений, выполняемыхметодами данного класса.Методы содержат исполняемый код класса. Методы состоят из операторов; эти операторы, а также способ вызова методов в конечномсчете определяют процесс выполнения программы.Так может выглядеть объявление простого класса, представляющего точку на плоскости:class Point {public double x, y;}Класс Point содержит два поля с координатами x и y точки, и в нем нет ни одного метода (конечно же, в текущей реализации).
Подобноеобъявление класса определяет, как будут выглядеть объекты, созданные на его основе, а также задает поведение объектов с помощью рядаинструкций. Чертеж приобретает наибольшую ценность после того, как к нему добавляются технические задания и инструкции.Члены класса могут обладать различными правами доступа. Объявление полей x и y класса Point с ключевым словом public означает, что любойметод программы, получивший доступ к объекту Point, сможет прочитать или изменить эти поля. Разрешается ограничить доступ к данным ипредоставлять его лишь методам самого класса или связанных с ним классов.1.6.1.
Создание объектовОбъекты создаются посредством выражений, в которых используется ключевое слово new. Созданные на основе определения класса объектычасто называют экземплярами данного класса.В языке Java создаваемые объекты размещаются в области системной памяти, которая называется кучей (heap). Доступ к любому объектуосуществляется с помощью ссылки на объект — вместо самого объекта в переменных содержится лишь ссылка на него. Когда ссылка неотносится ни к какому объекту, она равна null.Обычно между самим объектом и ссылкой на него не делается особых различий — можно сказать “передать методу объект”, на самом деле имеяв виду “передать методу ссылку на объект”.