
- •Глава 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
Глава 7. Методы и классы 1_83
Вывод этой программы:
В методе display: outer_x = 100
В этой программе внутренний класс с именем inner определен в пределах области видимости класса outer. Поэтому любой код в классе inner может прямо обращаться к переменной outer_x. Внутри inner определен экземп-лярный метод с именем display о. Этот метод отображает outer_x в поток стандартного вывода. Метод main о класса innerciassDemo создает экземпляр (объект) класса Outer и вызывает его метод test (). Тот метод создает экземпляр класса inner и вызывает метод display о.
Важно понять, что класс inner известен только в пределах области действия (т. е. внутри) класса outer. Java-компилятор генерирует сообщение об ошибке, если какой-то код вне класса outer делает попытку создать экземпляр (объект) класса inner. Итак, вложенный класс ничем не отличается от любого другого программного элемента, но он известен только в пределах включающей его области.
Внутренний класс имеет доступ ко всем членам своего включающего класса, но обратное — не верно. Члены внутреннего класса известны только в пределах внутреннего класса и не могут использоваться внешним классом. Например:
// Эта программа компилироваться не будет, class Outer {
int outer_x = 100;
void test() {
Inner inner = new Inner!);
inner.display(} ; }
// это внутренний класс class Inner {
int у = 10; // у — локальная для Inner
void display!) {
System.out.println("В методе display: outer_x = " + outer_x);
i
}
void showy() {
System.out.println(y); //ошибка, у здесь неизвестна! ) }
class InnerClassDemo {
public static, void main (String args[]) {
184 '• Часть I. Язык Java
Outer outer = new Outer(); outer.test(); } }
Здесь у объявлена как переменная экземпляра класса inner. Таким образом, она не известна вне этого класса, и не может использоваться методом
showy().
Хотя мы сосредоточились на вложенных классах, объявленных в области внешнего класса, существует возможность определять внутренние классы в пределах любого блока. Например, можно определить вложенный класс в блоке, установленном в методе или даже в теле цикла for, как показывает следующая программа.
// Определение внутреннего класса в цикле for. class Outer {
int outer_x = 100;
void test () {
for(int i=0; i<10; i++) { .class Inner {
void display(} {
System.out.println("В методе display: outer__x = " + outer x); } }
Inner inner = new Inner(); inner.display(); } } }
class InnerClassDemo {
public static void main(String args[]) ( Outer outer = new Outeri); outer.test(); } }
Вывод этой версии программы:
В методе display: outer_x = 100
В методе display: outer_x = 100
В методе display: outer_x = 100
В методе display: outer__x = 100
В методе display: outer_x = 100
В методе display: outer_x = 100
В методе display: outer x = 100
Глава 7. Методы и классы . 185
В методе display: outer_x = 100 В методе display: outer_x = 100 В методе display: outer_x = 100
В то время как вложенные классы почти не используются в повседневном программировании, они особенно .полезны при обработке событий в аппле-тах. Мы вернемся к теме вложенных классов в главе 20. Там вы увидите, как можно использовать внутренние классы, чтобы упростить код, необходимый для обработки некоторых типов событий. Вы изучите также анонимные внутренние классы, являющиеся внутренними, которые не имеют имен.
i ^ , ' •
И последнее замечание: в оригинальной спецификации Java 1.0 вложенные классы не допускались. Они были добавлены в Java 1.1.
Класс String
Хотя класс string будет подробно рассмотрен в Части II этой книги, краткое его рассмотрение необходимо уже теперь, потому что в некоторых примерах программ, показанных в конце Части I, мы будем использовать строки, string — это, пожалуй, чаще всего используемый класс в библиотеке классов Java. Причина очевидна — строки являются очень важной частью программирования.
Для начала важно понять, что каждая строка, которую вы создаете, в действительности является объектом типа string. Даже строчные константы — это фактически string-объекты. Например, в утверждении
System.out.println("This is a String, too");
строка "This is a String, too" является string-константой. К счастью, Java обрабатывает string-константы так же, как другие машинные языки обрабатывают "нормальные" строки, так что вас это не должно беспокоить.
Кроме того, нужно понять, что объекты типа string неизменяемы. Если string-объект создан, то его содержимое не может быть изменено. Хотя данное утверждение похоже на серьезное ограничение, однако это не так по двум причинам:
О если нужно изменить строку, то всегда можно создать ее новую модифицированную копию;
П Java определяет класс просмотра (peer class) для string, называемый stringBuffer, который позволяет строкам стать изменяемыми, так что все нормальные манипуляции со строками все еще доступны в Java. (stringBuffer описан в Части II этой книги.)
Строки можно создать множеством способов. Самый простой — с помощью следующего утверждения:
String myString = "Это тест";
186 Часть I. Язык Java
Как только вы создали string-объект, то можете использовать его везде, где допустима строка. Например, следующее утверждение выводит myst ring-объект на экран дисплея:
System.out.println(myString);
Java определяет одну операцию для string-объектов, которая обозначается знаком плюс (+). Она используется для сцепления (конкатенации) двух строк. Например, такой оператор:
String myString = "Мне"'+ " нравится программировать на " + "Java.";
приводит к следующему содержимому объекта myString: "Мне нравится программировать на Java".
Предыдущие концепции демонстрирует следующая программа:
// Демонстрация строк, class StringDemo {
public static void main(String args[]) {
String strObl = "Первая строка";
String strOb2 = "Вторая строка";
String strObS = strObl + " и " + Str0b2;
System.out.println(strObl); System.out.println(strOb2); System.out.println(strObS); } }
Вывод, выполняемый этой программой:
Первая трока
Вторая строка
Первая строка и Вторая строка
Класс string содержит несколько полезных методов. Используя equals о, можно проверять две строки на равенство. Длину строки можно получить, вызывая метод lengtho. Вызывая charAto, можно получить символ строки с указанным индексом (номером). Общие формы из этих трех методов:
boolean equals(String object)
int length()
char charAt(int index)
Ниже приведена программа, которая демонстрирует эти методы:
// Демонстрация некоторых методов класса String, class StringDemo2 {
public static void main(String args(]) (