Einführung
In diesem Lab gehen wir auf Methoden und Objekte ein. Die Aufgabe besteht darin, zu lernen, wie man eine Methode mit Parametern definiert. Ein Objekt ist ein sehr wichtiger Begriff in der OOP-Sprache, daher hilft es Ihnen, sich gut damit auszukennen.
Methoden und Parameter
In einigen Fällen benötigen Sie Code, der wiederverwendet werden kann, um ähnliche Probleme zu lösen, wie zum Beispiel das Ausgeben des Alters und des Namens einer Person. Für verschiedene Personen sind Name und Alter unterschiedlich. Diese beiden Variablen können als Parameter an einen Codeblock übergeben werden. Hier führen wir das Konzept der Methode ein, die die Aufgabe ausführen wird.
Beispiel:
Schreiben Sie folgenden Code in die Datei /home/labex/project/methodTest.java:
public class methodTest
{
public static void main(String[] args)
{
// rufen Sie unsere selbst definierte Methode auf
printInfo("Mike", 18);
// rufen Sie unsere selbst definierte Methode auf
System.out.println(fibonacci(10));
System.out.println(fibonacciNormal(10));
}
// definieren wir eine Klassenmethode, um persönliche Informationen auszugeben
public static void printInfo(String name, int age){
System.out.println("Hello " + name + ", your age is " + age);
}
// definieren Sie eine Klassenmethode, um die Fibonacci-Zahlen rekursiv zu berechnen
public static int fibonacci(int n){
if(n<=2){
return 1;
}else{
return fibonacci(n-1)+fibonacci(n-2);
}
}
// definieren Sie eine Klassenmethode, um die Fibonacci-Zahlen mit einer Iterationsschleife zu berechnen
public static int fibonacciNormal(int n){
if(n<=2){
return 1;
}
int n1=1,n2=1,sum=0;
for(int i=0;i<n-2;i++){
sum=n1+n2;
n1=n2;
n2=sum;
}
return sum;
}
}
Ausgabe:
Führen Sie die Datei methodTest.java mit folgenden Befehlen aus:
javac /home/labex/project/methodTest.java
java methodTest
Sehen Sie sich die Ausgabe an:
Hello Mike, your age is 18
55
55
Im obigen Beispiel schreiben wir eine Funktion namens printInfo. Sie können sie wie Sie möchten benennen. Es gibt zwei Parameter und der Rückgabetyp ist void, was bedeutet, dass nichts zurückgegeben wird. Sie können den Rückgabetyp Ihrer Funktion als beliebigen Typ festlegen, den Sie benötigen, und die Anzahl und die Typen der Parameter können beliebig sein. Sie können Ihre Methode wie folgt definieren:
Beispiel:
public/private static/final/{nicht erforderlich} RETURN_TYPE METHOD_NAME( LIST OF PARAMETERS ) {
// STATEMENTS
}
public String getName(){}
public void setName(){}
public static void newInstance(){}
public final String msg(){}
Java stellt viele Funktionen zur Verfügung, die die häufigsten Operationen als integrierte Bibliotheksmethoden ausführen, wie mathematische Funktionen. Diese Funktionen werden Methoden genannt. Die Methoden werden mit einer Syntax aufgerufen, die ähnlich der Print-Anweisungen ist, die wir bereits kennen:
Beispiel:
double root = Math.sqrt(16.0); // root = 4.0
double height = Math.sin(1.5); // height = 0.9974949866040544
Objekt
In Java gibt es zwei Arten von Typen: primitive Typen und Objekttypen. Primitives wie int und boolean beginnen mit Kleinbuchstaben; Objekttypen beginnen mit Großbuchstaben. Diese Unterscheidung ist nützlich, da sie uns einige der Unterschiede zwischen ihnen in Erinnerung bringt:
Wenn Sie eine primitive Variable deklarieren, erhalten Sie Speicherplatz für einen primitiven Wert. Wenn Sie eine Objektvariable deklarieren, erhalten Sie einen Speicherplatz für eine Referenz auf ein Objekt. Um Speicherplatz für das Objekt selbst zu erhalten, müssen Sie den
new-Operator verwenden.
Wenn Sie eine primitive Variable nicht initialisieren, wird ihr ein Standardwert zugewiesen, der von ihrem Typ abhängt. Beispielsweise
0fürintundfalsefürboolean. Der Standardwert für Objekttypen istnull, was angibt, dass kein Objekt von den Referenzvariablen referenziert wird.
Primitive Variablen sind gut isoliert, in dem Sinne, dass Sie nichts tun können, was in einer Methode einen Effekt auf eine Variable in einer anderen Methode hat. Objektvariablen können schwierig zu verwenden sein, da sie nicht so gut isoliert sind. Wenn Sie eine Referenz auf ein Objekt als Argument übergeben, kann die Methode, die Sie aufrufen, das Objekt modifizieren, und Sie werden dann den Effekt sehen. Natürlich kann das auch ein gutes Ding sein, aber Sie müssen sich dessen bewusst sein.
Wenn wir primitive Variablen an eine Methode übergeben (Parameterübergabe per Wert), kopieren wir tatsächlich die Werte der Primitives und verwenden die Kopien innerhalb der Methode. Alle Operationen innerhalb der Methode arbeiten auf den Kopien; und außerhalb der Methode bleiben die Werte der primitiven Variablen unberührt. Wenn wir jedoch nicht-primitive Objekte an eine Methode übergeben (Parameterübergabe per Referenz), übergeben wir die Referenzvariablen an die Methode. Alle Operationen werden tatsächlich die ursprünglichen Objekte verwenden und/oder beeinflussen.
Beispiel:
Schreiben Sie folgenden Code in die Datei /home/labex/project/objectTest.java:
public class objectTest {
public static void main(String[] args){
// verwenden Sie new, um ein Arrayobjekt mit zwei Elementen zu erstellen
int[] numbers = new int[2];
// weisen Sie Werten an das Arrayobjekt zu
numbers[0] = 1;
numbers[1] = 2;
// erstellen Sie primitive Variablen auf diese Weise
int a = 1, b = 2;
// erstellen Sie ein Testobjekt
objectTest test = new objectTest();
test.changeInt(a, b);
System.out.println("Now a is " + a + ", b is " + b);
test.changeArray(numbers);
System.out.println("Now numbers contain:");
for(int i : numbers){
System.out.print(i + "\t");
}
}
// definieren Sie eine Objektmethode, um int-Werte zu ändern
public void changeInt(int a,int b){
a = 2;
b = 3;
System.out.println("In changeInt method, a is " + a + ", b is " + b);
}
// definieren Sie eine Objektmethode, um Arraywerte zu ändern
public void changeArray(int[] number){
for(int i = 0;i < number.length;i++){
number[i] = number[i]+1; // ändern Sie den Wert des Arrayelements um 1 erhöhen
}
System.out.println("In changeArray method, numbers contain:");
for(int i : number){
System.out.print(i + "\t");
}
System.out.println();
}
}
Ausgabe:
Führen Sie die Datei objectTest.java im Terminal mit dem folgenden Befehl aus:
javac /home/labex/project/objectTest.java
java objectTest
Sehen Sie sich die Ausgabe an:
In changeInt method, a is 2, b is 3
Now a is 1, b is 2
In changeArray method, numbers contain:
2 3
Now numbers contain:
2 3
Es gibt noch einen anderen Unterschied zwischen Primitiven und Objekttypen. Sie können keine neuen Primitiven zu Java hinzufügen (es sei denn, Sie befinden sich auf dem Standardsausschuss), aber Sie können neue Objekttypen erstellen! Wir werden sehen, wie das im nächsten Kapitel geht.
Zusammenfassung
Methoden sind in Klassen üblich. Eine Methode ist ein Codeblock, der einige spezielle Operationen ausführt. Java stellt viele vordefinierte Klassen zur Verfügung, die wir direkt verwenden können. Es gibt zwei Möglichkeiten, Parameter an Methoden zu übergeben: per Wert und per Referenz. Ihre Effekte sind unterschiedlich. Im nächsten Lab werden wir sie Ihnen vorstellen. Wir hoffen, dass das hilfreich sein wird.



