Классы являются основными единицами программирования в объектно-ориентированном программировании. В этом руководстве по Java вы научитесь писать классы и создавать новые объекты класса в Java.
1. Разница между классом и объектом
В Java объекты — это контейнеры, подобные структурам данных, которые имеют состояние и поведение. В идеале объекты представляют актеров в системе или приложении.
Например, в приложении по управлению персоналом основными действующими лицами являются Сотрудник, Менеджер, Отдел, Отчет и т. д.
Классы являются шаблоном, описывающим состояние и поведение его объектов. Класс может использоваться для создания нескольких объектов, которые похожи по структуре, но могут иметь разные состояния.
Объект — это экземпляр класса.
2. Как создать класс?
2.1 Синтаксис
Общий синтаксис объявления класса в Java выглядит следующим образом:
<<modifiers>> class <<class name>> {// fields and members of the class}
- Объявление класса может иметь ноль или более модификаторов.
- Ключевое слово class используется для объявления класса.
- <<имя класса>> — это определяемое пользователем имя класса, которое должно быть допустимым идентификатором.
- Каждый класс имеет тело, которое указывается внутри пары фигурных скобок({ … }).
- Тело класса содержит различные его компоненты, например поля, методы и т. д.
Например,
public class Main {// Empty body for now}
2.2 Типы занятий
В Java существует два типа классов:
- Абстрактный класс – Эти классы являются абстрактными. Это неполные классы. Это означает, что вы не можете создать экземпляр этого класса. Вы можете только расширить эти классы, чтобы завершить их спецификацию.
- Неабстрактный класс – Эти классы определяют свое полное состояние и поведение. Это полные классы. Вы можете создавать объекты этого класса.
3. Компоненты класса Java
В Java классы используются как шаблоны для создания объектов. Класс в Java может состоять из пяти основных компонентов. т.е.
- Поля
- Методы
- Конструкторы
- Статические инициализаторы
- Инициализаторы экземпляров
Поля и методы также известны как члены класса. Конструкторы и оба инициализатора используются во время инициализации класса, т.е. создания объектов с использованием шаблона класса.
Конструкторы используются для создания объектов класса. У нас должен быть по крайней мере один конструктор для класса(если мы не объявляем его явно, то JVM внедряет для нас конструктор по умолчанию).
Инициализаторы используются для инициализации полей класса. У нас может быть ноль или более инициализаторов статических или экземплярных типов.
3.1 Поля
Поля класса представляют свойства(также называемые атрибутами состояния) объектов этого класса. Поля объявляются внутри тела класса. Общий синтаксис объявления поля в классе:
<<modifiers>> <<data type>> <<field name>> = <<initial value>>;
Предположим, что каждый объект класса «Человек» имеет два свойства: имя и пол. Класс «Человек» должен включать объявления двух полей: одно для представления имени и одно для выражения пола.
public class Human {private String name;private String gender;}
Здесь класс Human объявляет два поля: имя и пол. Оба поля имеют тип String. Каждый экземпляр(или объект) класса Human будет иметь копию этих двух полей.
3.2 Методы или функции
Метод Java — это набор операторов, сгруппированных вместе для выполнения операций. Методы обычно используются для изменения состояния полей класса. Методы также могут использоваться для делегирования задач путем вызова методов в других объектах.
В Java методы могут –
- принять ноль или более аргументов
- вернуть void или одно значение
- быть перегруженным — это означает, что мы можем определить более одного метода с одинаковым именем, но разным синтаксисом
- быть переопределенным — это означает, что мы можем определять методы с одинаковым синтаксисом в родительских и дочерних классах
public class Human {private String name;private String gender;public void eat() {System.out.println("I am eating");}}
3.3.Конструкторы
Конструктор — это именованный блок кода, который используется для инициализации объекта класса сразу после создания объекта. Общий синтаксис для объявления конструктора:
<<Modifiers>> <<Constructor Name>>(<<parameters list>>) throws <<Exceptions list>> {// Body of constructor goes here}
- Конструктор может иметь модификатор доступа public, private, protected или default(без модификатора).
- Имя конструктора совпадает с простым именем класса.
- За именем конструктора следует пара открывающих и закрывающих скобок, которые могут включать параметры.
- При желании за закрывающей скобкой может следовать ключевое слово throws, за которым, в свою очередь, следует список исключений, разделенный запятыми.
- В отличие от метода, конструктор не имеет возвращаемого типа.
- Мы даже не можем указать void как возвращаемый тип для конструктора. Если есть какой-либо возвращаемый тип, то это метод.
- Помните, что если имя конструкции совпадает с простым именем класса, это может быть метод или конструктор. Если он указывает тип возвращаемого значения, это метод. Если он не указывает тип возвращаемого значения, это конструктор.
3.4 Блок инициализации экземпляра
Мы увидели, что конструктор используется для инициализации экземпляра класса. Блок инициализации экземпляра, также называемый инициализатором экземпляра, также используется для инициализации объектов класса.
Инициализатор экземпляра — это просто блок кода внутри тела класса, но вне любых методов или конструкторов. Инициализатор экземпляра не имеет имени. Его код просто помещается внутри открывающей и закрывающей фигурных скобок.
Обратите внимание, что инициализатор экземпляра выполняется в контексте экземпляра, а ключевое слово this доступно внутри инициализатора экземпляра.
public class Main{{//instance initializer block}}
- у нас может быть несколько инициализаторов экземпляров для класса.
- Все инициализаторы выполняются автоматически в текстовом порядке для каждого создаваемого нами объекта.
- Код для всех инициализаторов экземпляров выполняется до любого конструктора.
- Инициализатор экземпляра не может иметь оператора return.
- Он не может выдавать проверяемые исключения, если все объявленные конструкторы не перечислят эти проверяемые исключения в своем предложении throws.
public class Main {//instance initializer{System.out.println("Inside instance initializer");}//constructorpublic Main(){System.out.println("Inside constructor");}public static void main(String[] args) {new Main();}}
Вывод программы:
Inside instance initializerInside constructor
3.5 Статический блок инициализации
- Статический блок инициализации также известен как статический инициализатор.
- Он похож на блок инициализации экземпляра, за исключением того, что он используется для инициализации класса.
- Инициализатор экземпляра выполняется один раз для каждого объекта, тогда как статический инициализатор выполняется только один раз для класса, когда определение класса загружается в JVM.
- Чтобы отличить его от инициализатора экземпляра, нам нужно использовать ключевое слово static в начале его объявления.
- в классе может быть несколько статических инициализаторов.
- Все статические инициализаторы выполняются в том текстовом порядке, в котором они появляются, и выполняются до любых инициализаторов экземпляров.
Статический инициализатор не может выдавать проверяемые исключения. Он не может иметь оператор return.
public class Main {//static initializerstatic {System.out.println("Inside static initializer");}//constructorpublic Main(){System.out.println("Inside constructor");}public static void main(String[] args) {new Main();}}
Вывод программы:
Inside static initializerInside constructor
4. Как создать новый объект
В Java для создания объекта из класса используйте ключевое слово new вместе с одним из его конструкторов.
<<Class>> <<variable>> = new <<Call to Class Constructor>>;//e.g.Human human = new Human();
Помните, когда мы не добавляем конструктор к классу, компилятор Java добавляет его за нас. Конструктор, добавляемый компилятором Java, называется конструктором по умолчанию. Конструктор по умолчанию не принимает аргументов. Имя конструктора класса совпадает с именем класса.
За оператором new следует вызов конструктора класса, экземпляр которого создается. Оператор new создает экземпляр класса, выделяя память в куче.
5. Тип ссылки «null»
В Java есть специальный ссылочный тип, называемый null. У него нет имени. Поэтому мы не можем определить переменную ссылочного типа null. Ссылочный тип null имеет только одно значение, определенное Java, которое является литералом null. Это просто null.
Тип ссылки null совместим по назначению с любым другим типом ссылки. То есть, мы можем присвоить значение null переменной любого типа ссылки. На практике значение null, сохраненное в переменной типа ссылки, означает, что переменная ссылки не ссылается ни на какой объект.
// Assign the null value to johnHuman john = null; // john is not referring to any objectjohn = new Human(); // Now, john is referring to a valid Human object
Обратите внимание, что null — это литерал типа null. Мы не можем присвоить null переменной примитивного типа, и именно поэтому компилятор Java не позволяет нам сравнивать примитивное значение со значением null.
Вот и все, что касается этого базового руководства по созданию классов в Java.