Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования JAVA.pdf
Скачиваний:
373
Добавлен:
02.05.2014
Размер:
2.57 Mб
Скачать

converted to PDF by BoJIoc

Джой (Bill Joy), Розанна Ли (Rosanna Lee), Джон Мэдисон (Jon Madison), Брайан О'Нейл (Brian O'Neill), Сью Палмер (Sue Palmer), Стивен Перелгат (Stephen Perelgut), Р. Андерс Шнайдерман (R. Anders Schneidermann), Сьюзен Сим (Susan Sim), Боб Спраул (Bob Sproull), Гай Стил (Guy Steele), Артур Ван Хофф (Arthur Van Hoff), Джим Уолдо (Jim Waldo), Грег Уилсон (Greg Wilson) и Энн Уолрат (Ann Wollrath) представили нам свои содержательные рецензии. Джефф Арнольд (Geoff Arnold), Том Карджилл (Tom Kargill),

Крис Дэрк (Chris Darke), Пэт Финнеган (Pat Finnegan), Майк Джордан (Mike Jordan), Дуг Ли (Doug Lea), Рэндалл Мюррей (Randall Murray), Роджер Риггс (Roger Riggs), Джимми Торрес (Jimmy Torres), Артур Ван Хофф (Arthur Van Hoff) и Фрэнк Йеллин (Frank Yellin)

предоставили полезные комментарии и техническую информацию.

Алка Дешпанд (Alka Deshpande), Шерон Фланк (Sharon Flank), Нассим Фотухи (Nassim Fotouhi), доктор К. Калаянасундарам (Dr. K. Kalayanasundaram), Патрик Мартин (Patrick Martin), Пол Романья (Paul Romagna), Сьюзен Снайдер (Susan Snyder) и Николь Янкелович (Nicole Yankelovich) своими совместными усилиями сделали возможными пять слов на стр. , не относящихся к кодировке ISO-Latin-1. Джим Арнольд (Jim Arnold) предоставил информацию о правильном написании, использовании и этимологии слов smoog и moorge. Эд Муни (Ed Mooney) помог подготовить документацию. Херб (Herb) и Джой Кайзер (Joy Kaiser) были нашими консультантами по хорватскому языку. Куки Каллахан (Cookie Callahan), Роберт Пирс (Robert Pierce) и Рита Тавилла (Rita Tavilla)

помогли сдвинуть проект с мертвой точки, когда он собирался остановиться всерьез и надолго.

Благодарим Ким Полез (Kim Polese) за краткую формулировку причин, по которым язык Java важен как для пользователей, так и для программистов.

В критические моменты нам помогали своими советами и поддержкой Сьюзен Уолдо

(Susan Waldo), Боб Спраул (Bob Sproull), Джим Уолдо (Jim Waldo) и Энн Уолрат (Ann Wollrath). Спасибо нашим семьям, которые не только дарили нас своей любовью, но и не дали нам зачахнуть за работой, за что мы им глубоко благодарны.

Выражаем искреннюю признательность персоналу фирмы Peets Coffee and Tea, который снабжал нас лучшим кофе Java на всей планете.

Любые ошибки или недочеты, оставшиеся в этой книге (несмотря на все усилия перечисленных выше лиц), лежат исключительно на совести авторов.

Глава 1

ПЕРВОЕ ЗНАКОМСТВО С JAVA

Посмотрите Европу! Десять стран за семнадцать дней!

Реклама в туристическом агентстве

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

1.1. С самого начала

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

converted to PDF by BoJIoc

Класс содержит в себе члены двух видов: поля и методы. Полями называются данные, принадлежащие либо самому классу, либо его объектам; значения полей определяют состояние объекта или класса. Методами называются последовательности операторов, выполняющих какие-либо действия с полями для изменения состояния объекта.

По сложившейся традиции первая программа на изучаемом языке программирования должна выводить строку Hello, world. Текст такой программы на Java выглядит следующим образом:

class HelloWorld {

public static void main(String[] args) { System.out.println(“Hello, world”);

}

}

Воспользуйтесь своим любимым редактором и введите исходный текст программы в файл. Затем запустите компилятор Java, чтобы преобразовать исходный текст в байт-код Java, “машинный языквиртуальной абстрактной машины Java. Набор текста программы и ее компиляция в разных системах могут производиться по-разному и потому здесь не описываются за информацией следует обратиться к соответствующей документации. Если запустить программу, на экране появится:

Hello, world

Наше маленькое приложение на языке Java что-то делает но, собственно, как это происходит?

В приведенной выше программе объявляется класс с именем HelloWorld, который содержит всего один метод main. Члены класса перечисляются внутри фигурных скобок { и }, следующих за именем класса. HelloWorld содержит один метод и не имеет полей.

Единственным параметром метода main является массив объектов String, которые представляют собой аргументы программы из командной строки, использованной для запуска. Массивы и строки, а также значение args для метода main рассматриваются ниже.

Метод main объявлен с ключевым словом void, поскольку он не возвращает никакого значения. В Java этот метод имеет особое значение; метод main класса, объявленный так, как показано выше, выполняется, если запустить класс как приложение. При запуске метод main может создавать объекты, вычислять значения выражений, вызывать другие методы и делать все то, что заложил в него программист.

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

Упражнение 1.1

Наберите, откомпилируйте и запустите программу HelloWorld на вашем компьютере.

Упражнение 1.2

Попробуйте изменить различные части программы HelloWorld и ознакомьтесь с полученными сообщениями об ошибках.

converted to PDF by BoJIoc

1.2. Переменные

Следующий пример выводит числа Фибоначчи бесконечную последовательность, первые члены которой таковы:

1

1

2

3

5

8

13

21

34

Ряд чисел Фибоначчи начинается с 1 и 1, а каждый последующий его элемент представляет собой сумму двух предыдущих. Программа для печати чисел Фибоначчи несложна, но она демонстрирует объявление переменных, работу простейшего цикла и выполнение арифметических операций:

class Fibonacci {

/** Вывод чисел Фибоначчи < 50 */ public static void main(String[] args) {

int lo = 1; int hi = 1;

System.out.println(lo); while (hi < 50) {

System.out.println(hi);

hi = lo + hi; // Изменение значения hi lo = hi — lo; /* Новое значение lo равно

старому hi, то есть сумме за вычетом старого lo */

}

}

}

В этом примере объявляется класс Fibonacci, который, как и Hello World, содержит метод main. В первых строках метода main объявляются и инициализируются две переменные, hi и lo. Перед именем переменной должен быть указан ее тип. Переменные hi и lo относятся к типу int — то есть являются 32-разрядными целыми числами со знаком, лежащими в диапазоне от –232 до 232–1.

В языке Java имеется несколько встроенных, “примитивныхтипов данных для работы с целыми, вещественными, логическими и символьными значениями. Java может непосредственно оперировать со значениями, относящимися к примитивным типам, — в отличие от объектов, определяемых программистом. Типы, принимаемые по умолчанию”, в Java отсутствуют; тип каждой переменной должен быть указан в программе. В Java имеются следующие примитивные типы данных:

boolean одно из двух значений: true или false

char 16-разрядный символ в кодировке Unicode 1.1

byte 8-разрядное целое (со знаком)

converted to PDF by BoJIoc

short 16-разрядное целое (со знаком)

int 32-разрядное целое (со знаком)

long 64-разрядное целое (со знаком)

float 32-разрядное с плавающей точкой (IEEE 754-1985) double 64-разрядное с плавающей точкой (IEEE 754-1985)

В программе для вывода чисел Фибоначчи переменным hi и lo было присвоено значение 1. Начальные значения переменных можно задавать при их объявлении с помощью оператора = (это называется инициализацией). Переменной, находящейся слева от оператора =, присваивается значение выражения справа от него. В нашей программе переменная hi содержит последнее число ряда, а lo — предыдущее число.

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

Оператор while в предыдущем примере демонстрирует один из вариантов циклов в Java. Программа вычисляет выражение, находящееся в скобках после while, — если оно истинно, то выполняется тело цикла, после чего выражение проверяется снова. Цикл while выполняется до тех пор, пока выражение не станет ложным. Если оно всегда остается истинным, программа будет работать бесконечно, пока какое-либо обстоятельство не приведет к выходу из цикла скажем, встретится оператор break или возникнет исключение.

Условие, проверяемое в цикле while, является логическим выражением, принимающим значение true или false. Логическое выражение, приведенное в тексте программы, проверяет, не превысило ли текущее число ряда значение 50. Если большее число ряда (hi) меньше 50, то оно выводится, а программа вычисляет следующее число Фибоначчи. Если же оно больше или равно 50, то управление передается в строку программы, находящуюся после тела цикла while. В нашем примере такой строкой оказывается конец метода main, так что работа программы на этом завершается.

Обратите внимание на то, что в приведенном выше примере методу println передается целочисленный аргумент, тогда как в HelloWorld его аргументом была строка. Метод println является одним из многих методов, которые перегружаются (overloaded), чтобы их можно было вызывать с аргументами различных типов.

Упражнение 1.3

Выведите заголовок перед списком чисел Фибоначчи.

Упражнение 1.4

Напишите программу, которая генерирует другой числовой ряд, — например, таблицу квадратов (умножение выполняется с помощью оператора * — например, i * i).

1.3. Комментарии

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

Текст, следующий за символами // вплоть до конца строки, игнорируется компилятором; то же самое относится и к тексту, заключенному между символами /* и */.

converted to PDF by BoJIoc

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

Комментарий третьего типа встречается в самом начале программы, между символами /** и */. Комментарий, начинающийся с двух звездочек, является документирующим.

Документирующие комментарии используются для описания назначения следующего за ними фрагмента программы; в нашем примере характеризуется метод 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 {

final static int CLUBS = 1; final static int DIAMONDS = 2; final static int HEARTS = 3; final static int SPADES = 4;

};

При такой группировке на масти можно ссылаться как на Suit.HEARTS, Suit.SPADES и т. д. — все названия мастей сосредоточены в пределах одного класса Suit.