Aufrufen von Methoden in Java
Ich bin ein Anfänger und ich versuche, in den Griff bekommen, Methoden in Java. Im Allgemeinen, ich verstehe die Unterschiede zwischen statischen und nicht-statischen Methoden, aber manchmal, das Lesen anderer code, ich bin verwirrt darüber, wie Sie einen bestimmten Anruf geschrieben.
So wie ich das verstehe, statische Methode kann aufgerufen werden, mit oder ohne Objekt. Nicht-statische Methode muss ein Objekt aufgerufen werden, jedoch, wenn Sie die nicht-statische Methode aufgerufen wird, in einem anderen nicht-statische Methode, in schriftlicher form, es kann aufgerufen werden, einfach durch einen Namen(wie Methode()), ohne schriftliche Referenz auf Objekt (wie Objekt.Methode() oder .Methode()).
Ist es eine andere situation, wenn eine nicht-statische Methode aufrufen kann geschrieben werden, auf diese Weise?
Gibt es eine andere Möglichkeit zum aufrufen einer Methode hinausgehen?
Ich wäre dankbar für jegliche Kommentare.
foo()
in eine nicht-statische Methode der Klasse entspricht this.foo()
; die this
impliziert ist. Es ist nichts wirklich besonderes.Er ausdrücklich gesagt schriftlicher form vor, ich glaube, er sagte, dass ein Ausschluss Reflexion wie möglich beantworten.
InformationsquelleAutor m.cekiera | 2015-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht denken Sie von einem Aufruf einer Methode innerhalb der gleichen Klasse, z.B.:
InformationsquelleAutor spudone
Let ' s keine sorgen über statische/nicht-statische, für eine Sekunde, das ist eine andere Dose Würmer. Lassen Sie uns darüber nachdenken, welche Art von Programmen haben Sie meistens so weit; vielleicht haben Sie schon entworfen, ein Programm wie die Berechnung der Distanz zwischen zwei (x,y) - Koordinaten.
Nun, was passiert, wenn Sie verwenden möchten Sie, dass code in einer komplexeren Programm, wie ein video-Spiel, um zu bestimmen, ob dein Charakter ist Kollision in Mauer? Jetzt haben Sie 3 Koordinaten(A und B sind in die Wand und C der Figur), und Sie müssen herausfinden, den Abstand zwischen allen drei Koordinaten (AB, AC und BC). Warum? Denn wenn AB == AC + BC, dann ist unser Charakter in eine Mauer gelaufen! Hier ist ein video zu erklären, warum diese arbeiten von yours truly: Kollision-Erkennung von 2D-Punkte
Will ich haben, um immer wieder die gleiche Formel? Oder Zeit damit verschwenden, kopieren und einfügen? Nein, ich bin faul. Das ist, warum ich das Programm den computer, Dinge zu tun, für mich.
Was ich KANN zu tun, aber ist design winzige, kleine Programme, die ausgeführt werden können, ist in meinem groß -, Haupt-Programm. Diese werden als Methoden.
Nun feststellen, dass ich zwei Dinge anders.
Einen, ich den Namen meiner variable "dist" anstelle von Ferne; es ist nur guter Programmierstil nicht zu dem Namen Ihrer Variablen das gleiche wie deine Methode.
Beiden, warf ich in ein return-Anweisung. Denke nun über das erste Programm zeigte ich, was tut es, wenn es fertig ist? Nichts. Er druckt auf dem Bildschirm, und das ist es. Es schaltet sich ab und löscht den Speicher. Aber was, wenn ich die Distanz später? Nun, das ist, wo zurück kommt. Es stellt sicher, dass nach Berechnungen, vor dem löschen aus dem Speicher, und will geben Sie es zurück zu Ihnen.
Wenn Sie gelernt haben, über
Math.random()
beachten Sie, dass Sie benötigen, zu speichern oder verwenden Sie es, ansonsten ist es gut gegangen. Das ist, weilMath.random()
hat eine Rückgabetyp einer Doppel -. So etwas wieSystem.out.println()
hat einen Rückgabetyp void, weil es nicht 'return' - alles, nur wird der text auf unserem Bildschirm.Der Grundgedanke hinter der Methode ist:
<access modifier> <return type> <name> (<parameters>) { }
Den access-modifier, für jetzt, sollte gerade bleiben
public static
. Erfahren Sie mehr über Klassen höher. Diereturn type
ist die wichtige Sache, da dies wie wenn Sie eine variable; Sie hatte zu sagen, Java, welcher Datentyp es war - auf eine Methode. Sie haben zu sagen, Java, welcher Datentyp diese winzig kleines Programm zu produzieren.name
ist nicht anders als wenn Sie mit dem Namen Variablen aber jetzt müssen Sie inparameters
, die sind nur Platzhalter in der Methode, da wir nicht wissen, was die Werte/Variablen, die später verwendet werden!Nun, dass ich
distance
als eine Methode, die ich verwenden kann, es drei mal und das wo immer ich will:public static
Methode, ich haben Zugang, um es von überall (relativ gesehen)! Wenn ich Speichere meine Datei alsCollision.java
und dann eine neue DateiPacman.java
dann innerhalb meinermain method
im Pacman, die ich haben kann:Collision.distance(x1, y1, x2, y2);
Dies ist, wo die statischen Methoden ins Spiel kommen, Verweise ich auf die Klasse, es wurde gebaut, anstatt das zu tunnew Collision()
oder so ähnlich.Hinzufügen wieder, die Idee der Klasse Methoden, die jetzt sagt, was, wenn statt
doubles
wollte ich einen benutzerdefinierten Datentyp verwenden, wie einPoint
Klasse, hat seine eigenedistance(Point other) {}
Methode. Diese version vondistance
jetzt immer direkt verbunden sein mit der ursprünglichen Stelle; in der Erwägung, dass die oben genannten zwei Punkte trennen jedes mal, wenn es aufgerufen wird. EinPoint p1 = new Point(0,0);
undPoint p2 = new Point(1,1);
nun die Interaktion mit jedem anderen mit einer der Punkte, die als point Referenz (sorry, schlechtes Wortspiel), wiep1.distance(p2);
InformationsquelleAutor tsumnia
Im Grunde, Sie können rufen Sie die nicht-statische Methoden wie diese:
method();
oderthis.method();
Wenn Sie die zweite syntax mit
this
, werden Sie sagen dem compiler, dass Sie den Aufruf von der Instanz, die Sie in (expliziten).Beide funktionieren auf die gleiche Weise.
Aber, es ist ein weiteres Beispiel, das dies deutlich für Sie. Denken auf Variablen. Überprüfen Sie diesen code:
Des Objekts Variablen wird über eine lokale variable. Wenn Sie nicht verwenden
this
für die, die anrufen, würde der compiler verstehen, dass die variable, der Sie den Umgang mit war nur die lokalen.Hoffe, es hilft.
InformationsquelleAutor Laerte
Beim schreiben
this
in einer Klasse in Java (oder, wenn es impliziert ist), Sie sich auf das Objekt instanciating, dass die Klasse sothis
ist eine Referenz auf ein Objekt, nicht die Klasse.Dies ist schwer zu bekommen auf den ersten, aber es gibt einen Unterschied zwischen dem Konzept von Objekt und Klasse in der Objekt-orientierten Programmierung und daher in Java.
Beachten Sie auch, dass beim aufrufen einer statischen Methode, die Sie verwenden, den Namen der Klasse mit der statischen Methode nicht möglich, da die statische Methode ist ein Konzept definiert für die Klasse, nicht der bestimmten Objekte instanciating Klasse.
InformationsquelleAutor a_mid