Объекты являются основной частью объектно-ориентированного программирования. Крайне важно знать, как они работают.

При создании программного обеспечения мы перемещаем и манипулируем большим количеством данных. Данные поступают в разных формах, поэтому нам нужен способ представления наших данных в нашем коде. Java предоставляет 8 основных примитивных типов данных.

byte       for whole numbers
short      for whole numbers
int        for whole numbers
long       for whole numbers
float      for floating numbers
double     for floating numbers
char       for single character(ACII table)
boolean    logical - can be true or false

Используя эти примитивы, мы можем представлять целые числа, числа с плавающей запятой, отдельные символы и логические логические типы.

Этих примитивов недостаточно для обработки всех типов данных, которые нам понадобятся для написания наших приложений. Вот почему у нас есть объекты. Например, наше приложение работает с данными учащихся. Было бы здорово иметь некоторый тип данных, в котором мы могли бы представить студента как сущность. Мы можем сделать это, создав собственный класс Student с его свойствами и методами.

Класс и объекты в Java

Объект в Java — это реализация класса. Класс дает нам шаблон или мы можем сказать структуру для нашего объекта. В классе мы можем объявить свойства и методы объекта.

Класс — это синяя печать для объектов. Объект является фактической реализацией своего класса.

public class Student {
    public String firstName;
    public String lastName;
    public int age;
}

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

public static void main(String[] args) {
    Student student = new Student();
    System.out.println(student); // Student@4617c264
}

Вот как мы создаем объект из класса. Ключевое слово new всегда используется для создания объектов в Java.

Student student эта часть называется ссылочным типом, а student является фактической ссылкой. Мы назвали это ссылкой, потому что Java хранит объекты в памяти и указывает на них, используя ссылку. Даже когда мы попытаемся напечатать его, мы получим что-то вроде этого Student@4617c264 . Это адрес, по которому находится фактический объект. Используя эту ссылку, мы можем получить доступ к свойствам и методам объекта.

Здесь мы создали два объекта. В памяти у нас будут разные места для этих объектов, и каждая ссылка будет указывать на свой объект.

Следует также отметить, что свойства объекта будут иметь значения по умолчанию, если ничего не назначено. Значение по умолчанию для объекта равно null, числовое значение по умолчанию — 0, а логическое значение по умолчанию — false.

Мы получаем доступ к свойствам объекта, используя имя ссылки и .. В приведенном выше примере мы присвоили значения нашему первому объекту и распечатали их после.

Разные объекты не связаны друг с другом. Поэтому, когда мы меняем firstName на student объект, это никак не повлияет на student1 объект. Хорошо, если переменная статическая, она принадлежит классу, а не конкретному объекту. Тогда это будет иметь эффект.

Поговорим о нестатических методах в классе. Очень часто методы объекта будут манипулировать свойствами объекта.

Последнее, что я хочу упомянуть, это статические свойства и методы в классе. Статические свойства принадлежат самому классу, а не конкретному объекту/экземпляру (даже если конкретный объект имеет доступ к статическим свойствам и методам). Правильный способ использования статических членов — по имени класса. Классы, состоящие из статических методов, обычно являются вспомогательными классами, они не служат типом данных, и мы не создаем из них объект (например, java.util.Arrays и java.util.Math). Существует много примеров гибридных классов, в которых члены статики и экземпляра вместе.

Конструктор на Java

Конструктор — это специальный метод для создания объекта.

public class Student {
   public String firstName;
   public String lastName;
   public int age;
   public Student(String firstName, String lastName, int age) {
      this.firstName = firstName;
      this.lastName = lastName;
      this.age = age;
   }
}

В приведенном выше примере у нас есть класс Student с одним конструктором и тремя аргументами.

  • Имя конструктора совпадает с именем класса.
  • конструктор может иметь аргументы так же, как и методы.
  • класс может иметь несколько конструкторов.

Теперь давайте посмотрим, как мы можем использовать наш конструктор.

  • new Student("John", "Doe", 25); эта часть использует наш конструктор. Это то же самое, что и с методами, если аргументы совпадают, будет вызван конструктор.
  • Свойства наших значений назначаются нашим конструктором, поэтому нам не нужно назначать одно за другим.

Из того же класса мы создаем объект, но не предоставили никаких аргументов, и он не компилируется. Причина, по которой он не компилируется, заключается в том, что нет конструктора, который бы соответствовал пустым аргументам.

Первоначально, когда мы создаем класс, конструктор по умолчанию будет предоставлен java. У конструктора по умолчанию есть какие-либо аргументы, и он пуст.

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

Мы можем просто добавить пустой конструктор в наш класс, чтобы решить эту проблему.

  • student использует конструктор с тремя аргументами.
  • student1 использует пустой конструктор без аргументов.

Вот и все, хорошего дня!

This article is part of the series of articles to learn Java programming language from Tech Lead Academy:
1. Introduction to programming 
2. OS, File, and File System
3. Working with terminal 
4. Welcome to Java Programming Language
5. Variables and Primitives in Java
6. Methods with Java
7. Java Math Operators and special operators
8. Conditional branching in Java
9. Switch statement in Java
10. Ternary operator in Java
11. Enum in Java
12. String class and its methods in Java
13. Loops in Java
14. Access modifiers in Java
15. Static keyword in Java
16. The final keyword in Java
17. Class and Object in Java
18. Object Oriented Programming in Java
19. OOP: Encapsulation in Java
20. Inheritance in Java
21. Abstraction in Java
22. Polymorphism in Java
23. Overriding vs Overloading in Java
24. OOP Design Principles in Java
25. Array in Java
26. Data Structures with Java
27. Collection framework in Java
28. ArrayList in Java
29. Set in Java
30. Map in Java
31. LocalDate in Java
32. Exception in Java
33. IO in Java
34. Design Patterns
35. Generics in Java
36. Multithreading in java
37. JUnit
38. Big O Notation for coding interviews
39. Top 17 Java coding interview questions for SDET