- Java. Methods. Passing parameters into methods (functions) of the class. Passing of variables of primitive data types and objects into a method as a parameter
- Methods. Passing parameters into methods (functions) of the class. Passing of variables of primitive data types and objects into a method as a parameter
- Contents
- Related topics
- Method type variable java
- Параметры переменной длины
- Java varargs
- Что такое varargs?
- 5 правил varargs
- Примеры varargs
- Когда использовать varargs?
- Заключение
Java. Methods. Passing parameters into methods (functions) of the class. Passing of variables of primitive data types and objects into a method as a parameter
Methods. Passing parameters into methods (functions) of the class. Passing of variables of primitive data types and objects into a method as a parameter
Contents
Search other websites:
1. What are the ways to pass arguments into the method (function)?
There are 2 ways of passing variable or passing a class object into a function:
- passing by value. In this case, the value of the argument is copied to the formal parameter of the function. Since a copy of the argument is created in the function, all changes over the copy will not affect the value of the argument;
- passing by reference. In this case, a reference to the argument that is used for the call is passed to parameter. Using this reference has access to the argument. Thus, all changes made in the body of the function over the value of the parameter will change the value of the argument that was passed to the function.
2. What are the features of passing the argument of a primitive type ?
If a primitive type argument is passed to the method, then a passing by value occurs. That is, a copy of the argument is made.
3. How is an object of a certain class passed to the method?
Unlike variables of primitive types, class objects are passed by reference. This means that the changes made in the body of the function (method) will also change the values of the object that was specified as an argument.
4. Examples of passing the variables of primitive types to methods (functions)
Example 1. Implementation of Max() method, which accepts two parameters of primitive data type.
static int Max(int a, int b) < if (a>b) return a; else return b; >
Using the method in another program code:
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()method to increment (decrement) the integer varibale ‘value’ by the value of the input argument ‘step’. In the body of the method, the value of the ‘value’ parameter is changed. However, after the method is completed, the value of the x argument in the main() function remains unchanged. This means that the parameter was passed by value.The implementation of method is as follows:
static int Inc(int value, int step) < value += step; return value; >Using the Inc() method in function main() :
there will be a reference to the memory allocated dynamically within the Method() method. Thus, for the varObj variable, you do not need to allocate memory in the calling code.
Example. Let there be given a class MyDay, which implements the day of week.
Related topics
Method type variable 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 varargs
Сегодня мы обсудим такую штуку как varargs в Java. Varargs — или Variable Arguments — это технология, которая позволяет создавать методы с произвольным количеством аргументов. В данной статье мы научимся создавать такие методы, обсудим, зачем нужны varargs и когда их лучше использовать.
Что такое varargs?
Varargs — это аргументы переменной длины: фича, которая появилась еще в JDK5. Varargs позволяют нам создавать методы с произвольным количеством аргументов. По большому счету, создавать такие методы можно было и раньше. Правда, делать это было не очень удобно. Приведем пример. Допустим, нам необходимо написать метод, который будет принимать произвольное количество целочисленных аргументов и складывать их вместе. У нас есть два варианта. Вариант 1 — перегрузка:
class Calculator < int sum(int a, int b); int sum(int a, int b, int c); int sum(int a, int b, int c, int d); int sum(int a, int b, int c, int d, int e); >
Но с перегрузкой возникают две проблемы. Во-первых, не всегда понятно, когда пора остановиться, а во-вторых, это громоздко. Лучше уж массивы. Вариант 2 — массивы:
С массивом уже не громоздко, и вроде бы массив выглядит ничего так… до тех пор, пока не придет пора вызвать метод:
public static void main(String. sss)Согласны, можно, конечно, и короче все записать. Но во-первых, хочется все-таки продемонстрировать неудобство использования массивов в качестве аргументов переменной длины, а во-вторых, даже если мы запишем так:
int[] arguments = ; int sum = calculator.sum(arguments);
То мы все равно не избавимся излишнего количества кода. Однако с выходом Java 5 для решения этих проблем появилась фича Varargs. Она позволила передавать в методы произвольное количество аргументов. Выглядит это примерно так:
public class Calculator < public static void main(String. sss) < Calculator calculator = new Calculator(); int sum = calculator.sum(1,10,123,234,6234,12,8); >int sum(int. numbers) < return Arrays.stream(numbers).sum(); >>
Итак, резюмируем. Varargs — это аргументы переменной длины, фича, которая появилась с выходом Java 5. Далее более подробно рассмотрим некоторые правила работы с Varargs.
5 правил varargs
Правило 1. Vararg аргумент (или же аргумент переменной/произвольной длины) обозначается через троеточие следующим образом:
String. words Integer. numbers Person. people Cat. cats
void print(String. words) int sum(Integer. numbers) void save(Person. people) void feed(Cat. cats)
void print(String. words, String anotherWord) // - Так нельзя! void print(String. words, int someNumber) // - Так нельзя! void print(String anotherWord, String. words) // - Так можно void print(int someNumber, String. words) // - Так можно
Правило 5. Несмотря на то, что varargs являются массивами, при вызове метода, который принимает аргументы переменной длины, не обязательно создавать массив. Достаточно и даже желательно просто перечислить необходимые аргументы через запятую:
public class Main < public static void main(String. sss) < print("Как","же","прекрасно","изучать","Java"); >static void print(String. words) < for (int i = 0; i < words.length; i++) < System.out.println(words[i]); >> >
Примеры varargs
В примере ниже мы напишем метод, который принимает varargs состоящий из целых чисел и выводит на экран количество переданных элементов и их сумму. Передадим в этот метод и массив, и ряд целых чисел (оба варианта допустимы):
public static void main(String. sss) < int[] a = new int[100]; for (int i = 0; i < a.length; i++) < a[i] = i; >sum(a); sum(1,2,3,4,5,6,7,8,9,10); > static void sum(int. numbers)Кол-во элементов для сложения - 100, сумма - 4950 Кол-во элементов для сложения - 10, сумма - 55
Стоит сказать, что метод System.out.printf также принимает varargs. Если мы взглянем на код этого метода, то убедимся в этом:
public PrintStream printf(String format, Object . args)public static String format(String format, Object. args)Когда использовать varargs?
Ответ на этот вопрос зависит от того, кто спрашивает. Если подобный вопрос задает клиент некоторого API, в котором есть методы с varargs, то ответ будет “использовать такие методы как можно чаще”. Для клиента кода varargs существенно упрощает жизнь, облегчая написание кода и повышая его читаемость. Однако в случае, если данный вопрос задает разработчик API, который интересуется, как часто стоит создавать методы с varargs, то ответ будет “не следует часто использовать varargs”. Varargs следует использовать только тогда, когда выгода от его использования очевидна. Также не следует перегружать методы с varargs, так как это вызовет у клиентов вашего кода затруднения в понимании, какой из перегруженных методов в действительности вызывается.
Заключение
- Написать void метод, который принимает ряд целых чисел и возвращает их среднее арифметическое.
- Написать void метод, который принимает ряд строк и выводит на печать самое длинное слово.
- Написать метод, который возвращает boolean и принимает первым аргументом переменную типа String , а следующим аргументом ряд boolean , переменной длины.
Возможные значения String — AND , OR , XOR . В случае, если первый аргумент имеет какое то другое значение, метод должен бросить исключение IllegalArgumentException .
Метод должен осуществить логическую операцию (указанную в первом аргументе ) над каждым элементом varargs аргумента и вернуть результат вычисления.
- "AND", true, true, false — вернет false
- "OR", false, true, false, false — вернет true