Как передаются аргументы в метод java
С помощью параметров мы можем передать в методы различные данные, которые будут использоваться для вычислений. Например:
static void sum(int x, int y)
Данная функция принимает два параметра — два числа, складывает их и выводит их сумму на консоль.
А при вызове этого метода в программе нам необходимо передать на место параметров значения, которые соответствуют типу параметра:
public class Program < public static void main (String args[])< int a = 6; int b = 8; sum(a, b); // 14 sum(3, a); // 9 sum(5, 23); // 28 >static void sum(int x, int y) < int z = x + y; System.out.println(z); >>
Поскольку метод sum принимает два значения типа int, то на место параметров надо передать два значения типа int. Это могут быть и числовые литералы, и переменные типов данных, которые представляют тип int или могут быть автоматически преобразованы в тип int. Значения, которые передаются на место параметров, еще называются аргументами . Значения передаются параметрам по позиции, то есть первый аргумент первому параметру, второй аргумент — второму параметру и так далее.
Рассмотрим другой пример:
public class Program < public static void main (String args[])< display("Tom", 34); display("Bob", 28); display("Sam", 23); >static void display(String name, int age) < System.out.println(name); System.out.println(age); >>
Метод display принимает два параметра. Первый параметр представляет тип String, а второй — тип int. Поэтому при вызове метода вначале в него надо передать строку, а затем число.
Параметры переменной длины
Метод может принимать параметры переменной длины одного типа. Например, нам надо передать в метод набор числел и вычислить их сумму, но мы точно не знаем, сколько именно чисел будет передано — 3, 4, 5 или больше. Параметры переменной длины позволяют решить эту задачу:
public class Program < public static void main (String args[])< sum(1, 2, 3); // 6 sum(1, 2, 3, 4, 5); // 15 sum(); // 0 >static void sum(int . nums) < int result =0; for(int n: nums) result += n; System.out.println(result); >>
Троеточие перед названием параметра int . nums указывает на то, что он будет необязательным и будет представлять массив. Мы можем передать в метод sum одно число, несколько чисел, а можем вообще не передавать никаких параметров. Причем, если мы хотим передать несколько параметров, то необязательный параметр должен указываться в конце:
public static void main(String[] args) < sum("Welcome!", 20,10); sum("Hello World!"); >static void sum(String message, int . nums)
Параметры в Java передаются по ссылке или по значению?
Этот вопрос уходит корнями в C++ прошлое (скорее всего интервьюера), это терминология из C++. Для начала нужно разобраться в этой терминологии.
В C++ ссылка – это переменная-псевдоним для другой переменной. Меняя значение ссылки, поменяется и оригинал. В Java такого нет, легко понять это подумав например о ссылке на int.
Ссылка в Java – это нечто похожее на адрес объекта в памяти. Похожая сущность в C++ называется указатель.
Передача параметра по значению – это копирование значения в переменную-параметр метода. По ссылке – передача ссылки, то есть по сути использование той же самой переменной. Разобраться подробнее (осторожно, много C++).
В Java параметр метода – всегда копия. Значит параметры передаются всегда по значению, просто это значение может быть ссылкой на объект. Код ниже это демонстрирует.
Как передать аргументы в main java
Передать аргументы можно в командной строке, указав их справа через пробел после имени программы.
Передаваемые аргументы можно получить в методе main через строковый массив args :
public class App public static void main(String[] args) for(int i = 0; i args.length; i++) System.out.println("Аргумент №" + (i+1) + "- " + args[i]); > > >
Запустим приложение в командной строке, справа через пробел указав передаваемые аргументы :
>java App.java Вася Петя Аргумент №1 - Вася Аргумент №2 - Петя >
Java. Методы. Передача параметров в методах (функциях) класса. Передача переменных простых типов и объектов в метод в качестве параметра
Методы. Передача параметров в методах (функциях) класса. Передача переменных примитивных типов и объектов в метод в качестве параметра
Поиск на других ресурсах:
1. Какие существуют способы передачи аргументов методу (функции)?
В Java существует 2 способа для передачи переменной или объекта класса в функцию:
- передача по значению. В этом случае значение аргумента копируется в формальный параметр функции. Поскольку создается копия аргумента в функции, то все изменения над копией не повлияют на значение аргумента;
- передача по ссылке (по адресу). В этом случае параметру передается ссылка на аргумент, который используется при вызове. По этой ссылке есть доступ к аргументу. Таким образом, все изменения, сделанные в теле функции над значением параметра, будут изменять значение аргумента который был передан в функцию.
2. Какие особенности передачи аргумента примитивного типа ?
Если методу передается аргумент примитивного типа, то происходит передача по значению. То есть, делается копия аргумента.
3. Каким образом в метод передается объект некоторого класса?
В отличие от переменных примитивных типов, объекты класса передаются по ссылке. Это значит, что изменения, сделанные в теле функции (методе) будут изменять также значения объекта, который задавался в качестве аргумента.
4. Примеры передачи переменных примитивных типов в методы (функции)
Пример 1. Реализация метода Max() , получающего два параметра примитивного типа.
static int Max(int a, int b) < if (a>b) return a; else return b; >
Демонстрация использования метода в другом методе:
public static void main(String[] args) < int t, x, y; x = 133; y = 68; t = Max(x, y); // t = 133 System.out.println("Max color: #0000ff;">Inc(), увеличивающего (уменьшающего) значение целочисленной величины value на значение входного аргумента step. В теле метода изменяется значение параметра value. Однако, после завершения метода значение аргумента x в функции main() остается без изменений. Это значит, что состоялась передача параметра по значению.Реализация метода имеет следующий вид:
static int Inc(int value, int step) < value += step; return value; >Демонстрация использования метода Inc() в методе main() :
- внутренняя переменная month;
- три конструктора;
- три метода доступа.
будет существовать ссылка на память, выделенную динамично внутри метода Method() . Таким образом, для переменной-объекта varObj не нужно выделять память в вызывающем коде.
Пример. Пусть задан класс MyDay , реализующий день недели.
Связанные темы
- Типы данных Java
- Применение классов в программах на Java. Определение класса и объекта класса. Примеры