- •Java - объектно-ориентированный язык
- •Виртуальная Java-машина.
- •Алфавит языка Java
- •Типы данных
- •Числа высокой точности
- •Переменные в Java
- •Объявление переменной
- •Область действия и время жизни переменной
- •Операции в Java
- •Арифметические операции
- •Логические операции
- •Побитовые операции
- •Операции сдвига
- •Тернарный оператор ?:
- •Оператор запятая
- •Одномерные массивы
- •Многомерные массивы
- •Функции
- •Класс Поля и методы
- •Модификаторы доступа
- •Инициализация и очистка
- •Перегрузка методов
- •Ключевое слово this
- •Вызов конструктора из конструктора
- •Использование объектов в качестве параметров
- •Ключевое слово static
- •Спецификатор final
- •Вложенные и внутренние классы
- •Сборщик «мусора»
- •Как работает сборщик мусора
- •Наследование
- •Основы наследования
- •Использование ключевого слова super
- •Использование super для вызова конструктора суперкласса
- •Использование super для доступа к скрытым членам суперкласса
- •Конструкторы при наследовании
- •Динамическая диспетчеризация методов
- •Абстрактные классы
- •Использование final с наследованием
- •Использование final для отказа от переопределения
- •Использование final для отмены наследования
- •Класс Object
- •Пакеты и интерфейсы Пакеты
- •Оператор package
- •Оператор import
- •Уровни доступа.
- •Интерфейсы
- •Оператор implements
- •Частичные реализации
- •“Множественное” наследование в Java
- •Конфликты имен при комбинировании интерфейсов
- •Расширение интерфейса
- •Группировка констант
- •Инициализирование полей в интерфейсах
- •Вложенные интерфейсы
- •Стандартный ввод/вывод
- •Чтение из стандартного ввода
- •Замена System.Out на PrintWriter
- •Первое приложение Java
- •Исключительные ситуации. Обработка исключений
- •Типы исключений
Многомерные массивы
Многомерный массив в 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 к данным может обратиться любой класс и метод пакета, в котором содержится класс.