
- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 12. Ввод/вывод, апплаты и другие темы 313
ной строки. Обратите внимание на блоки try/catch, обрабатывающие две ошибки, которые могут произойти во время использования программы: указанный файл не найден, или пользователь забыл включить в командную строку имя файла.
/* Выведет на экран текстовый файл.
При запуске программы укажите (в параметре команды запуска) имя файла, который вы хотите просмотреть. Например, чтобы просмотреть файл с именем TEST.TXT, Используйте следующую командную строку
Java ShowFile TEST.TXT */
import java.io.*;
class ShowFile {
public static void main(String args[]J
throws lOException {
int i; FilelnputStream fin;
try {
fin = new FilelnputStream(args[0]}; } catch(FileNotFoundException e) {
System.out,println("Файл не найден");
return; } catch(ArraylndexOutOfBoundsException e) {
System.out.println("Используйте: ShowFile имя__файла") ;
return; }
// читать символы файла, пока не встретится символ EOF do {
i = fin. read () ;
if(i != -1) System,out.print((char) i) ; } while(i !=-!);
fin.close ();
} . . .
} . . • .
Для записи в файл используется метод write (}, определенный в классе FiieOutputstream. Его самая простая форма имеет вид:
void write(int byteval) throws lOException
314 Часть I. Язык Java
Данный метод записывает в файл байт, указанный в параметре bytevai. Хотя bytevai объявлен как целое число, в файл записывается только восемь младших битов. Если во время записи происходит ошибка, выбрасывается исключение lOException. В следующем примере метод write о применяется для копирования текстового файла:
/* Копирование текстового файла.
При запуске этой программы укажите имя исходного файла
и целевого файла(в который будет выполняться копирование).
Например, чтобы скопировать файл с именем FIRST.TXT
в файл с именем SECOND.TXT, используйте следующую командную строку
Java CopyFile FIRST.TXT SECOND.TXT */
import java.io.*;
class CopyFile {
public static void main(String args[])
throws lOException {
int i;
FilelnputStream fin; 'FileOutputStream fout;
try {
// открыть файл для ввода try {
fin = new FilelnputStream(args[0]); } catch(FileNotFoundException e) {
System.out.println("Исходный файл не найден");
return; }
// открыть файл для вывода try {
fout = new FileOutputStream(args[1]); } catch(FileNotFoundException e) {
System.out.println("Ошибка открытия выходного файла"); return; } } catch(ArraylndexOutOfBoundsException e) {
System.out.println("CopyFile копирует исходный файл в выходной"); return; }
// копировать файл try {
Глава 12. Ввод/вывод, апплеты и другие темы 315
do {
i = fin. read 0 ; if(i != -1) fout.write(i); } while(i != -1); ) catch(IDException e) {
System.out.println("Файловая ошибка"); }
fin.close(); fout.close(); } }
Обратите внимание на способ обработки потенциальных ошибок ввода/вывода в этой и в предыдущей программе. В отличие от большинства других машинных языков, включая С и C++, которые используют коды ошибки, чтобы сообщать о файловых ошибках, Java используют собственный механизм обработки особых ситуаций (исключений). Это не только делает обработку файла более ясной, но и позволяет во время ввода легко отличить состояние конца файла от файловых ошибок. В C/C++ многие функции ввода возвращают одно и то же значение, когда происходит ошибка и когда достигнут конец файла (т. е. в C/C++ признак конца файла (EOF) часто отображается в то же значение, что и ошибка ввода). Это обычно означает, что программист должен включить в код дополнительные операторы для того, чтобы определить, что же фактически произошло. В Java ошибки передаются в вашу программу через исключения, а не через значения, возвращаемые методом read(). Таким образом, когда read о возвращает -1, это означает только одно — при чтении встретился конец файла.
Апплеты. Основы программирования
Все предшествующие примеры в этой книге были Java-приложениями. Однако приложение — это только один тип Java-программ. Другой тип программ представлен апплетом. В главе 1 апплеты определялись как небольшие приложения, которые доступны на Internet-сервере, транспортируются по Internet, автоматически устанавливаются и выполняются как часть Web-документа. После того, как апплет прибывает к клиенту, он имеет ограниченный доступ к ресурсам системы, которые использует для создания произвольного мультимедийного интерфейса пользователя и выполнения комплексных вычислений без риска заражения вирусами или нарушения целостности данных.
Многие проблемы, связанные с созданием и использованием апплетов, обсуждаются в Части II, где рассматривается пакет applet. Здесь же представлены основные принципы, связанные с созданием апплетов, потому что они
316 Часть I. Язык Java
не структурированы таким же образом, как используемые до настоящего времени программы. Как вы увидите, апплеты отличаются от приложений в нескольких ключевых областях.
Начнем с примера простого апплета:
import . j ava. awt. * ; import java.applet.*;
public class SimpleApplet extends Applet { public void paint(Graphics g) {
g.drawstring("A Simple Applet", 20, 20); } }
Апплет начинается с двух операторов import. Первый импортирует AWT классы (из большой иерархии awt-пакетов Java). Таким образом, апплеты взаимодействуют с пользователем через AWT, а не через классы консольного ввода/вывода. AWT осуществляет поддержку графического оконного интерфейса. Система AWT классов достаточно велика и сложна, ее полное обсуждение занимает несколько глав в Части II этой книги. К счастью, в нашем простом апплете использование AWT очень ограничено. Второй оператор import импортирует пакет j ava. applet, который содержит класс Applet. Каждый апплет, который вы создаете, должен быть подклассом этого класса.
Следующая строка в программе объявляет класс SimpleApplet. Он должен быть объявлен как public, потому что к нему необходимо обеспечить доступ из кодов, которые находятся вне программы.
Внутри SimpleApplet объявлен метод paint (). Этот метод определен в AWT и должен быть переопределен апплетом. Метод paint о вызывается каждый раз, когда апплет должен восстанавливать изображение своего вывода. Данная ситуация может возникать в нескольких случаях. Например, окно, в котором выполняется апплет, может быть перекрыто другим окном, которое затем закрывается. Или окно апплета может быть свернуто и затем восстановлено. Метод paint о вызывается также, когда апплет начинает выполнение. Безотносительной причины, всякий раз, когда апплет должен перерисовать свой вывод, вызывается метод paint о. Метод имеет один параметр типа Graphics, через который получает графический контекст, описывающий графическую среду выполнения апплета. Этот контекст используется всякий раз, когда апплету требуется вывод.
Внутри paint (} находится обращение к методу drawstring (), который является членом класса Graphics. Этот метод выводит строку, начиная с указан-
' AWT (Abstract Windowing Toolkit) — абстрактный оконный интерфейс. — Примеч. пер.