Главная » Java, Структуры данных и алгоритмы » Объекты Java

0

В Java создание нового объекта определенного класса осуществляется использованием оператора new. Оператор new создает новый объект указанного класса и возвращает ссылку на него. Ниже приводится выражение, содержащее оператор new:

new <class_type>([param, param, …])

Зачастую такое выражение встречается в операции присваивания, которая записывается следующим образом:

<variable_name> = new <class_type>([param, param, . ]),

При этом <variable__name> используется для обозначения идентификатора, определяющего переменную объекта, то есть ссылку на только что созданный объект. Имя <class_type> обращается к особому методу — конструктору (имя которого совпадает с именем класса), инициализирующему создание объекта (более подробно конструктор класса будет рассмотрен в разделе 1,2). Одновременно <class__type> описывает тип класса. Список параметров в операторе new не является обязательным. После вызова оператора new для типа класса происходят три события:

•          Новый объект динамически размещается в памяти, а для всех его полей устанавливаются по умолчанию стандартные значения. Переменные объекта получают по умолчанию значение null, а поля всех базовых типов данных обнуляются (то есть получают значение О (число нуль)), за исключением логических полей boolean (значения которых,по умолчанию — false).

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

•          После выполнения конструктора оператор new возвращает ссылку (то есть адрес в памяти) на созданный объект. Если выражение имеет форму операции присваивания, то этот адрес присваивается переменной объекта, то есть она становится ссылкой на созданный объект.

В следующем операторе показано создание нового объекта класса Point с помощью конструктора класса, который использует в качестве аргументов (параметров) координаты точки; переменная myPoint становится ссылкой на данный объект.

myPoint = new Point (3,6);

Числовые объекты

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

Базовый тип

Имя класса

Пример создания

Пример доступа

byte

Byte

n = new Byte((byte)34)

n.byteValue()

short

Short

n = new Short((short)100)

n shortValue()

int

Integer

n = new lnteger(1045)

n.intValue()

long

Long

n = new Long(10849L)

n.longValue()

float

Float

n = new Float(3.934F)

n.floatValue()

double

Double

n = new Double(3.934)

n doubleValue()

Таблица 1.2. Числовые классы в Java. Для каждого класса указан соответствующий базовый тип, а также примерные выражения для создания и доступа к объектам этих классов. В каждой строке переменная п объявляется с именем соответствующего класса

Строковые объекты

Строка представляет собой последовательность символов алфавита, который представляет собой множество символор. Обращение к каждому символу с строки s может быть осуществлено по его индексу в строке, который равен количеству символов в строке s, предшествующих с (индекс первого символа равен 0). В Java в качестве алфавита, используемого для описания строк, выступает международный алфавит Unicode с 16-битовой кодировкой, которая описывает большинство используемых письменных языков. В других языках программирования используется, как правило, менее обширный алфавит ASCII (одно из подмножеств Unicode, основанное на 7-битовом кодировании). В дополнение к этому Java описывает особый встроенный класс объектов, называемых строковыми объектами.

Пусть Р = Р[0] Р[ 1] Р[2]… Р[т – 1] есть строка из т символов. Например, Р может быть строкой «hogs and dogs», длина которой равна 13 символам, находящейся на каком-либо Web-сайте. В данном случае Р [2] = «g», а Р[5] = «а». Р может быть и строкой «GGTAATAGTTAATCCG» длиной 16 символов, которая является частью прикладной программы исследования цепочки ДНК.

Строки могут быть длинными и короткими. При обработке строк происходит объединение коротких строк в длинные. Для объединения строк используется операция конкатенации, при которой строка

Р= />[0] Р[ 1]… Р[т- 1]

и строка

Q= Ql0] Gill— Q[m- 1]

объединяются в новую строку Р Ч- Q, содержащую следующую последовательность символов:

Р[0] Р[ 1]… Р[т- 1] Q[0] Q[ 1]…                 1]

В Java для выполнения конкатенации двух строк используется знак «+». Таким -образом, операцию присваивания можно (и даже желательно) записать в следующем виде:

String S = "kilo" + "meters"

Данный оператор описывает переменную s, которая является ссылкой на объект класса String и присваивает ему строку символов "kilometers" (более подробно операция присваивания и приведенное выше выражение будут рассмотрены ниже). Каждый объект в Java обладает встроенным методом toString, который возвращает строку, отображающую объект. В большинстве случаев требуется соответствующее описание характеристики класса String; класс String и его «родственник» класс StringBuffer подробно рассматриваются в разделе 11.1.

Переменные экземпляра класса

Классы в Java могут содержать переменные экземпляра класса или поля. Указанные переменные представляют данные, связанные с объектами класса, и могут быть двух типов: базовый тип (например, int, float, double) или ссылочный тип, в который входят классы (например, класс String), интерфейсы (см. раздел 2.4) и массивы (см. раздел 1.5). Переменные экземпляра класса объявляются следующим образом:

[<variable_modifier>] <v&riable_typte> <variable_name> [-(<lnitial_value>],

Правила написания параметра <variable_name> аналогичны написанию других идентификаторов языка Java. Параметр <variable_type> может быть базового типа, в этом случае переменная содержит данные указанного типа, либо именем класса, указывающим на то, что переменная является ссылкой на объект данного класса. Дополнительный параметр <initial__value> должен соответствовать типу переменной. Ниже приводится пример, в котором описывается класс Gnome, содержащий описания некоторых переменных экземпляра класса:

class Gnome {

// переменные экземпляра класса protected String name;

protected int age;

protected Gnome gnome_buddy,

private boolean magical;

public double height = 2.6; // инициализация

public static final int MAX-HEIGHT = 3; // константа

// ниже следует описание метода .

}

В этом и других примерах применены комментарии, предназначаемые для людей и не обрабатываемые Java-компилятором. В Java используются два вида комментариев — блоки комментариев и строчные комментарии, и в том и в другом случае содержащийся в них текст не воспринимается компилятором. Блоки комментариев начинаются сочетанием символов /[2] и заканчиваются */• Строчный комментарий начинается сочетанием символов // и следует до конца строки. Например: f*

* Это блок комментария.

7

// Это строчный комментарий.

Обратите внимание на значения полей в примере описания класса Gnome. Переменные age, magical и height — базового типа, переменная name является ссылкой на экземпляр встроенного класса String, а поле gnome_buddy представляет собой ссылку на объект описываемого класса. При объявлении поля МАХ_НЕЮНТ используются различные модификаторы, описывающие «переменную», которая, по сути, является константой. Ниже приведено точное значение этих и других модификаторов переменных, используемых в Java.

Модификаторы переменных

Область видимости переменных экземпляра класса определяется применением следующих модификаторов переменных:

Кроме модификаторов, определяющих область видимости переменных, существуют модификаторы использования:

•       static: этот модификатор объявляет статические переменные (переменные класс’а), которые используются для объявления поля, общего для всего класса, а не для определенного экземпляра класса. Статические переменные содержат общую, «глобальную» информацию о классе (например, статическая переменная может быть использована для сохранения общего числа созданных объектов Gnome). Статические переменные существуют, даже если не было создано ни одного экземпляра их класса;

•       final: модификатор помечает окончательное поле, которому должно быть присвоено первоначальное значение, после чего новое значение ему уже не может быть присвоено. Если поле имеет исходный тип, то оно содержит константу (например, константа MAX_HEIGHT в примере описания класса Gnome). Если поле объекта конечно, оно всегда будет ссылаться на один и тот же объект (даже при изменении его внутреннего состояния).

Значения констант, связанных с классом, объявляются с помощью модификаторов static и final. Однако, прежде чем приступить к подробному изучению переменных экземпляров класса и их использованию (см. раздел 1.3), рассмотрим методы, используемые для обработки переменных экземпляров класса.

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии