Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Java.doc
Скачиваний:
17
Добавлен:
07.09.2019
Размер:
569.34 Кб
Скачать

Многомерные массивы

Многомерный массив в Java это фактически массив массивов. Формат объявления двумерного массива имеет вид:

тип [][] идентификатор;

тип идентификатор[][];

Ниже приведены некоторые примеры объявления двумерных массивов:

int ms1[][]=new int[2][3];

double[][] ms2=new double[3][2];

byte[][] ms3;

ms3=new byte[3][4];

При объявлении массива необходимо определять явно только крайнюю левую его размерность. Остальные размерности могут доопределяться позже.

ms3= new byte[3][];

ms[0]=new byte[2];

ms[1]=new byte[2];

ms[2]=new byte[2];

Функции

Переменные базовых типов могут передаваться функциям в качестве параметров только по значению, но не по ссылке. Поэтому следующий фрагмент кода работать не будет:

int x;

void ChangeX(int x)

{

x = 5;

}

. . .

x = 0;

ChangeX(x);

После вызова функции ChangeX содержимое переменной x останется равным нулю.

Проблему можно решить, если вместо базовых переменных использовать объекты встроенных классов, соответствующие базовым переменным. О встроенных классах вы узнаете из следующего раздела

Класс Поля и методы

Класс в Java может содержать два типа элементов: компоненты-данные (поля) и компоненты-функции (методы). Поля - это объекты любого типа, с которыми можно взаимодействовать через ссылку, либо объекты базового типа. При этом ссылка инициализируется присоединением к реальному объекту (используя new), в конструкторе. Объекты базового типа могут инициализироваться при определении в классе.

Ниже приведен пример класса с некоторыми полями:

class Data

{ int god;

byte dn, ms;

}

Для данного класса можно создать объект (выделить место в памяти для его компонент).

Data dt = new Data();

При обращении к полям созданного объекта, как и в С++, префиксом является имя объекта. Например:

d.god = 2008;

d.dn = 3;

d.ms = 10;

Как отмечалось ранее, полем объекта может быть ссылка на другой объект, содержащий поля.

class Week

{ char day;

}

class Data

{ int god;

byte dn, ms;

Week wd;

} Data dt = new Data();

Для доступа к полю day, объекта dt используются «соединяющие точки»:

dt.wd.day = 10;

Класс Data предназначен только для хранения данных, в нем не имеется методов, работающих с его полями.

Методы в Java определяют сообщения, которые объекты могут принимать и могут описываться только как компоненты класса.

Общая структура метода имеет следующий вид:

Type methodName( список аргументов )

{ // Тело метода

}

Type - это тип возвращаемого методом значения. Список аргументов описывает типы и имена, передаваемые в метод.

Обращение к методу объекта осуществляется, так же как к его полю − через префикс. Вызов метода часто называется посылкой сообщения объекту.

Модификаторы доступа

В языке C++ определены три модификатора доступа: private, protected и public. Язык Java обладает тем же набором модификаторов, но расширенным модификатором friendly. Однако все эти модификаторы ведут себя несколько по-другому, в основном из-за того, что в семантику Java были введены новые модули - упаковки (packages). Модификаторы доступа стали контекстно-зависимыми, т. е. зависят от того, размещается ли класс, к которому производится доступ, в одной упаковке с вызывающим его классом или нет.

Модификатор рublic. Любой класс может обратиться к данным и методам другого класса из любого компьютера сети, если он имеет этот модификатор доступа. Объявление компонент-данных класса с модификатором public нарушает принцип инкапсуляции.

Модификатор рrotected, позволяет обращаться к данным и методам класса лишь самому классу, классам, хранящимся в этом же пакете, и унаследованным классам того же пакета. Обычно такой модификатор применяют для того, чтобы закрыть доступ к данным и методам для тех классов, которые не состоят в "родственных отношениях" с защищаемым классом. Обратите внимание на то, что в Java классы считаются родственными, не только при наследовании, но и одного пакета.

Модификатор рrivate запрещает доступ к его компоненте методам не являющимся методами класса в котором эта компонента объявлена. Доступ к ней возможен только из методов этого класса. При отсутствии наследования правильнее использовать модификатор private, а не protected.

Модификатор friendly. В Java существует еще один модификатор доступа - friendly. Этот модификатор не пишется явно, но подразумевается, если не указан никакой другой модификатор доступа. При использовании friendly к данным может обратиться любой класс и метод пакета, в котором содержится класс.