Java - metody

Metoda Java to zbiór instrukcji, które są zgrupowane razem w celu wykonania operacji. Kiedy wywołujesz System.out.println() na przykład system faktycznie wykonuje kilka instrukcji w celu wyświetlenia komunikatu na konsoli.

Teraz nauczysz się, jak tworzyć własne metody ze zwracanymi wartościami lub bez nich, wywoływać metodę z parametrami lub bez oraz stosować abstrakcję metod w projekcie programu.

Metoda tworzenia

Biorąc pod uwagę następujący przykład w celu wyjaśnienia składni metody -

Syntax

public static int methodName(int a, int b) {
   // body
}

Tutaj,

  • public static - modyfikator

  • int - typ zwrotu

  • methodName - nazwa metody

  • a, b - parametry formalne

  • int a, int b - lista parametrów

Definicja metody składa się z nagłówka metody i treści metody. To samo jest pokazane w następującej składni -

Syntax

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

Przedstawiona powyżej składnia obejmuje -

  • modifier - Definiuje typ dostępu do metody i jest opcjonalne.

  • returnType - Metoda może zwrócić wartość.

  • nameOfMethod- To jest nazwa metody. Podpis metody składa się z nazwy metody i listy parametrów.

  • Parameter List- Lista parametrów, to jest rodzaj, kolejność i liczba parametrów metody. Są opcjonalne, metoda może zawierać zero parametrów.

  • method body - Treść metody określa, co metoda robi z instrukcjami.

Example

Oto kod źródłowy wyżej zdefiniowanej metody o nazwie min(). Ta metoda przyjmuje dwa parametry num1 i num2 i zwraca maksimum między dwoma -

/** 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; 
}

Wywołanie metod

Aby użyć metody, należy ją wywołać. Istnieją dwa sposoby wywołania metody, tj. Metoda zwraca wartość lub nic nie zwraca (nie zwraca wartości).

Proces wywoływania metody jest prosty. Gdy program wywołuje metodę, kontrola programu zostaje przeniesiona do wywoływanej metody. Ta wywołana metoda następnie zwraca kontrolę do obiektu wywołującego w dwóch warunkach, gdy -

  • wykonywana jest instrukcja return.
  • dociera do metody kończącej nawias zamykający.

Metody zwracające void są traktowane jako wywołanie instrukcji. Rozważmy przykład -

System.out.println("This is tutorialspoint.com!");

Metodę zwracającą wartość można zrozumieć na poniższym przykładzie -

int result = sum(6, 9);

Poniżej znajduje się przykład pokazujący, jak zdefiniować metodę i jak ją wywołać -

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; 
   }
}

To da następujący wynik -

Output

Minimum value = 6

Puste słowo kluczowe

Słowo kluczowe void pozwala nam tworzyć metody, które nie zwracają wartości. W poniższym przykładzie rozważamy metodę void methodRankPoints . Ta metoda jest metodą void, która nie zwraca żadnej wartości. Wywołanie metody void musi być instrukcją, tj. MethodRankPoints (255,7); . Jest to instrukcja języka Java zakończona średnikiem, jak pokazano w poniższym przykładzie.

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");
      }
   }
}

To da następujący wynik -

Output

Rank:A1

Przekazywanie parametrów według wartości

Podczas pracy z procesem wywołującym należy przekazywać argumenty. Powinny być w tej samej kolejności, co ich odpowiednie parametry w specyfikacji metody. Parametry mogą być przekazywane przez wartość lub przez odniesienie.

Przekazywanie parametrów przez wartość oznacza wywołanie metody z parametrem. W ten sposób wartość argumentu jest przekazywana do parametru.

Example

Poniższy program przedstawia przykład przekazywania parametru według wartości. Wartości argumentów pozostają takie same nawet po wywołaniu metody.

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);
   }
}

To da następujący wynik -

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

Przeciążanie metod

Gdy klasa ma dwie lub więcej metod o tej samej nazwie, ale różnych parametrach, jest to nazywane przeciążaniem metod. Różni się od nadpisywania. Przy zastępowaniu metoda ma taką samą nazwę metody, typ, liczbę parametrów itp.

Rozważmy omówiony wcześniej przykład znajdowania minimalnych liczb typu całkowitego. Jeśli, powiedzmy, chcemy znaleźć minimalną liczbę typów podwójnych. Następnie zostanie wprowadzona koncepcja przeciążania, aby utworzyć dwie lub więcej metod o tej samej nazwie, ale różnych parametrach.

Poniższy przykład wyjaśnia to samo -

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; 
   }
}

To da następujący wynik -

Output

Minimum Value = 6
Minimum Value = 7.3

Przeciążanie metod sprawia, że ​​program jest czytelny. Tutaj dwie metody są podane pod tą samą nazwą, ale z różnymi parametrami. Wynikiem jest minimalna liczba z typów całkowitych i podwójnych.

Korzystanie z argumentów wiersza polecenia

Czasami będziesz chciał przekazać pewne informacje do programu po jego uruchomieniu. Osiąga się to poprzez przekazanie argumentów wiersza poleceń do funkcji main ().

Argument wiersza polecenia to informacja, która występuje bezpośrednio po nazwie programu w wierszu poleceń podczas jego wykonywania. Dostęp do argumentów wiersza poleceń w programie Java jest dość łatwy. Są przechowywane jako łańcuchy w tablicy String przekazanej do funkcji main ().

Example

Poniższy program wyświetla wszystkie argumenty wiersza polecenia, które jest wywoływane z -

public class CommandLine {

   public static void main(String args[]) { 
      for(int i = 0; i<args.length; i++) {
         System.out.println("args[" + i + "]: " +  args[i]);
      }
   }
}

Spróbuj uruchomić ten program, jak pokazano tutaj -

$java CommandLine this is a command line 200 -100

To da następujący wynik -

Output

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

To słowo kluczowe

thisjest słowem kluczowym w Javie, które jest używane jako odniesienie do obiektu bieżącej klasy w metodzie instancji lub konstruktorze. Używając tego możesz odwoływać się do członków klasy, takich jak konstruktory, zmienne i metody.

Note- słowo kluczowe this jest używane tylko w metodach instancji lub konstruktorach

Ogólnie rzecz biorąc, słowo kluczowe this jest używane do -

  • Odróżnij zmienne instancji od zmiennych lokalnych, jeśli mają takie same nazwy w konstruktorze lub metodzie.

class Student {
   int age;   
   Student(int age) {
      this.age = age;	
   }
}
  • Wywołaj jeden typ konstruktora (sparametryzowany konstruktor lub domyślny) z innego w klasie. Nazywa się to jawnym wywołaniem konstruktora.

class Student {
   int age
   Student() {
      this(20);
   }
   
   Student(int age) {
      this.age = age;	
   }
}

Example

Oto przykład używający tego słowa kluczowego w celu uzyskania dostępu do członków klasy. Skopiuj i wklej następujący program do pliku o nazwie,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(); 
   }
}

To da następujący wynik -

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

Argumenty zmienne (var-args)

JDK 1.5 umożliwia przekazywanie zmiennej liczby argumentów tego samego typu do metody. Parametr w metodzie jest zadeklarowany w następujący sposób -

typeName... parameterName

W deklaracji metody określasz typ, po którym następuje wielokropek (...). W metodzie można określić tylko jeden parametr o zmiennej długości, który musi być ostatnim parametrem. Wszelkie zwykłe parametry muszą go poprzedzać.

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);
   }
}

To da następujący wynik -

Output

The max value is 56.5
The max value is 3.0

Metoda finalize ()

Możliwe jest zdefiniowanie metody, która zostanie wywołana tuż przed ostatecznym zniszczeniem obiektu przez moduł odśmiecania pamięci. Ta metoda nazywa sięfinalize( ), i może służyć do zapewnienia, że ​​obiekt kończy się poprawnie.

Na przykład możesz użyć finalize (), aby upewnić się, że otwarty plik, którego właścicielem jest ten obiekt, zostanie zamknięty.

Aby dodać finalizator do klasy, wystarczy zdefiniować metodę finalize (). Środowisko wykonawcze Java wywołuje tę metodę za każdym razem, gdy ma zamiar odtworzyć obiekt tej klasy.

W metodzie finalize () określisz akcje, które muszą zostać wykonane, zanim obiekt zostanie zniszczony.

Metoda finalize () ma tę ogólną postać -

protected void finalize( ) {
   // finalization code here
}

Tutaj słowo kluczowe protected jest specyfikatorem, który uniemożliwia dostęp do finalize () przez kod zdefiniowany poza jego klasą.

Oznacza to, że nie możesz wiedzieć, kiedy, a nawet czy finalize () zostanie wykonany. Na przykład, jeśli program zakończy się przed wyrzuceniem elementów bezużytecznych, funkcja finalize () nie zostanie wykonana.