Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MIR-Lektsii_Java.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
206.85 Кб
Скачать

Лекция 3. Классы и методы в Java. Операция финализации в Java. План

  1. Классы в Java. Определение класса и создание объекта класса.

  2. Методы в Java.

  3. Конструкторы в Java.

  4. Перегрузка методов.

  5. Перегрузка конструкторов.

  6. Использование объектов в качестве параметров.

  7. Использование ключевого слова this.

  8. Сбор мусора в Java. Операция финализации.

1.

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

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

class <имя_класса> {

<тип_переменной> <переменная1>;

...

<тип_переменной> <переменнаяN>;

<тип_метода> <имя_метода1>([<параметры>]) {

<тело_метода>

}

...

<тип_метода> <имя_методаN>([<параметры>]) {

<тело_метода>

}

}

Весь программный код находится в методах. Методы и переменные являются членами класса.

Переменные, описанные в классе, – экземпляры переменных, т.к. каждый экземпляр класса содержит копию этих переменных.

Создание объекта класса происходит в две стадии:

      1. объявляем переменную данного типа, она просто ссылается на класс;

      2. физическая копия объекта создается и осуществляется связывание ее с объявленной переменной при помощи оператора new. Оператор new динамически размещает объект в памяти и возвращает ссылку на него.

Описание класса:

Box mybox;

mybox = new Box();

или

Box mybox = new Box();

где Box() – вызов конструктора класса.

2.

Тип метода – тип данных, который возвращает данный метод (простой тип или тип созданного класса).

Если метод не возвращает объекта, то тип void.

Если тип метода указан не void, то в теле методы должна быть указана следующая команда:

return <значение>;

Параметр метода – последовательность типов и идентификаторов через запятую.

3.

Конструктор инициализирует объект во время создания. Имя конструктора совпадает с именем класса.

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

Это происходит потому, что конструктор класса неявно возвращает значение, тип которого соответствует данному классу.

Пример:

class Box{

double width, height, depth;

Box(double w, double h, double d){

width=w;

height=h;

depth=d;

}

double volume(){

double v;

v=width*height*depth;

return v;

}

}

class BoxDemo{

public static void main(String args[]){

Box mybox1=new Box(1,2,3);

Box mybox2=new Box(2,3,4);

double vol;

vol=mybox1.volume();

System.out.println(“Объем 1”);

vol=mybox2.volume();

System.out.println(“Объем 2”);

}

}

4.

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

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

Пример:

void test(){

System.out.println(“Без параметров”);

void test(int a){

System.out.println(“a=”+a);

double test(double a){

return a*a;

При работе программы можно вызвать любую версию метода:

do.test();

do.test(5);

do.test(5.5);

Если не удается найти точное соответствие типов параметров, то Java прибегает к преобразованию типов, после чего вызывается соответствующая версия метода.

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

5.

Возвращаясь к нашему примеру, может возникнуть ситуация задания коробки без параметров или куба с требованием трех параметров.

Перегрузка конструкторов позволяет решить эти проблемы.

К уже имеющемуся конструктору добавляем:

Box(){

width=-1;

height=-1;

depth=-1;

}

Box(double l){

width=height=depth=l;

}

6.

В метод в качестве параметров могут передаваться и объекты.

Пример:

class Test{

int a,b;

Test(int a, int b){

a=i;

b=j;

}

boolean equals(Test ob){

if (ob.a==a && ob.b==b)

return true;

else return false;

}

}

class Test1{

public static void main(String args[]){

Test ob1=new Test(1,2);

Test ob2=new Test(1,2);

Test ob3=new Test(1,3);

ob1.equals(ob2);

ob1.equals(ob3);

}

}

Описанный метод equals в классе Test сравнивает объект, в котором он был вызван, с объектом, переданным в качестве параметра.

Использование объектов в качестве параметров полезно в случае, когда необходимо создать объект – точную копию уже созданного. Для этого необходимо написать конструктор, принимающий в качестве параметра объект собственного класса.

Пример:

Box(Box ob){

width=ob.width;

height=ob.height;

depth=ob.depth;

}

Чтобы его использовать, необходимо:

Box copy1=new Box(ob1);

Существует два способа передачи аргумента подпрограмме:

      1. передача по значению – копирует в формальный параметр подпрограммы значение аргумента, т.е. все изменения с параметром подпрограммы не влияют на аргумент, используемый при вызове;

      2. передача по ссылке – в качестве параметра передается ссылка на аргумент, а не его значение; в подпрограмме эта ссылка используется для доступа к настоящему аргументу, используемому при вызове, т.е. все изменения с параметром влияют на указанный при вызове аргумент.

В Java используются оба эти способа: аргументы простого типа передаются по значению.

Пример:

class Test{

void meth(int i, int j){

i*=2; j/=2;

}

}

class Test1{

public static void main(String args[]){

Test ob=new Test();

int a=5; b=2;

ob.meth(a,b);

System.out.println(“a=”+a+“ b=”+b);

}

}

Все объекты передаются по ссылке, т.е. метод, получивший в качестве аргумента объект, будет ссылаться на тот аргумент, на который ссылается объект. Все изменения, сделанные в этом методе, повлияют на этот объект.

class Test{

int a,b;

Test(int i, int j){

a=i; b=j;

}

void meth(Test ob){

ob.a*=2;

ob.b/=2;

}

}

class Test1{

public static void main(String args[]){

Test ob=new Test(5,2);

ob.meth(ob);

System.out.println(“a=”+ob.a+“ b=”+ob.b);

}

}

7.

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

В Java нельзя объявить две одноименные локальные переменные с одни и теми же вложенными областями действия. Т.к. this позволяет ссылаться непосредственно на объект, его можно использовать для разрешения всех конфликтов иен, которые огли бы возникнуть между переменными.

class Box{

double width, height, depth;

Box(double width, double height, double depth){

this.width=width;

this.height=height;

this.depth=depth;

}

}

8.

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

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

В классе можно описать метод finalize(), который будет автоматически вызываться перед удалением объекта данного класса. Он не возвращает никакого значения и имеет доступ protected. Это предотвращает доступ к данному методу всем программам, определенным за пределами данного класса.

Спецификация доступа в Java:

  1. public означает, что к данному члену класса можно обратиться в любом месте программы;

  2. private означает, что член класса доступен только членам этого же класса;

  3. protected указывает, что член класса доступен внутри любого подкласса данного класса.

Если доступ не указан явно, то это означает, что он находится между public и protected.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]