Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница30 из 67
1   ...   26   27   28   29   30   31   32   33   ...   67

Разработка классов на Java


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

Вероятно, наиболее важное свойство класса то, что он определяет новый тип данных.

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

Общая форма класса


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

Как будет показано в дальнейшем, код класса определяет интерфейс к его данным.

Для объявления класса служит ключевое слово class. Использованные до сих пор классы в действительности представляли собой очень ограниченные примеры полной формы. Классы могут быть (и обычно являются) значительно более сложными. Упрощенная общая форма определения класса имеет следующий вид:

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

тип переменная_экземпляра1;

тип переменная_экземпляра2;

// ...

тип переменная_экземпляраN;

тип имя_метода1(список_параметров) {

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

}

тип имя_метода2(список_параметров) {

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

}

// ...

тип имя_методаN(список_параметров) {

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

}

}

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

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

Все методы имеют ту же общую форму, что и метод main(), который мы использовали до сих пор. Однако большинство методов не будут указаны как static или public. Обратите внимание, что общая форма класса не содержит определения метода main(). Классы Java могут и не содержать этот метод. Его обязательно указывать только в тех случаях, когда данный класс служит начальной точкой программы. Более того, аплеты вообще не требуют использования метода main().

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

Простой класс


Изучение классов начнем с простого примера. Ниже приведен код класса Box (Параллелепипед), который определяет три переменных экземпляра: width (ширина), height(высота) и depth (глубина). В настоящий момент Box не содержит никаких методов (но вскоре мы добавим в него метод).

class Box {

double width;

double height;

double depth;

}

Как уже было сказано, класс определяет новый тип данных. В данном случае новый тип данных назван Box. Это имя будет использоваться для объявления объектов типа Box. Важно помнить, что объявление class создает только шаблон, но не действительный объект. Таким образом, приведенный код не приводит к появлению никаких объектов типа Box.

Чтобы действительно создать объект Box, нужно использовать оператор, подобный следующему:

Box mybox = new Box(); // создание объекта mybox типа Box

После выполнения этого оператора mybox станет экземпляром класса Box. То есть он обретет “физическое” существование. Но пока можете не задумываться о нюансах этого оператора.

Повторим еще раз: при каждом создании экземпляра класса мы создаем объект, который содержит собственную копию каждой переменной экземпляра, определенной классом. Таким образом, каждый объект Box будет содержать собственные копии переменных экземпляра width, height и depth. Для получения доступа к этим переменным применяется операция точки (.). Эта операция связывает имя объекта с именем переменной экземпляра. Например, чтобы присвоить переменной width объекта mybox значение 100, нужно было бы использовать следующий оператор:

mybox.width = 100;

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

Ниже приведена полная программа, в которой используется класс Box.

/* Программа, использующая класс Box.

Назовите этот файл BoxDemo.java

*/

class Box {

double width;

double height;

double depth;

}

// Этот класс объявляет объект типа Box.

class BoxDemo {

public static void main(String args[]) {

Box mybox = new Box();

double vol;

BookNew_JAVA-7.indb 143 02.06.2007 1:06:46

144 Часть I. Язык Java

// присваивание значений переменным экземпляра mybox

mybox.width = 10;

mybox.height = 20;

mybox.depth = 15;

// вычисление объема параллелепипеда

vol = mybox.width * mybox.height * mybox.depth;

System.out.println("Объем равен " + vol);

}

}

Файлу этой программы нужно присвоить имя BoxDemo.java, поскольку метод main() определен в классе, названном BoxDemo, а не Box. Выполнив компиляцию этой программы, вы убедитесь в создании двух файлов .class: одного для Box и одного для BoxDemo. Компилятор Java автоматически помещает каждый класс в отдельный файл с расширением .class. В действительности классы Box и BoxDemo не обязательно должны быть объявлены в одном и том же исходном файле. Каждый класс можно было бы поместить в отдельный файл, названный соответственно Box.java и BoxDemo.java.

Как было сказано ранее, каждый объект содержит собственные копии переменных экземпляра. Это означает, что при наличии двух объектов Box каждый из них будет содержать собственные копии переменных depth, width и height. Важно понимать, что изменения переменных экземпляра одного объекта не влияют на переменные экземпляра другого. Например, в следующем программе объявлены два объекта Box:

// Эта программа объявляет два объекта Box.

class Box {

double width;

double height;

double depth;

}

class BoxDemo2 {

public static void main(String args[]) {

Box mybox1 = new Box();

Box mybox2 = new Box();

double vol;

// присваивание значений переменным экземпляра mybox1

mybox1.width = 10;

mybox1.height = 20;

mybox1.depth = 15;

//* присваивание других значений переменным

экземпляра mybox2's */

mybox2.width = 3;

mybox2.height = 6;

mybox2.depth = 9;

// вычисление объема первого параллелепипеда

vol = mybox1.width * mybox1.height * mybox1.depth;

System.out.println("Объем равен " + vol);

// вычисление объема второго параллелепипеда

vol = mybox2.width * mybox2.height * mybox2.depth;

System.out.println("Volume is " + vol);

}

}

Как было сказано ранее, каждый объект содержит собственные копии переменных экземпляра. Это означает, что при наличии двух объектов Box каждый из них будет содержать собственные копии переменных depth, width и height. Важно понимать, что изменения переменных экземпляра одного объекта не влияют на переменные экземпляра другого. Например, в следующем программе объявлены два объекта Box:

// Эта программа объявляет два объекта Box.

class Box {

double width;

double height;

double depth;

}

class BoxDemo2 {

public static void main(String args[]) {

Box mybox1 = new Box();

Box mybox2 = new Box();

double vol;

// присваивание значений переменным экземпляра mybox1

mybox1.width = 10;

mybox1.height = 20;

mybox1.depth = 15;

//* присваивание других значений переменным

экземпляра mybox2's */

mybox2.width = 3;

mybox2.height = 6;

mybox2.depth = 9;

// вычисление объема первого параллелепипеда

vol = mybox1.width * mybox1.height * mybox1.depth;

System.out.println("Объем равен " + vol);

// вычисление объема второго параллелепипеда

vol = mybox2.width * mybox2.height * mybox2.depth;

System.out.println("Volume is " + vol);

}

}

Эта программа генерирует следующий вывод:

Объем равен 3000.0

Объем равен 162.0

Как видите, данные объекта mybox1 полностью изолированы от данных, содержащихся в объекте mybox2.
1   ...   26   27   28   29   30   31   32   33   ...   67


написать администратору сайта