Классы и объекты в Java
Класс — это «чертёж», по которому создаются однотипные сущности. В нём описываются поля (состояние) и методы (поведение). Объект — конкретный экземпляр класса, занимающий память во время выполнения программы.
Если провести аналогию с электроникой: класс Led описывает, что у светодиода есть номер пина и состояние (горит/нет), а каждый физический светодиод на плате — это отдельный объект класса Led со своими значениями полей.
В Java объект создаётся оператором new, который вызывает конструктор класса и возвращает ссылку на новый объект. Ссылки хранятся в переменных, а сами объекты живут в куче (heap).
Синтаксис объявления класса
public class ИмяКласса {
// поля
тип имяПоля;
// конструктор (не обязателен)
public ИмяКласса(...) { ... }
// методы
тип имяМетода(...) { ... }
}
Создание объекта:
ИмяКласса obj = new ИмяКласса(...);
Пример 1. Минимальный класс
public class Led {
int pin;
boolean isOn;
public static void main(String[] args) {
Led led = new Led();
led.pin = 13;
led.isOn = false;
System.out.println("Светодиод на пине " + led.pin + ", включён: " + led.isOn);
}
}
Output:
Светодиод на пине 13, включён: false
Пример 2. Несколько объектов одного класса
public class Sensor {
String name;
int value;
public static void main(String[] args) {
Sensor temp = new Sensor();
temp.name = "DHT22";
temp.value = 24;
Sensor light = new Sensor();
light.name = "BH1750";
light.value = 540;
System.out.println(temp.name + " = " + temp.value);
System.out.println(light.name + " = " + light.value);
}
}
Output:
DHT22 = 24
BH1750 = 540
Пример 3. Методы как поведение объекта
public class Motor {
String name;
int speed;
void setSpeed(int s) {
if (s < 0) s = 0;
if (s > 255) s = 255;
speed = s;
}
void info() {
System.out.println(name + ": скорость " + speed);
}
public static void main(String[] args) {
Motor left = new Motor();
left.name = "Левый";
left.setSpeed(300); // будет ограничено 255
Motor right = new Motor();
right.name = "Правый";
right.setSpeed(120);
left.info();
right.info();
}
}
Output:
Левый: скорость 255
Правый: скорость 120
Пример 4. Ссылки на объекты
public class Led {
int pin;
public static void main(String[] args) {
Led a = new Led();
a.pin = 5;
Led b = a; // обе переменные ссылаются на один и тот же объект
b.pin = 9;
System.out.println("a.pin = " + a.pin);
System.out.println("b.pin = " + b.pin);
}
}
Output:
a.pin = 9
b.pin = 9
Пример 5. Несколько классов в одной программе
class Battery {
int voltage;
}
public class Robot {
String name;
Battery battery;
public static void main(String[] args) {
Robot r = new Robot();
r.name = "Phobo";
r.battery = new Battery();
r.battery.voltage = 12;
System.out.println("Робот " + r.name + ", напряжение: " + r.battery.voltage + "В");
}
}
Output:
Робот Phobo, напряжение: 12В
Подводные камни
Поле, не инициализированное явно, получает значение по умолчанию:
0для чисел,falseдляboolean,nullдля ссылок. Локальные переменные таких значений по умолчанию не имеют.Led b = a;копирует ссылку, а не объект. Изменения черезbотражаются и черезa.Имя файла
.javaдолжно совпадать с именемpublicкласса.Обращение к полю объекта по
null-ссылке вызываетNullPointerException.В одном файле может быть только один
publicкласс, остальные классы — package-private.
См. также
Примечание
Лицензия и источники
Концепция описана на основе официального Java Tutorial от Oracle (https://docs.oracle.com/javase/tutorial/), Oracle Free Documentation License. Перевод, примеры и пояснения — © AlashEd Wiki.