Что такое класс в Java
2026-02-21 14:49 Diff

#статьи

  • 25 окт 2019
  • 0

ООП — это то, на чём держится вся разработка на Java. С помощью объектов и классов можно создать любой функционал быстрее.

 vlada_maestro / shutterstock

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

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

В программе, написанной по принципам ООП, отдельные компоненты рассматриваются как предметы из реального мира, такие как дом, дерево, кот, человек и даже Java-разработчик. У каждого объекта есть свои атрибуты. Вот какими они будут у принтера: цвет, марка, скорость печати, объём оставшейся краски и так далее.

Также принтеру свойственно определённое «поведение»: печать, сканирование, копирование, проверка наличия краски, подключение к Wi-Fi и так далее — всё это называется методами.

Каждый принтер уникален, поэтому обладает своим идентификатором, по которому к нему можно обратиться, чтобы узнать или изменить тот или иной атрибут, а также вызвать метод:

Объект.метод() Объект.атрибут = значение;

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

Допустим, существует класс Бумага, которому прописываются свои параметры и методы: цвет, цена, размер, толщина и так далее. Каждый отдельный объект является экземпляром класса. Например, можно создать объект листБумаги1, листБумаги2, листБумаги3 — у всех них будут одинаковые атрибуты и поведение, но разные значения:

листБумаги1.размер = А4; листБумаги1.цена = 2;  листБумаги2.размер = А5; листБумаги2.цвет = серый;

Эту бумагу можно, например, передать объекту класса Принтер, чтобы её распечатать:

принтерВОфисе.печать(текст, листБумаги1);

Без объектов нам бы пришлось создавать отдельные функции и работать с ними. Сейчас мы можем написать такой код:

Принтер принтерВОфисе = новый Принтер(127.0.0.1, А4); Бумага листБумаги1 = новая Бумага(А4); Строка текст = «Привет, мир!»; ПринтерВОфисе.печать(текст, листБумаги1);

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

Без классов нам бы пришлось создавать множество негруппированных переменных, в которых хранилась бы вся эта информация:

Строка адресПринтераВОфисе = 127.0.0.1; Число размерПринтераВОфисе = А4; Число размерЛиста1 = А4; напечататьТекст(текст, адресПринтераВОфисе, размерПринтераВОфисе, размерЛиста1) { если (размерЛиста1 == размерПринтераВОфисе) { отправитьТекст(текст, адресПринтераВОфисе); } }

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

Пришлось бы несколько раз дублировать одинаковые фрагменты кода, чтобы написать что-то. А ООП позволяет сократить код, а значит, быстрее разрабатывать программы, а также читать и переписывать их.

Создавая программу, нужно объявить класс с её именем, а потом добавить метод main — из него начинается работа приложения:

public class ClassesProgram { public static void main(String[] arg) { System.out.println("Hello, World!"); } }

В Java всё, что не является объектом, является классом. Даже System, с помощью которого выводится текст, — это объект.

Можно создать переменные для этого класса — атрибуты:

public class ClassesProgram { public static int num1 = 25; public static int num2 = 2; public static void main(String[] arg) { int sum = num1 * num2; System.out.println("sum: " + sum); } }

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

Пока не обращайте внимания на слова public и static — про них мы расскажем позже. Так же можно создавать методы, похожие на main. Для них укажите модификаторы доступа (public и static), возвращаемый тип и название:

public class ClassesProgram { public static int GetCube(int x) { return x * x * x; } public static void main(String[] arg) { int cube = GetCube(5); System.out.println("Cube: " + cube); } }

Запустив программу, мы увидим результат работы метода GetCube ():

Пока всё работает в пределах основного класса, но можно создать и другие. Для наглядности мы будем делать это на примере кода мессенджера. Здесь будут использоваться классы Сообщение (Message) и Пользователь (User).

Чтобы начать работать с классами, создайте папку для своего проекта: например, 01. Добавьте в неё ещё два каталога — src и bin. В первом будут храниться исходники, а во втором — скомпилированные файлы.

Теперь скомпилировать файл можно так:

javac -d bin src/ClassesProgram.java

А запустить — так:

java -cp ./bin ClassesProgram

Все классы должны находиться в отдельных файлах. которые нужно объединить в пакет. Его название должно выглядеть так: com.sitename.packagename. Хотя вы можете обойтись и без домена packagename. Чтобы создать пакет, сначала в папке src создайте следующую структуру:

src\packagename\component\file.java

В нашем случае для основного файла путь будет таким:

src\mypackege\classesprogram\ClassesProgram.java

В тот же каталог поместите User.java и Message.java. После этого в начало каждого файла добавьте такую строчку:

package mypackage.classesprogram;

Она означает, что этот код относится к определённому пакету. И чтобы воспользоваться каким-то классом, нужно добавить в начало основной программы несколько команд:

import mypackage.classesprogram.User; import mypackage.classesprogram.Message;

Теперь можно компилировать программу с помощью команды:

javac -sourcepath ./src -d bin src/mypackage/classesprogram/ClassesProgram.java

Если вы всё сделали правильно, в папке bin появится такая же структура, как в src. Вот код корневого файла приложения:

package mypackage.classesprogram; //Добавляем файл в пакет //Подключаем отдельные классы import mypackage.classesprogram.User; import mypackage.classesprogram.Message; //Подключаем пакет для работы с пользовательским вводом import java.util.Scanner; public class ClassesProgram { public static void main(String[] arg) { Scanner in = new Scanner(System.in); System.out.println("Success!"); } }

Теперь этот код можно запустить, прописав такую команду:

java -classpath ./bin mypackage.classesprogram.ClassesProgram

Вот что выведет консоль:

Этот процесс можно ускорить, если скачать IDE. Там для добавления нового класса достаточно будет выполнить несколько действий в графическом интерфейсе. Например, в Eclipse можно нажать File -> new -> class — этого будет достаточно.

Но если вы пока не уверены, что хотите продолжать работать на Java, можете поэкспериментировать в консоли.

Теперь можно приступить к созданию классов. Начнём с пользователя:

package mypackage.classesprogram; public class User { public String name; public int age; }

Слово public выступает модификатором доступа — он определяет, откуда будет доступен компонент. Для класса можно указать следующие модификаторы:

  • public — доступно в любых частях программы (применимо и к другим компонентам);
  • default — доступно только классам из того же пакета.

Теперь в основном файле можно создать объект класса User:

Scanner in = new Scanner(System.in); User user1 = new User(); System.out.println("Enter your name: "); user1.name = in.nextLine(); System.out.println("Enter your age: "); user1.age = in.nextInt(); System.out.println(user1.name + " is " + user1.age + " years old!");

Мы указали для объекта user1 класс User, а после оператора присваивания указали ключевое слово new и запустили конструктор (об этом позже). Вот как будет выполнена программа:

Создание объекта называется объявлением экземпляра класса — тут же можно использовать конструктор, чтобы сразу задать значения атрибутам.

Для этого нужно в теле класса создать метод с таким же названием, что и класс. Ему можно передать аргументы, с которыми можно провести операции:

public class User { public String name; public int age; public User(String name, int age) { this.name = name; this.age = age; System.out.println("User " + this.name + " was created. His (her) age is " + this.age); } }

Обратите внимание, что внутри класса атрибуты вызываются с помощью ключевого слова this. Это нужно для того, чтобы компилятор не путался, с какой переменной работать — например, в случае, если у аргумента такое же имя, как и у атрибута:

Теперь, чтобы создать объект, нужно немного поменять код:

System.out.println("Enter your name: "); String name = in.nextLine(); System.out.println("Enter your age: "); int age = in.nextInt(); User user1 = new User(name, age);

Дальше можно создать класс для работы с сообщениями:

package mypackage.classesprogram; import mypackage.classesprogram.User; public class Message { private String text; private User from; private User to; public Message(String text, User from, User to) { this.text = text; this.from = from; this.to = to; System.out.println(this.from.name + " wrote to " + this.to.name + ": " + this.text); } }

Обратите внимание, что в этот раз для атрибутов from и to мы задали модификатор private, а в качестве типа стоит User. Private позволяет закрыть доступ к элементам извне — то есть их можно менять только внутри методов самого класса.

Это позволяет защитить атрибуты от незапланированного доступа. Если же вы хотите получать или менять атрибуты, можно воспользоваться getter и setter. Это специальные методы, которые позволяют обратиться к защищённой переменной:

public String getText() { return this.text; } public void setTo(User to) { this.to = to; }

Теперь можно написать код, который будет создавать сообщение:

System.out.println("Enter your name: "); String name = in.nextLine(); System.out.println("Enter your age: "); int age = in.nextInt(); User user1 = new User(name, age); User user2 = new User("John", 20); System.out.println("Enter your message: "); String text = in.nextLine(); Message msg = new Message(text, user1, user2);

Вот как это работает:

Так с помощью классов и объектов можно быстро создать какую-нибудь программу, используя минимум кода. Можно также добавить класс Chat, в котором будут храниться все сообщения от одного пользователя к другому — для этого нужно освоить не только классы, но и коллекции.

Это лишь малая часть того, как происходит работа с объектами и классами. Существуют ещё такие понятия, как наследование, полиморфизм, инкапсуляция и многое другое.

Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу