
- •Оглавление
- •Предисловие
- •Введение
- •Глава 1. Средства разработки приложений
- •1.1. Системные требования
- •1.2. Введение в NetBeans
- •1.3. Установка NetBeans
- •1.4. Первый запуск NetBeans
- •1.5. Интерфейс пользователя
- •1.6. Настройки среды
- •1.7. Создание проекта
- •Глава 2. Язык программирования Java
- •2.1. Первое приложение
- •2.2. Метод main
- •2.3. Основные понятия языка Java
- •2.3.1. Переменные и константы
- •2.4. Примитивные типы данных
- •2.4.1. Целые и символьные типы(byte, short, char, int, long)
- •2.4.2. Логический тип Boolean
- •2.4.3. Вещественные типы (float и double)
- •2.5. Ссылочные типы
- •2.6. Выражения и операторы
- •2.6.1. Логические операторы
- •2.6.2. Целочисленные битовые операторы
- •2.6.3. Арифметические операторы
- •2.6.4. Приоритеты выполнения операторов
- •2.6.5. Преобразование типов
- •2.6.6. Оболочечные классы
- •2.7. Класс Math
- •2.8. Сложные типы данных и строки
- •2.8.1. Массивы
- •2.8.2. Строки
- •2.9. Управляющие конструкции
- •2.9.1. Составной оператор
- •2.9.2. Условный оператор if
- •2.9.3. Оператор выбора
- •2.9.4. Операторы цикла
- •2.9.5. Операторы перехода
- •Глава 3. Введение в ООП
- •3.1. Основные принципы ООП
- •3.2. Состав структура и основные свойства классов
- •3.2.1. Описание полей класса
- •3.2.2. Оператор new
- •3.2.3. Описание методов
- •3.2.4. Модификаторы
- •3.2.5. Конструкторы
- •Совмещение методов
- •Глава 4. Рефакторинг
- •Глава 5. Ввод и вывод в Java
- •Глава 6. Графический интерфейс пользователя GUI
- •6.1. Компоненты и контейнеры
- •6.2. Встроенные пакеты GUI классов на основе библиотеки awt
- •6.2.1. Метка Label
- •6.2.2. Кнопка Button
- •6.2.3. Кнопка выбора CheckBox
- •6.2.4. Радио-кнопка Radiobutton
- •6.2.5. Поле ввода TextField
- •6.2.6. Поле ввода TextArea
- •6.3. Использование визуального редактора для проектирования ГИП
- •6.4. Графика в Java
- •6.5. Обработка событий
3.2. Состав структура и основные свойства классов
Эта лекция начинается с продолжения темы прошлой лекции – имена и доступ к именованным элементам языка. Необходимо рассмотреть механизм разграничения доступа в Java, как он устроен, для чего применяется. Затем будут описаны ключевые правила объявления классов.
Основнным элементом объектно-ориентированного программирования в языке Java является класс. Поэтому важно научиться правильно создавать, расширять а также описывать собственные классы в программе. Уметь использовать готовые классы ранне созданные другими, что может заметно сократить время отведанное на разработку и упростить саму программу.
Для того, чтобы создать класс, достаточно иметь исходный файл, в котором будет присутствовать ключевое слово class, затем надо указать имя (допустимый идентификатор) и пару круглых скобок в которых содержится тело класса.
Class Human {
}
При сохранении файла с классом надо помнить, что имя файла и класса должны совпадать с учетом регистра символов.
Класс это шаблон для создания объекта. Класс определяет структуру обьъекта и его методы, которые образуют его функциональность (интерфейс). В процессе выполнения программы компилятор использует определения классов для создания экземпляров, представляющих машинную реализацию классов. Экземпляры, представляют реальные объекты которые содержаться в оперативной памяти ЭВМ. Термины «экземпляр», «представитель», «объект» обозначают в нашем случае одно и тоже понятие и далее мы будем их использовать как синонимы.
Пример.1. Приведем общую форму определения классов
Class имя_класса {
тип имя_переменной1; тип имя_переменной2;
...
тип имя_метода1 {список_параметров тело_метода
}
тип имя_метода2 {список_параметров тело_метода
}
}
Пример.2. Общую форму с использованием наследования от класса
Class имя_класса extends имя_суперкласса {
тип имя_переменной1; тип имя_переменной2;
...
тип имя_метода1 {список_параметров тело_метода
}
тип имя_метода2 {список_параметров тело_метода
}
}
Пример.3. Общую форму с использованием наследования от нескольких интерфейсов
Class имя_класса implements имя_интерфейса1, имя_интерфейса2 ... { тип имя_переменной1; тип имя_переменной2;
...
тип имя_метода1 {список_параметров тело_метода
}
тип имя_метода2 {список_параметров тело_метода
}
}
Ключевое слово extends (расширение) означает что определяемый класс является наследником, потомком (подклассом) cупер_класса, и расширяет определенным образом его. На верхнем уровне иерархии классов Java находится класс Object. Все остальные классы являются прямыми или косвенными потомками этого класса. Если класс является прямым наследником Object то в описании он опускается, как это приведено в первом примере. Класс содержит определенный набор переменных и методов. Методы являются аналогами процедур или функции в процедурном программировании, и выполняют определенную последовательность действий, при этом в конце либо возвращают некоторое значение, либо нет. Поля, аттрибуты класса, свойства используют для описания наборов данных класса, это константы или переменные, инкапсулированные в классе, доступ к которым как правило, осуществляется с помощью специальных методов
— аксессоров (англ. аccess - доступ), подробнее о которых описано в конце параграфа. В некоторых случаях, когда доступ к переменным и константам открыт для других классов, то говорят не о полях класса, а просто о переменных или константах. Таким образом, методы задают «поведение» объекта, а поля характеризуют его «состояние».
Ключевое слово implements (наследование) означает что вводимый класс является наследником, нескольких интерфейсов что
позволяет реализовать в Java концепцию множественного наследования.
Помимо всего этого нужно помнить что классы – это так называемые эталоны, на основе которых и создаются объекты. Созданием объектов (экземпляров) занимаются конструкторы класса.
3.2.1. Описание полей класса
Данные инкапсулируются в класс, путем объявления переменных между фигурными скобками ограничивающими тело класса. Эти переменные объявляются как и локальные переменные рассмотренные ранее, и могут иметь как примитивные так и ссылочные тип. Единственное отличие, что их надо определять вне границ методов, в том числе и метода main.
Пример.
Class Point { int i,j;
}
Поля создаются путем объявления их внутри класса, точнее в начале тела класса. В описании могут использоваться модификаторы
public, private, protected, static, final, transient, volatile,
которые задают уровень доступа (будут расмотрены подробнее в следующих пунктах). После модификаторов указывается имя поля. Так же при объявлении можно присвоить начальное значение используюя знак «=». Если начальное значение поля не объявлено, оно принимается равным по умолчанию:
-для числовых типов – 0;
- для логического типа boolean – false;
-для ссылок – null;
3.2.2.Оператор new
Оператор new создает экземпляр указанного класса и возращает ссылку на вновь созданный объект.
Пример. 1. Создание экземпляра Point и присваение ссылки на объект переменной p.
Point p=new Point();
Можно создать несколько ссылок на один и тот же объект, тем самым создав несколько объектов на основе одного класса. Оператор «точка» используется для доступа к полям и методам класса.
Пример. 2.
Class Points {
public static void main(string args[]) Point p1=new Point();
Point p2=new Point(); Point p3=new Point();
p1.x=10;
p1.y=4;
p2.x=0;
p2.x=3;
p3.x=22;
p3.x=8;
}
3.2.3. Описание методов
Методы это подпрограммы которые задают поведение объекта, и используются для манипулированиями данными (полями) объектов. Методы описываются внутри классов, как и переменные (поля) классов. Объявление метода состоит из заголовка и тела метода. Заголовок состоит из:
модификаторов (доступа в том числе);
типа возвращаемого значения или ключевого слова void;
имени метода;
списка аргументов в круглых скобках (аргументов может не быть); Заголовок начинается с перечисления модификаторов. Для методов
доступен любой из трех возможных модификаторов доступа public, private, protected, которые описанны в следующем пунктах.
Кроме того, существует модификатор final, который говорит о том, что такой метод нельзя переопределять в наследниках. Можно считать, что все методы final-класса, а также все private-методы любого класса, являются final. Также поддерживается модификатор native. Метод, объявленный с таким модификатором, не имеет реализации на Java. Он должен быть написан на другом языке (C/C++, Fortran и т.д.) и добавлен в систему в виде загружаемой динамической библиотеки (например, DLL для Windows). В специальной спецификация JNI (Java Native Interface), описываются правила создания и использования native-методов.
После перечисления модификаторов указывается имя (простое или составное) типа возвращаемого значения; это может быть как примитивный, так и объектный тип. Если метод не возвращает никакого значения, указывается ключевое слово void.
Затем определяется имя метода. Указанный идентификатор при объявлении становится простым именем метода. Областью видимости метода является все объявление тела класса.
Аргументы метода перечисляются через запятую. Для каждого указывается сначала тип, затем имя параметра. В отличие от
объявления переменной здесь запрещается указывать два имени для одного типа. Если аргументы отсутствуют, указываются пустые круглые скобки. Одноименные параметры запрещены. Создание локальных переменных в методе, с именами, совпадающими с именами параметров, запрещено. Для каждого аргумента можно ввести ключевое слово final перед указанием его типа. В этом случае такой параметр не может менять своего значения в теле метода (то есть участвовать в операции присвоения в качестве левого операнда).
В Java все параметры примитивных типов передаются по значению, а это означает что у метода нет доступа к исходной переменной используемой в качестве параметра. Необходимо помнить, что все объкты передаются по ссылке, поэтому имеется возможность изменять содержимое объекта на который ссылается переменная.
Пример. 1. Использование методов. class Point{
int x; int y;
public void init(int a, int b){ x=a;
y=b;
}
}
Класса Point (точка), имеет два поля x, y и один метод init, c помощью которого определяются начальные положения точки. Пример. 2. Использование методов.
Класса Point (точка), имеет два поля x, y и два метода moveTo, getPosi-
tion .
class Point{
int x; int y;
public void moveTo(int a, int b){ x=a;
y=b;
}
public void getPosition(){ System.out.println(“Координата x: ”+x); System.out.println(“Координата y: ”+y);
}
}
Поля x и y характеризуют текущее положение точки – ее координаты, например, на карте. Метод moveTo() использует эти данные, «перемещает» точку в указанное место. Метод getPosition() в консольное окно выдает текущее положение точки.
Вскобках первого метода вы видите int а, int b это означает, что
уметода есть параметры, которые должны быть определены при вызове этого метода. Например если мы хотим изменить положение точки, то необходимо вызвать этот метод и указать в скобках две
целочисленные (integer) координаты нового положения.
Создадим новый файл, в котором у нас будет класс Main:
class Main{
public static void main(string[] args){ Point p1 = new Point(); p1.getPosition();
}
}
В методе main() создается новый объект p1 типа Point и осуществляется вызов метода getPosition(), для данного экземпляра. После компиляции и запуска программы на кансоли будет выведено следующее «0 0» - значения полей x и y экземпляра p1. Поскольку при декларации мы не указали начальные значения этих переменных (не инициализировали их), их значения принимаются равными нулю по умолчанию.
Теперь перед вызовом метода p1.getPosition(); вставьте следующую строку
p1.moveTo(2,7);
После следующего запуска программы на консоли вы увидите значения
«2 7».
Таким образом, вначале осуществляется вызов метода, который меняет поля объекта на те значения, которые указаны в качестве параметров, затем производится вывод на консоль изменившихся значений координаты точки.
Теперь можно выделить несколько основных особенностей работы
сметодами и полями:
●Создаются методы путем объявления их внутри класса в следующем порядке:
-вначале указывается модификатор(ы) – public, private, protected, static, final, abstract, synchronized, native, strictfp;
-далее следует тип возвращаемого значения – boolean, double, int, string и др., если же метод в результате выполнения операций не возвращает никакого значения, указывается вместо типа слово void;
-после указания модификаторов и типа возвращаемого значения указывается имя метода, которое принято начинать с прописной (малой) буквы, в отличии от имя класса, которое начинается с заглавной буквы;
-далее, сразу после имени в круглых скобках указываются параметры метода и их тип например public final method1(int a, double b){ }; Параметров может и не быть, в таком случае остаются просто пустые круглые скобки.
-и в завершении, в фигурных скобках записывается тело метода.