Как можно передать объект методу

от admin

Passing Information to a Method or a Constructor

The declaration for a method or a constructor declares the number and the type of the arguments for that method or constructor. For example, the following is a method that computes the monthly payments for a home loan, based on the amount of the loan, the interest rate, the length of the loan (the number of periods), and the future value of the loan:

This method has four parameters: the loan amount, the interest rate, the future value and the number of periods. The first three are double-precision floating point numbers, and the fourth is an integer. The parameters are used in the method body and at runtime will take on the values of the arguments that are passed in.

Parameter Types

You can use any data type for a parameter of a method or a constructor. This includes primitive data types, such as doubles, floats, and integers, as you saw in the computePayment method, and reference data types, such as objects and arrays.

Here's an example of a method that accepts an array as an argument. In this example, the method creates a new Polygon object and initializes it from an array of Point objects (assume that Point is a class that represents an x, y coordinate):

Arbitrary Number of Arguments

You can use a construct called varargs to pass an arbitrary number of values to a method. You use varargs when you don't know how many of a particular type of argument will be passed to the method. It's a shortcut to creating an array manually (the previous method could have used varargs rather than an array).

To use varargs, you follow the type of the last parameter by an ellipsis (three dots, . ), then a space, and the parameter name. The method can then be called with any number of that parameter, including none.

You can see that, inside the method, corners is treated like an array. The method can be called either with an array or with a sequence of arguments. The code in the method body will treat the parameter as an array in either case.

You will most commonly see varargs with the printing methods; for example, this printf method:

allows you to print an arbitrary number of objects. It can be called like this:

or with yet a different number of arguments.

Parameter Names

When you declare a parameter to a method or a constructor, you provide a name for that parameter. This name is used within the method body to refer to the passed-in argument.

The name of a parameter must be unique in its scope. It cannot be the same as the name of another parameter for the same method or constructor, and it cannot be the name of a local variable within the method or constructor.

A parameter can have the same name as one of the class's fields. If this is the case, the parameter is said to shadow the field. Shadowing fields can make your code difficult to read and is conventionally used only within constructors and methods that set a particular field. For example, consider the following Circle class and its setOrigin method:

The Circle class has three fields: x , y , and radius . The setOrigin method has two parameters, each of which has the same name as one of the fields. Each method parameter shadows the field that shares its name. So using the simple names x or y within the body of the method refers to the parameter, not to the field. To access the field, you must use a qualified name. This will be discussed later in this lesson in the section titled "Using the this Keyword."

Passing Primitive Data Type Arguments

Primitive arguments, such as an int or a double , are passed into methods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns, the parameters are gone and any changes to them are lost. Here is an example:

Passing Reference Data Type Arguments

Reference data type parameters, such as objects, are also passed into methods by value. This means that when the method returns, the passed-in reference still references the same object as before. However, the values of the object's fields can be changed in the method, if they have the proper access level.

For example, consider a method in an arbitrary class that moves Circle objects:

Let the method be invoked with these arguments:

Inside the method, circle initially refers to myCircle . The method changes the x and y coordinates of the object that circle references (that is, myCircle ) by 23 and 56, respectively. These changes will persist when the method returns. Then circle is assigned a reference to a new Circle object with x = y = 0 . This reassignment has no permanence, however, because the reference was passed in by value and cannot change. Within the method, the object pointed to by circle has changed, but, when the method returns, myCircle still references the same Circle object as before the method was called.

Читать:
Huawei matebook bios как зайти

Как можно передать объект методу

Объекты классов, как и данные примитивных типов, могут передаваться в методы. Однако в данном случае есть одна особенность — при передаче объектов в качестве значения передается копия ссылки на область в памяти, где расположен этот объект. Рассмотрим небольшой пример. Пусть у нас есть следующий класс Person:

Здесь в метод changeName передается объект Person, у которого изменяется имя. Так как в метод будет передаваться копия ссылки на область памяти, в которой находится объект Person, то переменная kate и параметр p метода changeName будут указывать на один и тот же объект в памяти. Поэтому после выполнения метода у объекта kate, который передается в метод, будет изменено имя с «Kate» на «Alice».

От этого случая следует отличать другой случай:

В метод changePerson также передается копия ссылки на объект Person. Однако в самом методе мы изменяем не отдельные значения объекта, а пересоздаем объект с помощью конструктора и оператора new. В результате в памяти будет выделено новое место для нового объекта Person, и ссылка на этот объект будет привоена параметру p:

То есть после создания нового объекта Person параметр p и переменная kate в методе main будут хранить ссылки на разные объекты. Переменная kate, которая передавалась в метод, продолжит хранить ссылку на старый объект в памяти. Поэтому ее значение не меняется.

Методы в Java

Методы в Java - 1

Существует один интересный принцип, о котором многие слышали. Он называется “Разделяй и властвуй”. Этот принцип используется во многих сферах человеческой жизни, например, в политике. Он обозначает разделение большого количества разнородных частей в государстве, разжигание и использование вражды между этими частями. Иными словами: создать конфликт между теми, кто потенциально создает угрозу власти. Но мы с вами программисты, поэтому нас интересует исключительно техническая трактовка данного принципа. А звучит она так: “Принцип “Разделяй и властвуй” заключается в разбиении большой задачи на более мелкие до тех пор, пока они не станут элементарными. Затем нужно последовательно решить их и объединить все в одну целую систему. Данная программа должна решать поставленную задачу” То есть, вы просто разбиваете большую задачу на более мелкие, решить которые для вас не составляет проблем. А потом собираете решение в одно большое. Чтобы следовать этому простому и полезному принципу, в Java-программировании используют методы. Например, мы создаем робота-боксера. Для нас важно, чтобы он хорошо двигался, проводил точные удары, а также следил за противником в поисках слабых мест. Будет неудобно писать все это в одном методе main , не так ли? Если мы опишем все в одном методе, будет что-то вроде такого: А если нам понадобится использовать шаг вперед или удар еще где-либо в программе? Описывать все действия снова? Не подходит. Слишком много повторяющихся строк, в которых легко запутаться. Нам нужно вынести описание деталей действия в отдельный модуль, который будет выполнять шаг робота. И мы можем вызывать метод одной строкой. Как-то так: Теперь у нас есть разделенный функционал робота, а также компактный и понятный метод main() . Остальные методы также можно разделить на какой-либо функционал, например, обманныйАтакующийУдар можно разделить на методы обманноеДвижение , движениеНог , атака . И их, в свою очередь, на более простые задачи, чтобы в итоге получить набор элементарных. Окей, а теперь напишем это все красиво в таком виде, который примет Java. Понимаю, что вам может быть сейчас этот код немного непонятен, особенно некоторые слова вроде void , return и так далее. Не спешите бросаться помидорами, сейчас все объясню. Общая мысль парадигмы “Разделяй и властвуй” вам должна быть понятна. В этом нам помогут методы. Общая структура объявления методов такая:

Java. Методы. Передача параметров в методах (функциях) класса. Передача переменных простых типов и объектов в метод в качестве параметра

Методы. Передача параметров в методах (функциях) класса. Передача переменных примитивных типов и объектов в метод в качестве параметра

Содержание

Поиск на других ресурсах:

1. Какие существуют способы передачи аргументов методу (функции)?

В Java существует 2 способа для передачи переменной или объекта класса в функцию:

  • передача по значению. В этом случае значение аргумента копируется в формальный параметр функции. Поскольку создается копия аргумента в функции, то все изменения над копией не повлияют на значение аргумента;
  • передача по ссылке (по адресу). В этом случае параметру передается ссылка на аргумент, который используется при вызове. По этой ссылке есть доступ к аргументу. Таким образом, все изменения, сделанные в теле функции над значением параметра, будут изменять значение аргумента который был передан в функцию.
2. Какие особенности передачи аргумента примитивного типа ?

Если методу передается аргумент примитивного типа, то происходит передача по значению. То есть, делается копия аргумента.

3. Каким образом в метод передается объект некоторого класса?

В отличие от переменных примитивных типов, объекты класса передаются по ссылке. Это значит, что изменения, сделанные в теле функции (методе) будут изменять также значения объекта, который задавался в качестве аргумента.

4. Примеры передачи переменных примитивных типов в методы (функции)

Пример 1. Реализация метода Max() , получающего два параметра примитивного типа.

Демонстрация использования метода в другом методе:

Демонстрация использования метода Inc() в методе main() :

будет существовать ссылка на память, выделенную динамично внутри метода Method() . Таким образом, для переменной-объекта varObj не нужно выделять память в вызывающем коде.

Пример. Пусть задан класс MyDay , реализующий день недели.

Похожие статьи