Методы в Java: создание, вызов и абстракция
Метод в Java — это набор инструкций, сгруппированных для выполнения операции. Когда вы вызываете System.out.println(), система на самом деле выполняет несколько инструкций для вывода сообщения на консоль.
Создание метода
Синтаксис объявления метода:
модификатор тип_возврата имя_метода (список_параметров) {
// тело метода
}
Компоненты:
- модификатор — определяет доступность (public, private, protected, static и др.), необязателен.
- тип_возврата — тип данных, который метод возвращает (или
void, если ничего не возвращает). - имя_метода — идентификатор метода.
- список_параметров — типы, порядок и количество параметров (может быть пустым).
- тело метода — инструкции, определяющие поведение.
Пример: метод minFunction
/** Возвращает минимальное из двух чисел */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
Вызов метода
Метод вызывается по имени. При вызове управление передаётся методу; оно возвращается к вызывающему коду при выполнении return или достижении закрывающей фигурной скобки.
- Методы, возвращающие значение, используются в выражениях:
int result = sum(6, 9); - Методы
voidвызываются как операторы:System.out.println("Текст");
Пример: определение и вызов
public class ExampleMinNumber {
public static void main(String[] args) {
int a = 11;
int b = 6;
int c = minFunction(a, b);
System.out.println("Minimum Value = " + c);
}
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2) min = n2;
else min = n1;
return min;
}
}
Результат:
Minimum value = 6
Ключевое слово void
void указывает, что метод не возвращает значение. Вызов такого метода должен быть оператором, заканчивающимся точкой с запятой.
public class ExampleVoid {
public static void main(String[] args) {
methodRankPoints(255.7);
}
public static void methodRankPoints(double points) {
if (points >= 202.5) {
System.out.println("Rank:A1");
} else if (points >= 122.4) {
System.out.println("Rank:A2");
} else {
System.out.println("Rank:A3");
}
}
}
Результат:
Rank:A1
Передача параметров по значению
В Java аргументы передаются по значению. При вызове метода значение аргумента копируется в параметр. Изменения параметра внутри метода не влияют на исходный аргумент.
public class SwappingExample {
public static void main(String[] args) {
int a = 30;
int b = 45;
System.out.println("Before swapping, a = " + a + " and b = " + b);
swapFunction(a, b);
System.out.println("After swapping, a = " + a + " and b = " + b);
}
public static void swapFunction(int a, int b) {
int c = a;
a = b;
b = c;
System.out.println("Inside: a = " + a + ", b = " + b);
}
}
Результат:
Before swapping, a = 30 and b = 45
Inside: a = 45, b = 30
After swapping, a = 30 and b = 45
Перегрузка методов (Overloading)
Перегрузка — наличие в классе нескольких методов с одинаковым именем, но разными списками параметров (тип, количество, порядок). Возвращаемый тип может отличаться.
public class ExampleOverloading {
public static void main(String[] args) {
int a = 11, b = 6;
double c = 7.3, d = 9.4;
System.out.println("Minimum Value = " + minFunction(a, b));
System.out.println("Minimum Value = " + minFunction(c, d));
}
public static int minFunction(int n1, int n2) {
return (n1 > n2) ? n2 : n1;
}
public static double minFunction(double n1, double n2) {
return (n1 > n2) ? n2 : n1;
}
}
Результат:
Minimum Value = 6
Minimum Value = 7.3
Аргументы командной строки
Аргументы передаются в метод main(String[] args) как массив строк.
public class CommandLine {
public static void main(String args[]) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Запуск: java CommandLine this is a command line 200 -100
Результат:
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
Ключевое слово this
this — ссылка на текущий объект. Используется в экземплярных методах и конструкторах для:
- Разрешения конфликта имён между полями и локальными переменными:
this.age = age; - Вызова другого конструктора того же класса:
this(20); - Вызова методов текущего объекта:
this.greet();
public class This_Example {
int num = 10;
This_Example() {
System.out.println("Пример использования this");
}
This_Example(int num) {
this(); // вызов конструктора по умолчанию
this.num = num; // присваивание полю
}
public void greet() {
System.out.println("Hi Welcome to Tutorialspoint");
}
public void print() {
int num = 20; // локальная переменная
System.out.println("Local num: " + num);
System.out.println("Instance num: " + this.num);
this.greet();
}
public static void main(String[] args) {
This_Example obj1 = new This_Example();
obj1.print();
This_Example obj2 = new This_Example(30);
obj2.print();
}
}
Переменное число аргументов (var-args)
Начиная с JDK 1.5, можно передавать переменное количество аргументов одного типа. Объявляется как тип... имя. Только один var-args параметр, должен быть последним.
public class VarargsDemo {
public static void main(String args[]) {
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
public static void printMax(double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++)
if (numbers[i] > result) result = numbers[i];
System.out.println("The max value is " + result);
}
}
Результат:
The max value is 56.5
The max value is 3.0
Метод finalize()
Метод finalize() вызывается сборщиком мусора перед уничтожением объекта. Используется для очистки ресурсов (закрытие файлов и т.д.).
protected void finalize() {
// код завершения
}
Важно: не гарантируется, что finalize() будет вызван (например, если программа завершится до работы GC). Начиная с Java 9, метод объявлен устаревшим (@Deprecated); рекомендуется использовать try-with-resources или Cleaner.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Абстрактные классы и методы в Java: полное руководство
- Типы аннотаций в Java: предопределенные, кастомные и мета-аннотации
- Понимание String.charAt() в Java: синтаксис, возвращаемый тип, исключения и пример
- Освоение String.endsWith() в Java: проверка суффиксов строки с примерами
- Замена строк в Java: replace(), replaceAll() и replaceFirst() подробно
- Java String toLowerCase() и toUpperCase(): преобразование регистра с учётом локали
- Переопределение методов в Java: настройка поведения суперкласса
- Java 9 Collection Factory Methods: удобное создание неизменяемых List, Set, Map
- Java 9 Private Interface Methods: инкапсуляция и повторное использование кода