Методы. Передача параметров в методах (функциях) класса. Передача переменных примитивных типов и объектов в метод в качестве параметра
Содержание
- 1. Какие существуют способы передачи аргументов методу (функции)?
- 2. Какие особенности передачи аргумента примитивного типа?
- 3. Каким образом в метод передается объект некоторого класса?
- 4. Примеры передачи переменных примитивных типов в методы (функции)
- 5. Пример передачи объекта класса в метод (функцию)
- 6. Каким образом осуществляется возврат объекта класса из метода оператором return? Пример
- Связанные темы
Поиск на других ресурсах:
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 = " + t); }
Пример 2. Реализация метода Inc(), увеличивающего (уменьшающего) значение целочисленной величины value на значение входного аргумента step. В теле метода изменяется значение параметра value. Однако, после завершения метода значение аргумента x в функции main() остается без изменений. Это значит, что состоялась передача параметра по значению.
Реализация метода имеет следующий вид:
static int Inc(int value, int step) { value += step; return value; }
Демонстрация использования метода Inc() в методе main():
public static void main(String[] args) { int t, x; x = 13; t = Inc(x, 5); // t = 13+5 = 18; x = 13 - без изменений System.out.println("t = " + t); System.out.println("x = " + x); }
5. Пример передачи объекта класса в метод (функцию)
В примере реализуется класс Month, определяющий месяц года. В классе объявляется:
- внутренняя переменная month;
- три конструктора;
- три метода доступа.
В один из конструкторов класса передается объект класса для начальной инициализации. Также объект класса Month передается в один из методов SetMonth().
Программный код, который реализует класс Month следующий:
public class Month { private int month; Month() { month = 1; } Month(int nmonth) { month = nmonth; } Month(Month mn) { month = mn.month; } // методы доступа int GetMonth() { return month; } void SetMonth(int month) { this.month = month; } void SetMonth(Month mn) { month = mn.month; } public static void main(String[] args) { Month m1 = new Month(); // конструктор без параметров Month m2 = new Month(5); // конструктор с 1 параметром типа int Month m3 = new Month(m2); // конструктор с 1 параметром, который есть объектом класса Month int t; t = m1.GetMonth(); // t = 1 t = m2.GetMonth(); // t = 5 t = m3.GetMonth(); // t = 5 // передача объекта класса в метод SetMonth() m1.SetMonth(m2); t = m1.GetMonth(); // t = 5 m2.SetMonth(8); m1.SetMonth(m2); t = m1.GetMonth(); // t = 8 System.out.println("Month = " + t); } }
6. Каким образом осуществляется возврат объекта класса из метода оператором return? Пример
Кроме примитивных типов данных методы (функции) могут возвращать объекты класса. В этом случае, в теле метода выделяется память на объект класса. После использования этот объект возвращается из метода с помощью оператора return.
В вызывающей части программы не нужно выделять память для объекта, которому присваивается возвращаемое значение из функции. Это объясняется тем, что память для всех объектов в программе вызывается динамично. Пока существует ссылка на объект, он не уничтожается из памяти. Значит, при выполнении присваивания вида:
varObj = Method(...);
будет существовать ссылка на память, выделенную динамично внутри метода Method(). Таким образом, для переменной-объекта varObj не нужно выделять память в вызывающем коде.
Пример. Пусть задан класс MyDay, реализующий день недели.
public class MyDay { private int day; // внутренняя переменная day = 1..7 // методы доступа public int GetDay() { return day; } public void SetDay(int nday) { day = nday; } } public class CDay { // метод, который возвращает объект класса MyDay public static MyDay GetObjDay(int day) { MyDay tmpObj = new MyDay(); // память выделяется динамически tmpObj.SetDay(day); return tmpObj; // возврат из метода: в вызывающем коде не нужно выделять память } public static void main(String[] args) { MyDay d = new MyDay(); // объект класса MyDay - выделяется память MyDay d2; // память не нужно выделять d2 = GetObjDay(5); // d2 ссылается на память, которая выделена в методе GetObjDay() int t = d2.GetDay(); // t = 5 System.out.println("Day = " + t); } }
Связанные темы
- Типы данных Java
- Применение классов в программах на Java. Определение класса и объекта класса. Примеры