С помощью параметров мы можем передать в методы различные данные, которые будут использоваться для вычислений. Например, определим следующую программу:
class Program{
public static void main(String[] args) {
Person tom = new Person();
tom.say(); // Hello
tom.say(); // Hello
}
}
class Person{
void say(){
System.out.println("Hello");
}
}
Здесь определен класс Person, в котором есть метод say(). Этот метод имитирует говорение некоторой фразы. В методе main создается один объект класса Person, и у него вызывается два раза метод say.
И ожидаемо мы увидим на консоли два раза слово "Hello":
Hello Hello
Но сколько бы мы не вызывали метод say, результат не измениться. И чтобы иметь возможность настроить извне поведение метода применяются параметры. Параметры определяются через заятую в скобках после названия метода в виде:
тип_метода имя_метода (тип_параметра1 параметр1, тип_параметра2 параметр2, ...)
{
// действия метода
}
Определение параметра состоит из двух частей: сначала идет тип параметра и затем его имя.
Так, используем параметры и для этого изменим программу следующим образом:
class Program{
public static void main(String[] args) {
Person tom = new Person();
tom.say("Hello work"); // Hello work
tom.say("Hello gold"); // Hello gold
}
}
class Person{
void say(String message){
System.out.println(message);
}
}
Здесь метод say() теперь принимает один параметр, который называется message и имеет тип String.
Чтобы выполнить метод, который имеет параметры, при вызове после имени метода в скобках ему передаются значения для его параметров, например:
tom.say("Hello work");
Здесь параметру message передается строка "Hello work". Значения, которые передаются параметрам, еще называются аргументами. То есть передаваемая строка "Hello work" в данном случае
является аргументом.
Иногда можно встретить такие определения как формальные параметры и фактические параметры. Формальные параметры - это собственно параметры метода (в данном случае message), а фактические параметры - значения, которые передаются формальным параметрам. То есть фактические параметры - это и есть аргументы метода.
Рассмотрим другой пример, где у нас есть метод, который складывает два числа:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
calc.sum(1, 2); // 3
calc.sum(5, 3); // 8
calc.sum(5, 6); // 11
}
}
class Calcualtor{
void sum(int a, int b){
int result = a + b;
System.out.println(result);
}
}
Здесь определен класс Calculator с одним методом sum, имеет два параметра - два числа и выводит на консоль их сумму. Поскольку оба параметра имеют тип int, то на место параметров надо
передать два значения типа int. Это могут быть и числовые литералы, и переменные типов данных, которые представляют тип int или
могут быть автоматически преобразованы в тип int.
Значения передаются параметрам по позиции, то есть первый аргумент первому параметру, второй аргумент - второму параметру и так далее.
Например, при вызове calc.sum(5, 3) число 5 передается параметру a, а число 3 - параметру b.
Метод может принимать параметры переменной длины одного типа. Например, нам надо передать в метод набор числел и вычислить их сумму, но мы точно не знаем, сколько именно чисел будет передано - 3, 4, 5 или больше. Параметры переменной длины позволяют решить эту задачу:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
calc.sum(1, 2, 3); // 6
calc.sum(1, 2, 3, 4, 5); // 15
calc.sum(); // 0
}
}
class Calcualtor{
void sum(int ...nums){
int result =0;
for(int n: nums)
result += n;
System.out.println(result);
}
}
Троеточие перед названием параметра int ...nums указывает на то, что он будет необязательным и будет представлять массив. Мы можем передать в метод sum
одно число, несколько чисел, а можем вообще не передавать никаких параметров. Причем, если мы хотим передать несколько параметров, то необязательный параметр должен указываться в конце:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
calc.sum("Sum of {1, 2, 3}: ", 1, 2, 3); // Sum of {1, 2, 3}: 6
calc.sum("Zero sum: "); // Zero sum: 0
}
}
class Calcualtor{
void sum(String message, int ...nums){
System.out.print(message);
int result =0;
for(int n: nums)
result += n;
System.out.println(result);
}
}