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 () не будет выполняться.