Одной из особенностей, делающих Java такой мощной, является ее объектно-ориентированная структура. Это означает, что Java использует классы и объекты для создания более масштабируемого, модульного и организованного кода. Тем не менее, это сложная концепция для новичка. Итак, в этом посте мы рассмотрим, как использовать классы в Java.
Читайте также: Курс для начинающих по Java — бесплатное и исчерпывающее руководство по основам Java
Что такое классы в Java?
Если вы не знакомы с концепцией объектно-ориентированного программирования, это лучшее место для начала. Если вы уже знаете, что такое класс, и просто хотите изучить синтаксис Java, вы можете пропустить этот раздел.
Читайте также: Как подключаться к веб-API из Android-приложения
Итак, что такое класс? Класс — это фрагмент кода, который создает объект. Объект — это концептуальная «вещь», которая существует исключительно в терминах описывающих ее данных. У объектов есть свойства (называемые переменными) и функции (называемые методами). Это то же самое, что и объект в реальном мире: например, у собаки есть свойства (коричневый мех, четыре ноги, рост 30 см) и функции (лай, сон, переворачивание, какашки).
Единственная разница между объектом в реальном мире и объектом в коде состоит в том, что объект кода нуждается в физическом теле.
Например, персонаж в игре вполне может быть объектом. У него есть переменные (скорость движения, здоровье, спрайты) и методы (выстрелить, двигаться влево, двигаться вправо, взорваться). Этот персонаж «существует» в коде независимо от того, видим мы его на экране или нет. Таким образом, это объект данных.
Экземпляры объектов
Класс — это фрагмент кода, создающий объект данных. Таким образом, наш класс Personage используется для персонажей. Но это следующее важное различие, которое необходимо сделать: код Personage не контролирует ни одного персонажа. Скорее, он говорит компьютеру выделить данные, которые будут представлять персонажа. И мы можем запустить этот код несколько раз, чтобы создать несколько персонажей.
Так что в Super Mario маловероятно, что для каждого Гумбы в игре будет отдельный фрагмент кода. Вместо этого, вероятно, существует один класс Гумба, который может создать столько Гумба, сколько необходимо. Это делает код более эффективным.
Метафора, которая часто используется здесь, состоит в том, что классы в Java — это «чертежи», тогда как объекты — это отдельные примеры этого продукта.
И мы называем каждый отдельный продукт, созданный данным классом, экземпляром этого объекта.
Как использовать классы в Java
Итак, имея все это в виду, как вы собираетесь использовать классы в Java?
Вот очень простой класс «PersonageEnemy», который присваивает значения таким переменным, как «здоровье», и дает ему возможность стрелять в нас:
class PersonageEnemy{
static int speed = 3;
static int health = 5;
static int xPosition = 20;
static int yPosition = 100;
public static void shoot() {
System.out.println("Пиу пиу!");
}
}
Теперь мы можем вызвать наш класс PersonageEnemy из нашего «Main» кода (который сам по себе является классом), просто сказав:
class Main {
public static void main(String[] args) {
Personage.shoot();
}
}
Итак, что здесь происходит? Сначала мы создаем наш класс, написав «class», за которым следует имя нашего класса. В Java считается лучшей практикой использовать верблюжий регистр при выборе имен классов с заглавными буквами первого слова. Верблюжий регистр означает, что вы удаляете все пробелы и вместо этого используете заглавные буквы для каждого слова. Следовательно: «PersonageEnemy», а не «Personage_enemy» или «personageenemy». Это необязательно, но способствует читабельности кода, особенно если над ним будет работать кто-то еще.
Затем мы создаем глобальные статические переменные, а затем публичный статический метод «shoot», который будет выводить «Пью-пью!» на экран.
Слово «public» означает, что к методу можно получить доступ извне класса. Это означает, что мы можем вызвать этот метод из нашего основного класса, но нам нужно указать Java, где искать. Вот почему мы говорим «PersonageEnemy.shoot();».
Обратите внимание, что многие операторы в Java используют точки таким же образом (например, System.out.println). Это потому, что классы в Java абсолютно необходимы для того, как это работает. Многие операторы, которые вы регулярно используете, на самом деле являются методами, принадлежащими встроенным классам!
Создание экземпляров объектов
Причина, по которой мы используем ключевое слово «static» при обращении к переменным и методам в том, что мы не хотим привязывать наш класс к какому-либо конкретному экземпляру объекта. Прямо сейчас наш класс PersonageEnemy не может создать несколько персонажей с разными значениями здоровья и скорости.
Чтобы изменить это, нам нужно удалить ключевое слово static и создать один или несколько экземпляров объекта:
class Main {
public static void main(String[] args) {
PersonageEnemy perEn1 = new PersonageEnemy();
PersonageEnemy perEn2 = new PersonageEnemy();
System.out.println(Integer.toString(perEn1.health));
System.out.println(Integer.toString(perEn2.health));
}
}
class PersonageEnemy{
int speed = 3;
int health = 5;
int xPosition = 20;
int yPosition = 100;
public static void shoot() {
System.out.println("Пиу Пиу!");
}
}
Этот код создает два экземпляра PersonageEnemy и, таким образом, может показать нам работоспособность каждого из них. Затем мы можем повлиять на здоровье только одного из наших персонажей следующим образом:
class Main {
public static void main(String[] args) {
PersonageEnemy perEn1 = new PersonageEnemy();
PersonageEnemy perEn2 = new PersonageEnemy();
perEn1.getHit();
System.out.println(Integer.toString(perEn1.health));
System.out.println(Integer.toString(perEn2.health));
}
}
class PersonageEnemy{
int speed = 3;
int health = 5;
int xPosition = 20;
int yPosition = 100;
public static void shoot() {
System.out.println("Пиу пиу!");
}
public void getHit() {
health--;
}
}
Обратите внимание, что метод «getHit» не включает ключевое слово «static». Это означает, что метод будет воздействовать на экземпляр объекта, так что будет затронуто здоровье только определенного персонажа. Поэтому мы не можем сказать: PersonageEnemy.getHit(); без предварительного создания нового объекта.
Надеюсь, теперь все это начинает обретать смысл, и вы видите, как мы можем использовать классы в Java для создания множества экземпляров одного и того же «объекта», которые могут работать одновременно!
Как использовать конструкторы в Java
Последнее, что вам нужно знать об использовании классов в Java, — это роль конструктора.
Конструктор — это особый тип метода в классе, который используется для «создания» этого класса путем определения его значений сразу после его создания. Это может понадобиться, например, для создания нескольких персонажей, каждый из которых имеет разное количество силы. В качестве альтернативы, если вы создавали клиентскую базу данных, вы могли бы использовать ее для создания новых записей, каждая из которых имела другое имя, номер телефона и т. д.
Метод конструктора должен иметь то же имя, что и класс. Затем нам нужно передать аргументы (переменные), которые мы можем использовать для определения значений, которые мы хотим установить во время инициализации. Затем нам нужно убедиться, что мы добавляем эти переменные в скобки при создании новых экземпляров объектов.
Окончательный код выглядит так:
class Main {
public static void main(String[] args) {
PersonageEnemy perEn1 = new PersonageEnemy(3, 5, 20, 100);
PersonageEnemy perEn2 = new PersonageEnemy(3, 27, 20, 100);
perEn1.getHit();
System.out.println(Integer.toString(perEn1.health));
System.out.println(Integer.toString(perEn2.health));
}
}
class PersonageEnemy{
public int speed;
public int health;
public int xPosition;
public int yPosition;
public PersonageEnemy(int badGuySpeed, int badGuyHealth, int badGuyxPosition, int badGuyyPosition) {
speed = badGuySpeed;
health = badGuyHealth;
xPosition = badGuyxPosition;
yPosition = badGuyyPosition;
}
public static void shoot() {
System.out.println("Пиу Пиу!");
}
public void getHit() {
health--;
}
}
Вывод
Итак, это все, что вам нужно знать об использовании классов в Java! Это концепция высокого уровня, с которой вы усвоили, так что похлопайте себя по спине! Если вы чувствуете себя комфортно с классами и объектами, скорее всего, вы готовы продолжить свое обучение.
Далее: Kotlin vs Java для Android: ключевые отличия