Ein Aufruf den ich nicht verstehe

Pentalon

Bekanntes Mitglied
Hallo Leute

Ich freunde mich seit einiger Zeit mir Unterbrechungen mit der Sprache Java an.
Das klappt zu grössten Teil aber so manche Notation verstehe ich nicht.

Was soll mir das sagen:
Java:
img=Toolkit.getDefaultToolkit().createImage(getClass().getClassLoader().getResource(name));

Toolkit ist mir noch klar, dann kommt getDefaultToolKit() das eine Methode von Toolkit ist
aber dann kommt .createImage( ?!?!?! Ist das jetzt eine Methode von getDefaultToolkit() ?

Das gleiche dann im Parameter:
Code:
getClass().getClassLoader().getResource(name)
. Wie stehen diese
3 Methoden miteinander in Verbindung ? Ich hab versucht das in der Klassenbibliothek aufzulösen, jedoch nicht sehr erfolgreich.

Über eine logische und leichtverständliche Erklärung würde ich mich sehr freuen.

Danke im Voraus,
Pentalon
 

Network

Top Contributor
Java:
Toolkit.getDefaultToolkit()
Liefert ein Objekt zurück von der Klasse Toolkit.

Java:
Toolkit.getDefaultToolkit().createImage(
Eine Methode der Klasse Toolkit die ein Image erstellt.


Das selbe mit den anderen:
Java:
getClass() // Liefert ein Objekt zurück mit der...
.getClassLoader() // ... Methode die ein Objekt zurückliefert mit der...
.getResource(name) // ... Methode.
 

Pentalon

Bekanntes Mitglied
Danke für die rasche Anwort.

Würde man das nicht so schreiben:
Code:
getClass(getClassLoader(getResource(name)))

Pentalon
 

MWCS

Mitglied
Nein, denn

[Java]getClass(getClassLoader(getResource(name)))[/Java]

wird von hinten aufgelöst. getResource() ist eine Methode von ClassLoader. Also brauchst du erst ein ClassLoader um dann die Resource zu holen.

Mann kann sagen das

Java:
getClass(getClassLoader(getResource(name)))
In diese Richtung aufgelöst wird:
<----

während

Java:
getClass().getClassLoader().getResource(name)
in diese Richtung aufgelöst wird:
---->
 

Marco13

Top Contributor
Oder so:
Java:
Toolkit.getDefaultToolkit().createImage(...)
könnte man auch schreiben als
Java:
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.createImage(...)
aber das erste bietet sich in diesem Fall an, weil man die 'Toolkit'-Variable ja nicht braucht (und sie sich auch nie ändert ;) )
 

Pentalon

Bekanntes Mitglied
Vielen Dank. Das konnte etwas Licht in die Angelegenheit bringen.

Java:
img=Toolkit.getDefaultToolkit().createImage(getClass().getClassLoader().getResource(name));

Das heisst dann, dass alle Methoden hinter dem Punkt auf dem Toolkit Objekt (dass ja statisch ist) basieren (in diesem Fall), dass aber gleich on the Fly (also nicht zuerst in eine Variable gespeichert wird) benutzt wird, weil es nur für diese eine Sache benötigt wird.
Das muss dann wohl auch für den Parameter gelten, sonst würde ja etwas dastehen :)

Java:
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.createImage(
      toolkit.getClass()
      toolkit.getClassLoader()
      toolkit.getResource(name)
);

Puh, eine etwas ungewöhnliche Notation für mich. Daran muss ich mich erst gewöhnen, bzw. noch darüber brüten, bis sich mir das ganz erschliesst.

Gibt es eventuell irgendwo weitere Ausführungen zu diesem Thema, oder Stichworte nach denen man suchen sollte ?
Ich hab einige Wälzerzum Thema Java, ich wüsste aber nicht wie ich hier suchen soll.

Danke jedenfalls für die guten Tipps,
Pentalon
 

HoaX

Top Contributor
{JAVA]
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.createImage(
toolkit.getClass()
toolkit.getClassLoader()
toolkit.getResource(name)
);[/code]
Nein. Was nach dem Punkt kommt, bezieht sich auf den Rückgabewert der Methode vor dem Punkt. Also:

Java:
Class c = getClass();
Class cl = c.getClassLoader();
URL r = cl.getResource(name);

Toolkit t = Toolkit.getDefaultToolkit();
t.createImage(r);
 

Michael...

Top Contributor
Gibt es eventuell irgendwo weitere Ausführungen zu diesem Thema, oder Stichworte nach denen man suchen sollte ?
Weitere Ausführungen wüsste ich keine, wüsste auch nicht was man dazu grossartig ausführen kann, außer, dass:
- Methoden Objekte zurückgeben können
- man an Objekten Methoden aufrufen kann
- Methoden Objekte zurückgeben können
usw.
Wenn man die "zwischendurch" gelieferten Referenzen auf Objekte nicht benötigt, kann man einen solchen Aufruf eben auch zu einer Zeile "verketten".
Das einzig außergewöhnliche an dem Toolkit Beispiel ist, dass zuerst eine statische Methode an der Klasse Toolkit aufgerufen wird, die liefert aber wiederum eine Referenz auf ein Objekt zurück an der man wiederum Methoden aurufen kann.
 

Pentalon

Bekanntes Mitglied
Aaaaaaahhhhhhh.......
Jetzt hat es klick gemacht.

Vielen Dank euch allen für die vielen kleinen produktiven und zielgerichteten Schubser.
Der entscheidende Finalschubser, der die Lampe ganz zum leuchten brachte, kam dann von HoaX :)

Danke danke danke...
Pentalon
 
J

J7Dev

Gast
Um es mal mit einem Wort auf den Punkt zu bringen : das ganze heißt "Verkettung".

Dabei bezieht sich die Nachfolgende Methode immer auf den Rückgabewert der vorherigen. Dabei gibt es noch einen Unterschied zwischen statischen und nicht statischen Methoden. Statische Methoden können direkt ohne Objekt aufgerufen werden, nicht-statische Methoden brauchen hingegen immer ein Objekt auf das diese angewendet werden können.

Toolkit.getDefaultToolkit() ist eine solche statische Methode. Das heißt du kannst diese Methode der Klasse Toolkit callen OHNE vorher ein Toolkit-Objekt zu haben. getDefaultToolkit() liefert nun als return ein Objekt der Klasse Toolkit, so das auf dieses Objekt nun weitere nicht-statische Methoden der Klasse Toolkit angewendet werden können. Das ist dann z.B. createImage(). Diese Methode verlangt zum einen ein Objekt von Toolkit (was über Toolkit.getDefaultToolkit() geliefert wird) als auch einen sog. Übergabeparameter (in dem Fall ein Objekt vom Typ URL).

Also schreibt man
Java:
Image image=Toolkit.getDefaultToolkit().createImage(PARAMETER);
Toolkit ist die Klasse [JAPI]Toolkit[/JAPI]. die statische Methode getDefaultToolkit gibt ein Objekt von Toolkit zurück. Und DESSHALB kann man die sog. Verkettung darauf anwenden.

Nun gibt es aber noch den PARAMETER. Hier wird in deinem Beispiel ein Objekt des Types URL erwartet. Um also nun an die URL deiner Resource zu kommen brauchst du erstmal einen ClassLoader den man sich am besten vom aktuellen Objekt (oder besser dessen Klasse) holt.
Da in Java grundsätzliche JEDE Klasse von java.lang.Object erbt enthält natürlich auch JEDE Klasse die Methoden aus Object. Eine davon ist getClass(). Da nun eine Klasse von Object erbt ist getClass() in dieser auch direkt verfügbar und man kann sie direkt callen. Man könnte auch noch THIS verweden, ist aber in diesem Kontext unnötig, denn THIS ist immer eine Referenz auf das aktuelle Objekt.
Nach dem man sich über Object.getClass() die Klasse des aktuellen Objektes geholt hat kann man sich (wieder über Verkettung) deren ClassLoader besorgen : Class.getClassLoader(). Da hier wieder ein Objekt von Class nötig ist wir "Class" durch "(this.)getClass()" ersetzt.
Nun hat man den ClassLoader der Klasse des aktuellen Objektes und kann sich nun relativ zu dieser eine Resource laden via ClassLoader.getResource(String). getResource() erwartet auch einen Parameter, diesmal vom Typ "String", also einer einfachen Zeichenkette die dem Namen der Resource entspricht, z.B. "Bild.jpg". Das ganze gut nun rückwärts und liefert dir am Ende dein "Bild.jpg" als "Image"-Objekt.


Das was du mit getClass(getClassLoader(getResource())) meinst sind lediglich geschachtelte Parameter. Davon abgesehen das das so nicht geht müsste es wenn überhaupt so lauten : getResource(getClassLoader(getClass(this)), "Bild.jpg") ... oder so ähnlich jedenfalls.



Dir scheinen wirklich noch elementare Grundlagen zu fehlen ... oder du begreifst einige logische Zusammenhänge nicht.
 

Pentalon

Bekanntes Mitglied
Dir scheinen wirklich noch elementare Grundlagen zu fehlen ... oder du begreifst einige logische Zusammenhänge nicht.
Und im Anfängerforum würde ich erwarten dass ich nicht dummm angemacht werde.
Solange ich fragen lese, wie "wie kann ich etwas ohne 50 if mache" denke ich nicht dass ich die dümmste Frage aller Zeiten gestellt habe. Deine persönliche Beurteilung hättest Du Dir getrost an den Hut stecken können.

Pentalon
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Verstehe einen Aufruf absolut nicht Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
H Aufruf einer Instanzmethode funktionert nicht. Java Basics - Anfänger-Themen 6
C Aufruf funktioniert nicht Java Basics - Anfänger-Themen 10
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
U Externer aufruf zum Fenster erstellen will nicht Java Basics - Anfänger-Themen 2
M Aufruf von jar geht nicht Java Basics - Anfänger-Themen 2
2 Aufruf einer Methode klappt nicht Java Basics - Anfänger-Themen 3
Paule Aufruf nicht statischer Methode in statischer MEthode Java Basics - Anfänger-Themen 7
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
J Klassen Reihenfolge beim Aufruf von Klassen Java Basics - Anfänger-Themen 1
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
O Frage zum Aufruf überladener Methoden Java Basics - Anfänger-Themen 4
G funktions Aufruf aus GUI Java Basics - Anfänger-Themen 9
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
W Zeitversetzter Aufruf der Methoden Java Basics - Anfänger-Themen 6
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3
D Methode mit mehren Rekursiven aufrufen in Methode mit einem Rekursiven Aufruf umwandeln! Java Basics - Anfänger-Themen 1
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
A Konstruktor Aufruf Java Basics - Anfänger-Themen 4
D dynamischer Aufruf Java Basics - Anfänger-Themen 2
N Aufruf der Methode Java Basics - Anfänger-Themen 16
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
P URL für Lokalen Aufruf Java Basics - Anfänger-Themen 5
C OOP Aufruf von Methoden höherer Sichtbarkeit Java Basics - Anfänger-Themen 10
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
A Aufruf von Konstruktor aus Basisklasse Java Basics - Anfänger-Themen 7
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
D Array Methoden Aufruf. Java Basics - Anfänger-Themen 14
L Klassen Aufruf einer ueberschreibbaren Methode im Konstruktor Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
Q Aufruf einer Klasse in einem Package Java Basics - Anfänger-Themen 7
T Aufruf einer Methoden aus einer Util-Klasse mit privatem Konstruktor Java Basics - Anfänger-Themen 7
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
C Exception beim Aufruf einer Methode Java Basics - Anfänger-Themen 2
A Aufruf einer Methode Java Basics - Anfänger-Themen 3
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
T Shell Script Aufruf mit Java Java Basics - Anfänger-Themen 7
R Aufruf statische Methode Java Basics - Anfänger-Themen 7
M Aufruf zum Objekt erstellen aus String Java Basics - Anfänger-Themen 5
K OOP Nachteil bei direktem Aufruf von run() auf Thread-Objekten Java Basics - Anfänger-Themen 2
J Aufruf der Methode Java Basics - Anfänger-Themen 6
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
E Konstruktor-Aufruf Java Basics - Anfänger-Themen 9
C Aufruf einer Funktion Java Basics - Anfänger-Themen 3
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
L Methoden aufruf Java Basics - Anfänger-Themen 3
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
N Methoden aufruf Java Basics - Anfänger-Themen 7
K Methoden aufruf von einer anderen Klasse Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Mehrere Objekte einer Klasse aber nur einmal Konstruktor aufruf? Java Basics - Anfänger-Themen 2
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
F Aufruf von Methoden hintereinander gechachtelt??? Java Basics - Anfänger-Themen 8
E Mehrfache print ausgabe ohne Schleife oder Rekursiven aufruf? Java Basics - Anfänger-Themen 48
radiac CMD Windowskonsole und java aufruf in Vista 64 Java Basics - Anfänger-Themen 2
D Aufruf von WGET aus Java Java Basics - Anfänger-Themen 5
F Variabler Aufruf einer Methode Java Basics - Anfänger-Themen 10
F Methoden Aufruf Java Basics - Anfänger-Themen 4
L abgeleitete Klasse - Aufruf mit vererbter Klasse? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben