Понятие и определение класса
Класс – это шаблон для объекта. Объект – это экземпляр класса. Данные класса называются переменными экземпляра. Каждый объект содержит собственную копию этих переменных. Метод предназначен для обработки данных. Определение класса:
class classname {
type instance-variable1;
type instance-variable2;
// …
type instance-variableN;
type methodname1 (parameter-list) {
// тело метода
}
type methodname2 (parameter-list) {
// тело метода
}
//…
type methodnameN(parameter-list) {
// тело метода
}
}
Рассмотрим пример класса, с помощью которого определяется минимальное и максимальное число.
class MinMax {
int x;
int y;
public int max(){
if(x>y) return x;
else return y;}
public int min(){
if(x<y) return x;
else return y;}
}
Для определения экземпляра класса используется синтаксис:
ИмяКласса имяпеременной;
имяпеременной = new ИмяКласса (параметры инициализации);
или
ИмяКласса имяпеременной = new ИмяКласса (параметры инициализации);
Членами класса могут быть:
• поля;
• методы;
• внутренние типы (классов и интерфейсов;
• конструкторы;
• инициализаторы;
• статические инициализаторы.
Модификаторы класса
public – класс доступен для использования, наследования вне зависимости от пакета или от каталога; public-классы должны храниться в файлах с именем имя_класса.java.
friendly – модификатор класса по умолчанию, если модификатор не определен явно для класса. Такой класс доступен только для объектов, находящихся в том же пакете. Вне пакета он выступает как private.
final – класс не может быть наследован, т.е. иметь подклассов.
abstract – класс, в котором объявлен хотя бы один абстрактный метод. Для таких классов нельзя создавать объекты. Такие классы используются для производных классов, а также для организации стандартизированных интерфейсов.
abstract class Myclass {
abstract void actMet();
}
Объявление объектов и операция new
Получение объектов класса − это двухшаговый процесс. Во-первых, нужно объявить переменную типа «класс». Она не определяет объект. Это просто переменная, которая может ссылаться на объект. Во-вторых, нужно получить актуальную, физическую копию объекта и назначать ее этой переменной. Это можно сделать с помощью операции new. Операция new распределяет динамически (т.е. во время выполнения) память для объекта и возвращает ссылку на нее. Данная ссылка является адресом ячейки памяти, выделенной объекту вышеуказанной операцией. Затем эта ссылка сохраняется в переменной. Таким образом, в Java все объекты класса должны быть распределены динамически.
Ниже приведен пример, в котором создается объект типа Box двумя способами
Первый вариант комбинирует два шага, как это было вначале описано, второй пошагово создает объект типа Box.
Метод main
Итак, виртуальная машина реализуется приложением операционной системы и запускается по обычным правилам. Программа, написанная на Java, является набором классов. Требуется некая входная точка, с которой должно начинаться выполнение приложения. Такой входной точкой, по аналогии с языками C/C++, является метод main(). Для объявления метода main() используется следующий синтаксис:
public static void main(String[] args) {}
Модификатор static позволяет вызвать метод main(), не создавая объектов. Метод не возвращает никакого значения, хотя в C есть возможность указать код возврата из программы. В Java для этой цели есть метод System.exit(), который закрывает виртуальную машину и имеет аргумент типа int.
Аргументом метода main() является массив строк. Он заполняется дополнительными параметрами, которые были указаны при вызове метода.
Пример демонстрирует вывод в консоль параметров, переданных в метод main. Для запуска примера необходимо передать сами параметры, например
HelloWorld
Если вышеприведенный модуль компиляции сохранен в файле Test.java, который лежит в директории test\first, то вызов компилятора записывается следующим образом:
javac test\first\Test.java
А вызов виртуальной машины:
java test.first.Test
Конструкторы
Конструктор – это тот же метод класса, обладающий некоторыми особенностями:
• имеет такое же название, как и класс;
• вызывается сам;
• не возвращает никакого значения.
Ниже продемонстрирован пример перегрузки конструктора.
// перегрузка конструктора
class worker
{ private int Age;
public String Name;
public worker() // конструктор без параметров
{ Age = 20;}
public worker(int newAge, String newName)
{ Age = newAge;
Name = newName; }
public int getAge()
{return Age;}
};
class worker_pub
{ public static void main(String args[])
{ worker wrk1 = new worker( );
worker wrk2 = new worker(40, "Petrov");
System.out.println(wrk1. getAge()+wrk1.Name);
System.out.println(wrk2. getAge()+wrk2.Name); } }
20null
40Petrov
Использование атрибутов доступа
Рассмотрим классы в том же пакете. Внутри данного пакета любой класс имеет прямой доступ к имени любого другого класса, например для объявления переменных или типов параметров методов. Но переменные и методы, которые являются членами этого другого класса, не обязательно доступны. Их доступность управляется атрибутами доступа. Существуют четыре возможности при определении атрибута доступа для члена класса (включая неопределение ничего), и все они дают различные результаты. В таблице показано, как атрибуты доступа, заданные для члена класса, определяют части среды Java, откуда к ним можно получить доступ.
На рисунках приведена графическая интерпретация таблицы.
| Атрибут | Разрешенный доступ |
| Отсутствие атрибута доступа | Из любого класса в том же пакете |
| public | Из любого класса откуда угодно |
| private | Никакого доступа вне класса |
| protected | Из любого класса в том же пакете и из любого подкласса где угодно |
Атрибуты доступа в рамках пакета:

Атрибуты доступа для нескольких пакетов:






