Методы в Java
Метод — это именованный блок кода, который описывает поведение объекта или класса. С помощью методов мы говорим объекту «сделай что-то» или спрашиваем «какое у тебя сейчас значение?».
Сигнатура метода состоит из: модификаторов (public, private, static), типа возвращаемого значения, имени, списка параметров. Если метод ничего не возвращает, тип результата — void. Если возвращает значение — обязателен return.
Внутри метода доступно ключевое слово this — ссылка на текущий объект. Через него обращаются к полям, когда имена параметров совпадают с именами полей.
Синтаксис
модификаторы тип имяМетода(параметры) {
// тело
return значение; // если тип не void
}
Пример 1. Метод без параметров и без возврата
public class Led {
int pin = 13;
void on() {
System.out.println("LED " + pin + " -> ON");
}
void off() {
System.out.println("LED " + pin + " -> OFF");
}
public static void main(String[] args) {
Led led = new Led();
led.on();
led.off();
}
}
Output:
LED 13 -> ON
LED 13 -> OFF
Пример 2. Метод с параметрами
public class Motor {
String name = "Левый";
void setSpeed(int speed) {
if (speed < 0) speed = 0;
if (speed > 255) speed = 255;
System.out.println(name + ": скорость = " + speed);
}
public static void main(String[] args) {
Motor m = new Motor();
m.setSpeed(100);
m.setSpeed(300);
m.setSpeed(-50);
}
}
Output:
Левый: скорость = 100
Левый: скорость = 255
Левый: скорость = 0
Пример 3. Метод с возвращаемым значением
public class Sensor {
int raw = 512;
double toVoltage() {
return raw * 5.0 / 1023.0;
}
public static void main(String[] args) {
Sensor s = new Sensor();
double v = s.toVoltage();
System.out.println("Напряжение: " + v + " В");
}
}
Output:
Напряжение: 2.5024437927663734 В
Пример 4. Использование this
public class Servo {
int pin;
int angle;
void configure(int pin, int angle) {
this.pin = pin;
this.angle = angle;
}
void info() {
System.out.println("Servo pin=" + this.pin + " angle=" + this.angle);
}
public static void main(String[] args) {
Servo s = new Servo();
s.configure(9, 90);
s.info();
}
}
Output:
Servo pin=9 angle=90
Пример 5. Метод вызывает другой метод
public class Robot {
int speed;
void forward(int s) {
setSpeed(s);
System.out.println("Едем вперёд");
}
void stop() {
setSpeed(0);
System.out.println("Стоп");
}
private void setSpeed(int s) {
this.speed = s;
System.out.println("speed=" + speed);
}
public static void main(String[] args) {
Robot r = new Robot();
r.forward(150);
r.stop();
}
}
Output:
speed=150
Едем вперёд
speed=0
Стоп
Пример 6. Статический метод
public class MathUtils {
static int clamp(int value, int min, int max) {
if (value < min) return min;
if (value > max) return max;
return value;
}
public static void main(String[] args) {
System.out.println(clamp(300, 0, 255));
System.out.println(clamp(-10, 0, 255));
System.out.println(clamp(120, 0, 255));
}
}
Output:
255
0
120
Подводные камни
Если объявить тип результата отличным от
void, каждая ветка исполнения должна заканчиватьсяreturn.Параметры в Java передаются по значению. Для объектов это значит, что копируется ссылка — поля исходного объекта изменить можно, но саму ссылку — нет.
Имя параметра, совпадающее с именем поля, скрывает поле — без
this.полевы будете писать в параметр, а не в поле.Статический метод не имеет доступа к нестатическим полям и
this.Длинные методы трудно читать — разбивайте их на маленькие, как в примере 5.
См. также
Примечание
Лицензия и источники
Концепция описана на основе официального Java Tutorial от Oracle (https://docs.oracle.com/javase/tutorial/), Oracle Free Documentation License. Перевод, примеры и пояснения — © AlashEd Wiki.