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.