Литмир - Электронная Библиотека
Содержание  
A
A

Ниже приведен исходный код класса Pwr, написанный с использованием ключевого слова this.class Pwr { double b; int e; double val; Pwr(double base, int exp) { this.b = base; this.e = exp; this.val = 1; if(exp==0) return; for( ; exp>0; exp—) this.val = this.val * base; } double get_pwr() { return this.val; }}

На самом деле ни один программирующий на Java не напишет класс Pwr подобным образом, поскольку, добавляя ключевое слово this, он не получит никаких преимуществ. В то же время стандартная форма записи тех же самых операторов выглядит намного проще. Но в ряде случаев ключевое слово this может оказаться очень полезным. Например, синтаксис языка Java не запрещает использовать имена параметров или локальных переменных, совпадающие с именами глобальных переменных. В этом случае локальная переменная или параметр скрывает переменную экземпляра. А доступ к скрытой переменной экземпляра позволяет получить ключевое слово this. Так, приведенный ниже пример конструктора класса Pwr () синтаксически правилен, но подобного стиля программирования рекомендуется все же избегать.Pwr(double b, int e) { // Здесь ключевое слово this обозначает ссылку // на переменные b и е, а не на параметры, this.b = b; this.e = е; val = 1; if(е==0) return; for( ; е>0; е—) val = val * b;}

В данной версии конструктора класса Pwr имена параметров совпадают с именами переменных экземпляра, скрывая их. А ключевое слово this используется здесь для того, чтобы “раскрыть” переменные экземпляра.

Упражнение для самопроверки по материалу главы 4

В чем отличие класса от объекта?

Как определяется класс?

Чью собственную копию содержит каждый объект?

Покажите, как объявить объект counter класса MyCounter, используя два отдельных оператора.

Как должен быть объявлен метод myMeth, принимающий два параметра, а и b, типа int и возвращающий значение типа double?

Как должно завершаться выполнение метода, возвращающего некоторое значение?

Каким должно быть имя конструктора?

Какие действия выполняет оператор new?

Что такое “сборка мусора” и какие действия она выполняет? Зачем нужен метод finalize()?

Что означает ключевое слово this?

Может ли конструктор иметь один или несколько параметров?

Если метод не возвращает значения, то как следует объявить тип этого метода?

Глава 5 Дополнительные сведения о типах данных и операторах

Основные навыки и понятия

Представление о массивах

Создание многомерных массивов

Создание нерегулярных массивов

Представление об альтернативном синтаксисе объявления массивов

Присваивание ссылок на массивы

Применение переменной экземпляра length

Использование разновидности for-each цикла for

Манипулирование символьными строками

Употребление аргументов командной строки

Использование поразрядных операторов

Применение оператора ?

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

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

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

Массивами в Java можно пользоваться практически так же, как и в других языках программирования. Тем не менее у них имеется одна особенность: они реализованы в виде объектов. Именно поэтому их рассмотрение было отложено до тех пор, пока в этой книге не были представлены объекты. Реализация массивов в виде объектов дает ряд существенных преимуществ, и далеко не самым последним среди них является возможность утилизировать неиспользуемые массивы средствами “сборки мусора”.Одномерные массивы

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

Для объявления одномерного массива обычно применяется следующая общая форма:тип имя_массива[] = new тип[размер];

где тип объявляет конкретный тип элемента массива. Тип элемента, называемый также базовым, определяет тип данных каждого элемента, составляющего массив. А размер определяет число элементов массива. В связи с тем что массивы реализованы в виде объектов, создание массива происходит в два этапа. Сначала объявляется переменная, ссылающаяся на массив, затем выделяется память для массива, а ссылка на нее присваивается переменной массива. Следовательно, память для массивов в Java динамически распределяется с помощью оператора new.

Проиллюстрируем все сказанное выше на конкретном примере. В следующей строке кода создается массив типа int, состоящий из 10 элементов, а ссылка на него присваивается переменной sample:int sample[] = new int[10];

Объявление массива происходит так же, как и объявление объекта. В переменной sample сохраняется ссылка на область памяти, выделяемую для массива оператором new. Этой памяти должно быть достаточно для размещения в ней 10 элементов типа int.

Как и объявление объектов, приведенное выше объявление массива можно разделить на две отдельные составляющие следующим образом:int sample [];sample = new int[10];

В данном случае сначала создается переменная sample, которая пока что не ссылается на конкретный объект. А затем переменная sample получает ссылку на конкретный массив.

Доступ к отдельным элементам массива осуществляется с помощью индексов. Индекс обозначает положение элемента в массиве. В Java индекс первого элемента массива равен нулю. Так, если массив sample содержит 10 элементов, их индексы находятся в пределах от 0 до 9. Индексирование массива осуществляется по номерам его элементов, заключенным в квадратные скобки. Например, для доступа к первому элементу массива sample следует указать sample [ 0 ], а для доступ к последнему элементу этого массива — sample [9]. В приведенном ниже примере программы в массиве sample сохраняются числа от 0 до 9.// Демонстрация одномерного массива,class ArrayDemo { public static void main(String args[]) { int sample[] = new int[10]; int i; // Массивы индексируются с нуля, как показано ниже. for(i = 0; i < 10; i = i+1) sample[i] = i; for(i =0; i < 10; i = i+1) System.out.println("This is sample[" + i + "] : " + sample [i]); }}

Результат выполнения данной программы выглядит следующим образом:This is sample[0]: 0This is sample[1]: 1This is sample[2]: 2This is sample[3]: 3This is sample[4]: 4This is sample[5]: 5This is sample[6]: 6This is sample[7]: 7This is sample[8]: 8This is sample[9]: 9

Структура массива sample наглядно показана на приведенном ниже рисунке.

Java: руководство для начинающих (ЛП) - _2.jpg
Массивы часто употребляются в программировании, поскольку они позволяют обрабатывать в цикле большое количество переменных. Например, в результате выполнения следующего примера программы определяется минимальное и максимальное значения из всех, хранящихся в массиве nums. Элементы этого массива перебираются в цикле for.// Нахождение минимального и максимального значений в массиве,class MinMax { public static void main(String args[]) { int nums[] = new int[10]; int min, max; nums[0] = 99; nums[l] = -10; nums[2] = 100123; nums[3] = 18; nums[4] = -978; nums[5] = 5623; nums[6] = 4 63; nums[7] = -9; nums[8] =287; nums[9] = 4 9; min = max = nums[0]; for(int i=l; i < 10; i++) { if(nums[i] < min) min = nums[i]; if(nums[i] > max) max = nums[i]; } System.out.println("min and max: " + min + " " + max); }}

34
{"b":"242519","o":1}