Java является объектно-ориентированным языком, поэтому такие понятия как «класс» и «объект» играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.
Шаблоном или описанием объекта является класс, а объект представляет экземпляр этого класса. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке — наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного мозга и т.д. Есть некоторый шаблон — этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса.
Класс определяется с помощью ключевого слова сlass:
1 2 3 |
class Book{ } |
Вся функциональность класса представлена его членами — полями (полями называются переменные класса) и методами. Например, класс Book мог бы иметь следующее определение:
1 2 3 4 5 6 7 8 9 |
class Book{ public String name; public String author; public int year; public void Info(){ System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name, author, year); } } |
Таким образом, в классе Book определены три переменных и один метод, который выводит значения этих переменных
Кроме обычных методов в классах используются также и специальные методы, которые называются конструкторами. Конструкторы нужны для создания нового объекта данного класса и, как правило, выполняют начальную инициализацию объекта. Название конструктора должно совпадать с названием класса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Book{ public String name; public String author; public int year; Book(){ name = "неизвестно"; author = "неизвестно"; year = 0; } Book(String name, String author, int year){ this.name = name; this.author = author; this.year = year; } public void Info(){ System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name, author, year); } } |
Здесь у класса Book определено два конструктора. Первый конструктор без параметров присваивает неопределенные начальные значения полям. Второй конструктор присваивает полям класса значения, которые передаются через его параметры.
Так как имена параметров и имена полей класса в данном случае у нас совпадают — name, author, year, то мы используем ключевое слово this. Это ключевое слово представляет ссылку на текущий объект. Поэтому в выражении this.name = name;
первая часть this.name
означает, что name — это поле текущего класса, а не название параметра name. Если бы у нас параметры и поля назывались по-разному, то использовать слово this
было бы необязательно.
Мы можем определить несколько конструкторов для установки разного количества параметров и затем вызывать один конструктор из другого:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Book{ public String name; public String author; public int year; Book(String name, String author){ this.name = name; this.author = author; } Book(String name, String author, int year){ this(name, author); this.year = year; } } |
Например, у нас может сложиться ситуация, когда нам нужно установить только два параметра или только три, однако устанавливать в конструкторами с тремя параметрами все три поля класса не имеет смысла, так как мы можем передать две из них в другой конструктор класса, где и произойдет их установка. Вызов конструктор производится с помощью ключевого слова this
, после которого идет в скобках список параметров.
Создание объекта
Чтобы непосредственно использовать класс в программе, надо создать его объект. Процесс создания объекта двухступенчатый: вначале объявляется переменная данного класса, а затем с помощью ключевого слова new
и конструктора непосредственно создается объект, на который и будет указывать объявленная переменная:
1 2 |
Book b; // объявление переменной, которая еще не хранит ссылку на объект b = new Book(); // выделение памяти под объект Book |
После объявления переменной Book b;
эта переменная еще не ссылается ни на какой объект и имеет значение null
. Затем мы создаем непосредственно объект класса Book с помощью одного из конструкторов и ключевого слова new.
Инициализаторы
Кроме конструктора начальную инициализацию объекта вполне можно было проводить с помощью инициализатора объекта. Так, мы бы могли заменить конструктор без параметров следующим блоком:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class Book{ public String name; public String author; public int year; /*начало блока инициализатора*/ { name = "неизвестно"; author = "неизвестно"; year = 0; } /*конец блока инициализатора*/ Book(String name, String author, int year){ this.name = name; this.author = author; this.year = year; } } |
Программа с классами
Теперь используем класс в программе. Создадим в Intellij IDEA новый проект File => New Project. Назовем его, например, BookStore:
Итак, по умолчанию у нас в проекте создается папка src, давайте в ней создадим пакет bookstore и класс Book. Для этого нажмем на пакет bookstore правой кнопкой мыши и в появившемся контекстном меню выберем New-> Package…
Затем по аналогии создадим наш класс. В окне создания нового класса назовем его Book, а остальные опции оставим по умолчанию. После этого в пакет bookstore будет добавлен новый класс:
Изменим автоvfnbxtcrb сгенерированный код в файле Book.java на следующий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package bookstore; public class Book{ public String name; public String author; public int year; Book(){ name = "неизвестно"; author = "неизвестно"; year = 0; } Book(String name, String author, int year){ this.name = name; this.author = author; this.year = year; } public void info(){ System.out.printf("Книга '%s' (автор %s) была издана в %d году \n", name, author, year); } } |
Теперь перейдем к коду файла BookStore.java и изменим его следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package bookstore; public class BookStore { public static void main(String[] args) { Book b1 = new Book("Война и мир", "Л. Н. Толстой", 1869); b1.info(); Book b2 = new Book(); b2.info(); } } |
Если мы запустим код на выполнение, то консоль выведет нам информацию о книгах b1 и b2:
Книга ‘Война и мир’ (автор Л. Н. Толстой) была издана в 1869 году
Книга ‘неизвестно’ (автор неизвестно) была издана в 0 году