Java - Методы
Метод Java - это набор операторов, сгруппированных вместе для выполнения операции. Когда вы вызываете System.out.println() метод, например, система фактически выполняет несколько операторов, чтобы вывести сообщение на консоль.
Теперь вы узнаете, как создавать свои собственные методы с возвращаемыми значениями или без них, вызывать метод с параметрами или без них и применять абстракцию метода при разработке программы.
Создание метода
Рассматривая следующий пример, объясняющий синтаксис метода -
Syntax
public static int methodName(int a, int b) {
// body
}
Вот,
public static - модификатор
int - тип возврата
methodName - название метода
a, b - формальные параметры
int a, int b - список параметров
Определение метода состоит из заголовка метода и тела метода. То же самое показано в следующем синтаксисе -
Syntax
modifier returnType nameOfMethod (Parameter List) {
// method body
}
Синтаксис, показанный выше, включает:
modifier - Он определяет тип доступа к методу и не является обязательным для использования.
returnType - Метод может возвращать значение.
nameOfMethod- Это название метода. Подпись метода состоит из имени метода и списка параметров.
Parameter List- Список параметров, это тип, порядок и количество параметров метода. Это необязательно, метод может содержать нулевые параметры.
method body - Тело метода определяет, что метод делает с операторами.
Example
Вот исходный код указанного выше метода, называемого min(). Этот метод принимает два параметра num1 и num2 и возвращает максимум между двумя -
/** the snippet returns the minimum between two numbers */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
Вызов метода
Для использования метода его следует вызвать. Существует два способа вызова метода, т. Е. Метод возвращает значение или ничего не возвращает (не возвращает значения).
Процесс вызова метода прост. Когда программа вызывает метод, управление программой передается вызываемому методу. Затем этот вызываемый метод возвращает управление вызывающей стороне в двух условиях, когда -
- выполняется оператор возврата.
- он достигает метода, заканчивающегося закрывающей скобкой.
Методы, возвращающие void, считаются вызовом оператора. Давайте рассмотрим пример -
System.out.println("This is tutorialspoint.com!");
Возвращаемое значение метода можно понять на следующем примере -
int result = sum(6, 9);
Ниже приведен пример, демонстрирующий, как определить метод и как его вызвать.
Example
public class ExampleMinNumber {
public static void main(String[] args) {
int a = 11;
int b = 6;
int c = minFunction(a, b);
System.out.println("Minimum Value = " + c);
}
/** returns the minimum of two numbers */
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
}
Это даст следующий результат -
Output
Minimum value = 6
Ключевое слово void
Ключевое слово void позволяет нам создавать методы, которые не возвращают значение. В следующем примере мы рассматриваем метод void methodRankPoints . Это метод void, который не возвращает никакого значения. Вызов метода void должен быть оператором, например methodRankPoints (255.7); . Это оператор Java, который заканчивается точкой с запятой, как показано в следующем примере.
Example
public class ExampleVoid {
public static void main(String[] args) {
methodRankPoints(255.7);
}
public static void methodRankPoints(double points) {
if (points >= 202.5) {
System.out.println("Rank:A1");
}else if (points >= 122.4) {
System.out.println("Rank:A2");
}else {
System.out.println("Rank:A3");
}
}
}
Это даст следующий результат -
Output
Rank:A1
Передача параметров по значению
При работе в вызывающем процессе необходимо передавать аргументы. Они должны быть в том же порядке, что и соответствующие параметры в спецификации метода. Параметры могут передаваться по значению или по ссылке.
Передача параметров по значению означает вызов метода с параметром. Через это значение аргумента передается параметру.
Example
В следующей программе показан пример передачи параметра по значению. Значения аргументов остаются неизменными даже после вызова метода.
public class swappingExample {
public static void main(String[] args) {
int a = 30;
int b = 45;
System.out.println("Before swapping, a = " + a + " and b = " + b);
// Invoke the swap method
swapFunction(a, b);
System.out.println("\n**Now, Before and After swapping values will be same here**:");
System.out.println("After swapping, a = " + a + " and b is " + b);
}
public static void swapFunction(int a, int b) {
System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
// Swap n1 with n2
int c = a;
a = b;
b = c;
System.out.println("After swapping(Inside), a = " + a + " b = " + b);
}
}
Это даст следующий результат -
Output
Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30
**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45
Перегрузка метода
Когда у класса есть два или более метода с одинаковым именем, но с разными параметрами, это называется перегрузкой метода. Он отличается от переопределения. При переопределении метод имеет то же имя, тип, количество параметров и т. Д.
Давайте рассмотрим рассмотренный ранее пример поиска минимального числа целочисленного типа. Если, скажем, мы хотим найти минимальное количество двойного типа. Затем будет представлена концепция перегрузки для создания двух или более методов с одинаковым именем, но разными параметрами.
Следующий пример объясняет то же самое -
Example
public class ExampleOverloading {
public static void main(String[] args) {
int a = 11;
int b = 6;
double c = 7.3;
double d = 9.4;
int result1 = minFunction(a, b);
// same function name with different parameters
double result2 = minFunction(c, d);
System.out.println("Minimum Value = " + result1);
System.out.println("Minimum Value = " + result2);
}
// for integer
public static int minFunction(int n1, int n2) {
int min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
// for double
public static double minFunction(double n1, double n2) {
double min;
if (n1 > n2)
min = n2;
else
min = n1;
return min;
}
}
Это даст следующий результат -
Output
Minimum Value = 6
Minimum Value = 7.3
Методы перегрузки делают программу читаемой. Здесь два метода имеют одно и то же имя, но с разными параметрами. Результатом является минимальное количество целых и двойных типов.
Использование аргументов командной строки
Иногда вам может понадобиться передать некоторую информацию в программу при ее запуске. Это достигается передачей аргументов командной строки функции main ().
Аргумент командной строки - это информация, которая непосредственно следует за именем программы в командной строке при ее выполнении. Получить доступ к аргументам командной строки внутри Java-программы довольно просто. Они хранятся в виде строк в массиве String, переданном в main ().
Example
Следующая программа отображает все аргументы командной строки, с которыми она вызывается:
public class CommandLine {
public static void main(String args[]) {
for(int i = 0; i<args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Попробуйте выполнить эту программу, как показано здесь -
$java CommandLine this is a command line 200 -100
Это даст следующий результат -
Output
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
Ключевое слово this
this- это ключевое слово в Java, которое используется как ссылка на объект текущего класса в методе экземпляра или конструкторе. Используя это, вы можете ссылаться на члены класса, такие как конструкторы, переменные и методы.
Note- Ключевое слово this используется только в методах или конструкторах экземпляра
В общем, ключевое слово this используется для -
Отличайте переменные экземпляра от локальных переменных, если у них одинаковые имена, в конструкторе или методе.
class Student {
int age;
Student(int age) {
this.age = age;
}
}
Вызов одного типа конструктора (параметризованный конструктор или конструктор по умолчанию) из другого в классе. Это известно как явный вызов конструктора.
class Student {
int age
Student() {
this(20);
}
Student(int age) {
this.age = age;
}
}
Example
Вот пример, в котором это ключевое слово используется для доступа к членам класса. Скопируйте и вставьте следующую программу в файл с именем,This_Example.java.
public class This_Example {
// Instance variable num
int num = 10;
This_Example() {
System.out.println("This is an example program on keyword this");
}
This_Example(int num) {
// Invoking the default constructor
this();
// Assigning the local variable num to the instance variable num
this.num = num;
}
public void greet() {
System.out.println("Hi Welcome to Tutorialspoint");
}
public void print() {
// Local variable num
int num = 20;
// Printing the local variable
System.out.println("value of local variable num is : "+num);
// Printing the instance variable
System.out.println("value of instance variable num is : "+this.num);
// Invoking the greet method of a class
this.greet();
}
public static void main(String[] args) {
// Instantiating the class
This_Example obj1 = new This_Example();
// Invoking the print method
obj1.print();
// Passing a new value to the num variable through parametrized constructor
This_Example obj2 = new This_Example(30);
// Invoking the print method again
obj2.print();
}
}
Это даст следующий результат -
Output
This is an example program on keyword this
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint
Переменные аргументы (var-args)
JDK 1.5 позволяет передавать методу переменное количество аргументов одного типа. Параметр в методе объявлен следующим образом -
typeName... parameterName
В объявлении метода вы указываете тип, за которым следует многоточие (...). В методе может быть указан только один параметр переменной длины, и этот параметр должен быть последним параметром. Ему должны предшествовать любые обычные параметры.
Example
public class VarargsDemo {
public static void main(String args[]) {
// Call method with variable args
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1, 2, 3});
}
public static void printMax( double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++)
if (numbers[i] > result)
result = numbers[i];
System.out.println("The max value is " + result);
}
}
Это даст следующий результат -
Output
The max value is 56.5
The max value is 3.0
Метод finalize ()
Можно определить метод, который будет вызываться непосредственно перед окончательным уничтожением объекта сборщиком мусора. Этот метод называетсяfinalize( ), и его можно использовать для обеспечения правильного завершения объекта.
Например, вы можете использовать finalize (), чтобы убедиться, что открытый файл, принадлежащий этому объекту, закрыт.
Чтобы добавить финализатор в класс, вы просто определяете метод finalize (). Среда выполнения Java вызывает этот метод всякий раз, когда собирается переработать объект этого класса.
Внутри метода finalize () вы укажете те действия, которые необходимо выполнить перед уничтожением объекта.
Метод finalize () имеет эту общую форму -
protected void finalize( ) {
// finalization code here
}
Здесь ключевое слово protected - это спецификатор, который предотвращает доступ к finalize () кодом, определенным вне его класса.
Это означает, что вы не можете знать, когда или даже будет ли выполнено finalize (). Например, если ваша программа завершится до того, как произойдет сборка мусора, finalize () не будет выполняться.