Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Богомазов шпоры.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.32 Mб
Скачать

Создание новых типов данных

Описание нового типа (класса) ( или определение)

class ATypeName { / *тело класса/*}

Теперь можно создать объект этого типа – объявление и создание объекта а

ATypeName a = new ATypeName ();

Поля и методы

Класс содержит следующие элементы (member – члены класса):

- поля (переменные) – (fields);

- методы (функции)- (methods).

Полем может быть:

- ссылка на объект;

- примитив.

Для каждого объекта отдельно от других объектов в своем блоке памяти хранятся поля.

Для каждого класса создается общий блок памяти один на все объекты этого класса для хранения методов и статических переменных.

Методы, аргументы и возвращаемые значения

Вызов метода – сообщение, принимаемое объектом. Синтаксис:

Возвращаемый тип имя Метода (список аргументов) -это сигнатура метода

{

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

}

Методы могут быть только частями класса. Вне классов (как в С++) методов быть не может.

Метод вызывается для объекта:

имя Объекта . имя Метода (арг1, арг2…)

Например:

int x = a.f(5); // посылка сообщения объекту а

В списке аргументов: типы предаваемых объектов и их имена (ссылки). Внутри класса -определение метода.

Ключевое слово static

Применяется:

  1. когда нужно иметь данные, общие для всех объектов класса

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

Статический метод или данные можно вызвать, не создавая объекты класса (нестатические можно вызвать только для объекта!)

class StaticTest {

static int i=47;

}

……………………………………..

StaticTest st1 = new StaticTest ();

StaticTeat st2 = new StaticTest ();

st1.i // i содержит 47 (один блок памяти на все объекты)

st2.i //i содержит 47 (один блок памяти на все объекты)

…………………………………..

Обращение по имени класса:

StaticTest.i++;

st1.i - теперь 48

st2.i - теперь 48

Статические методы

ИмяКласса.Метод();

class Incrementable

{

static void increment ()

{

StaticTest.i++;

}

}

Теперь его можно вызвать:

Incrementable.increment ();

или можно вызвать как обычно, через ссылку на объект

Incrementable sf = new Incrementable ();

sf.increment ();

Некоторые библиотечные классы Math, Arrays, Collections – содержат только статические методы.

Конструктор гарантирует инициализацию

Конструктор – метод, который вызывается при создании нового объекта. Автоматически вызывается при создании нового объекта. Имя совпадает с именем класса, он не возвращает ничего! Ссылку возвращает оператор new.

Пример

class Rock {

Rock () {

System.out.println (“Rock ”);

}

}

Протестируем класс:

public class RockTest {

public static void main (String[] args) {

for (int i=0; i<10; i++)

new Rock (); //безымянный объект

}

}

Будет 10 раз напечатано ”Rock ”

Конструктор может иметь аргументы

Rock (int i) {

System.out.print( “Rock ” + i + ” “ );

}

Конструктор по умолчанию

Это конструктор без аргументов.

Если конструкторов в классе не объявили, то конструктор по умолчанию будет создан компилятором.

class Bird {}

Bird b = new Bird ();

Если есть хотя бы один конструктор, то компилятор конструктор по умолчанию не создает!

Конструктор копии

(копирующий конструктор)

Создает новый объект – копию параметра.

class Box {

double width;

double height;

double depth;

Box (Box ob) { // конструктор копии

width = ob.width

height = ob.height

depth = ob.depth

}

Box () { // конструтор по умолчанию

width = 1.0;

height = 1.0;

depth = 1.0;

}

}

Box myBox1 = new Box();

Инициализация членов класса

Локальные переменные не инициализируются по умолчанию.

Примитивные типы –инициализируются нулями.

Ссылочные значения поля класса инициализируются – null.

Инициализировать поля можно:

  1. явно

  2. инициализация конструктором

Особенности конструктора

  1. Конструктор имеется в любом классе. Если он не описан, компилятор сам создаст default constructor (он не делает ничего, кроме вызова конструктора суперкласса- super() ). Если есть хоть 1 конструктор – default-конструктор компилятор не сделает.

  2. Конструктор выполняется автоматически при создании экземпляра класса, после выделения памяти и инициализации полей.

  3. Конструктор не возвращает значения. Может иметь модификаторы: -public, -private, -protected или не иметь (пакетный доступ).

  4. Конструктор (фактически – статический метод). Но методом не считается, его нельзя наследовать или переопределить, но можно перегрузить.

  5. Тело конструктора может начинаться с:

super(…) - вызов конструктора суперкласса;

this (…) - вызов другого конструктора.

Если super (…) - нет, то вначале все равно выполняется super(); по умолчанию (хотя бы для Object). То есть если класс будет базовым, желательно написать для него конструктор по умолчанию.

Можно писать new Dog().voice();(приоритет у new выше,чем у .)