public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
Hier gibt es nichts Kompliziertes: eine Java-Methode, deren Aufgabe es ist, eine Begrüßungszeichenfolge mit dem Namen zu generieren, den wir ihr übergeben. Wie zum Beispiel: Hello world! My name is Bobby
Lassen Sie uns den Aufbau einer Methode richtig verstehen, indem wir uns jedes Schlüsselwort in der Methodendeklaration ansehen (von links nach rechts). Unser erstes Schlüsselwort ist public
und bezeichnet einen Zugriffsmodifikator:
Zugriffsmodifikatoren
Sie geben den zulässigen Sichtbarkeitsbereich für Klassenmitglieder an, also die Einschränkung der Stellen, an denen eine Variable oder Methode verwendet werden darf. Die folgenden Zugriffsmodifikatoren werden in Java verwendet:-
öffentlich : öffentlich. Methoden oder Felder mit diesem Modifikator sind öffentlich und für andere Klassen (bzw. deren Methoden und Felder) aus dem aktuellen Paket und aus externen Paketen sichtbar. Dies ist die umfassendste bekannte Zugriffsebene.
-
protected : Auf Methoden oder Variablen mit diesem Modifikator kann von überall in der aktuellen Klasse oder dem aktuellen Paket oder in Klassen, die diesen erben, sowie auf Methoden oder Felder zugegriffen werden, selbst wenn sie sich in anderen Paketen befinden
protected String constructHelloSentence(String name) {...}
-
Standardmodifikator. Wenn ein Klassenfeld oder eine Methode keinen Modifikator hat, wird der Standardmodifikator angewendet. In diesem Fall sind die Felder oder Methoden für alle Klassen im aktuellen Paket sichtbar (wie protected , jedoch ohne Sichtbarkeit bei der Vererbung).
String constructHelloSentence(String name) {...}
-
private : das Gegenteil des öffentlichen Modifikators . Eine Methode oder Variable mit einem solchen Modifikator ist nur in der Klasse verfügbar, in der sie deklariert ist.
private String constructHelloSentence(String name) {...}
String
die Methodensignatur (die erste Zeile der Methode, die ihre Eigenschaften beschreibt).
Rückgabewert
Der Rückgabewert sind die Daten (ein Ergebnis der Methodenausführung), die nach dem Aufruf an ihre Stelle treten. Jede Methode hat einen Rückgabewert. Oder nicht?Rückgabewertmethoden
Dieser Wert kann ein beliebiger Datentyp sein: eine Variable eines einfachen Typs oder ein Referenztyp. In diesem Beispiel geben wir an, dass die Methode ein Objekt vom Typ zurückgeben mussString
, bei dem es sich, wie wir uns erinnern, um eine Klasse handelt, die einen String beschreibt. Der zweite Punkt hier ist das Wort return
. Es hat eine direkte Beziehung zum Rückgabewert: Der Wert danach wird an die Stelle zurückgesendet, an der die Methode aufgerufen wurde, und die Methode selbst wird dann return
geschlossen. Dieses Wort erscheint normalerweise in der letzten Zeile der Methode (außer bei Methoden mit mehreren Zweigen wie if, else..
.). Wenn Sie den Code in die nächste Zeile danach schreiben return
:
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
Dann bekommen wir Flüche vom Compiler, was nicht sehr gut ist (der Compiler empfiehlt keinen Unsinn). Sie müssen auch bedenken, dass der Datentyp danach с
mit dem in der Methodensignatur deklarierten übereinstimmen muss. return
Lesen Sie hier mehr darüber .
Leere
Wofür wird es in Java verwendetvoid
? Nicht alle Methoden haben einen Rückgabewert. Manche haben entweder nichts oder müssen nichts zurückgeben. Was ist dann zu tun? Dann schreiben wir in die Methodensignatur void
. Wie würde unsere Methode ohne Rückgabewert aussehen?
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
Sie haben wahrscheinlich bemerkt, dass zusammen mit dem Rückgabewert das Wort „ return
So it is“ verschwunden ist, da unsere Methode nichts zurückgeben sollte. Es kann jedoch hier platziert werden, jedoch ohne Bedeutung, nur return
; in der letzten Zeile. Dies ist im Allgemeinen nutzlos und daher void
in Methoden mit optional. Es kann jedoch sinnvoll in void
Methoden wie Verzweigungen oder Schleifen verwendet werden, bei denen Sie die Methode sofort verlassen möchten. Als nächstes hatten wir in der Methodendeklaration constructHelloSentence
.
Methodennamen
constructHelloSentence
- der Name der Methode, ein charakteristisches Merkmal, anhand dessen wir die eine oder andere Methode unterscheiden können. Rufen Sie dementsprechend die eine oder andere Methode auf. Methodennamen müssen mit einem Kleinbuchstaben beginnen, dürfen aber auch die Kamel-Schreibweise (CamelCase, Kamel-Fall) verwenden: d. h. Jedes nächste Wort im Namen grenzt an das vorherige an und wird mit einem Großbuchstaben geschrieben. Methodennamen sollten die Methode beschreiben (der beste Kommentar ist die richtige Benennung). Verwenden Sie dazu Verben oder Kombinationen mit Verben: getCat
, delete
, createCar
usw. Innerhalb einer Klasse müssen Methodennamen eindeutig sein (Methodenüberladung nicht mitgerechnet, worüber wir etwas später sprechen werden). Schauen wir uns die Methode, die wir analysieren, genauer an und sehen ( String name
)
Methodenparameter
Methoden können bestimmte Daten enthalten (oder auch nicht), die von außen stammen, nämlich von dem Ort, an dem die Methode aufgerufen wurde. In unserem Fall sehen wir, dass ein TypobjektString
mit einem Namen ankommt name
, und in Zukunft verwenden wir diese Variable in unserer Methode. Sie können eine unbegrenzte Anzahl von Parametern in einer Methode verwenden, mehr als 7 werden jedoch nicht empfohlen. Wenn wir die genaue Anzahl der Elemente nicht kennen, aber alle diese Elemente für denselben Zweck benötigt werden und vom gleichen Typ sind (z. B. String
), werden Auslassungspunkte verwendet:
public void constructHelloSentence(String...name) {
...
}
Die Anziehungskraft auf jedes Element wird wie folgt aussehen: name[0]
Erinnert es Sie an irgendetwas? Genau, Array! Es wird sich nichts ändern, wenn wir schreiben:
protected void constructHelloSentence(String[] name) {
...
}
Der Zugriff auf die Elemente wird ebenfalls die Form haben: name[1]
Und noch etwas. Methodenargumente können endgültig sein :
public String constructHelloSentence(final String name) {
...
}
Dies bedeutet, dass die Namensreferenz an ein bestimmtes Objekt gebunden ist String
und nicht überschrieben werden kann. Informationen zum Arbeiten mit Referenzvariablen und deren Interaktion mit reservierten Wörtern final
finden Sie im Material „ Referenzdatentypen in Java “.
Aufrufende Methoden
Wir haben uns also mit der Erstellung von Methoden befasst. Lassen Sie uns nun über deren Verwendung sprechen. Wie rufe ich eine Methode in Java auf? Jede Methode in Java ist in einer Klasse. Um zu verstehen, wie das Aufrufen von Methoden in Java funktioniert, nehmen wir eine Klasse:public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
Da unsere Methode nicht statisch ist (dies ist ein separates Diskussionsthema, das den Rahmen des heutigen Artikels sprengt), müssen Sie zum Aufrufen zunächst ein Objekt erstellen und dann die Methode darauf aufrufen:
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
In den Argumenten unserer Methode haben wir die Zeichenfolge (Name) übergeben, die wir in der resultierenden Zeichenfolge auf dem Bildschirm sehen möchten:
Hello world! My name is Den
Denken Sie auch daran, dass Methoden beliebig oft wiederverwendet werden können – es gibt keine Einschränkungen.
Das
Sie können das Schlüsselwort häufig in Code sehenthis
, beispielsweise in Settern:
public void setValue(Long value) {
this.value = value;
}
Und was bedeutet das? this
In Java ist dies ein Verweis auf das aktuelle Objekt dieser Klasse. Wenn wir beispielsweise ein Objekt erstellt haben:
StringConstructor stringConstructor = new StringConstructor();
dann gibt es this
innerhalb des Objekts einen Link zu demselben Objekt. wird sowohl zum Verweisen auf eine Objektvariable (wie im Setter oben) als auch zum Aufrufen einer Methode verwendet. Wir können unsere Klasse ein wenig umschreiben: stringConstructor
this
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
Wir this
rufen die Methode dieses Objekts auf, um die erforderliche Zeichenfolge zu erhalten. Dennoch wird dies in der Regel fast nicht für Methoden verwendet, da auch ohne es eine Referenz auf eine Methode eines bestimmten Objekts vorliegt; hauptsächlich wird es für eine Objektvariable verwendet.
Methodenüberladung
Nehmen wir an, wir brauchten eine Methode, die im Wesentlichen die gleiche Logik ausführt, aber in einemHello world
! Stattdessen world
wollen wir unser eigenes Wort (String) einfügen. Aber wir haben bereits eine Methode constructHelloSentence
. Müssen wir uns also einen neuen Namen für eine Methode ausdenken, die im Wesentlichen die gleiche Funktionalität ausführt? Egal wie es ist: In diesem Moment kommt uns die Methodenüberladung zu Hilfe. Unter Methodenüberladung versteht man die mehrmalige Verwendung desselben Methodennamens bei der Deklaration in einer Klasse. Aus Sicht der Sprachsyntax kann es in einem lokalen Raum nicht zwei identische Namen geben. Es ist aber auch möglich, Methoden mit gleichen Namen, aber unterschiedlichen Argumenten zu deklarieren. Mit anderen Worten: Eine Klasse enthält Überladungen, wenn es zwei oder mehr Methoden mit demselben Namen, aber unterschiedlichen Eingabedaten gibt:
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
Hier sehen wir, dass Methoden nicht denselben Zugriffsmodifikator (sowie den gleichen Rückgabetyp) enthalten müssen. Wird eine überladene Methode aufgerufen, ermittelt der Compiler aus mehreren deklarierten Methoden anhand der beim Aufruf angegebenen Parameter automatisch die benötigte.
GO TO FULL VERSION