JVM == Softwareobjekt ?

Status
Nicht offen für weitere Antworten.

eugen graf

Mitglied
Hallo Leute,

eine prinzipielle Frage.

Es gibt eine Codezeile:
Code:
System.out.println("Hello World");
Wie soll ich diese verstehen?
Ist "System" eine JVM-Klasse und "Out" ein Objekt davon und "Println" eine Methode des Objektes Out?
Könnt ihr mir solche Kleinigkeit erklären?
Ich weiss, dass bei Java alles (ausgenommen Interfaces) auf auf Klassen und Objekten aufgebaut ist.

Grüsse, Eugen
 

Murray

Top Contributor
eugen graf hat gesagt.:
Ist "System" eine JVM-Klasse
Ja. Vollständig heisst diese Klasse java.lang.System; den Package-Namen kann man in diesem Fall aber auch weglassen.

eugen graf hat gesagt.:
und "Out" ein Objekt davon
out ( nicht Out) ist eine statische Variable, die innerhalb der Klasse java.lang.System deklariert ist.

eugen graf hat gesagt.:
und "Println" eine Methode des Objektes Out?
println ( nicht Println) ist eine Methode der Klasse java.io.PrintStream (das ist der Typ, als der die Variable out in der Klasse java.lang.System deklariert ist)
 

eugen graf

Mitglied
Danke für die Antwort.

Ich will mich nicht dumm stllen, ich habe jetzt verstanden, dass eine Variable (auch statische) "out" vom Typ "PrintStream" die Methode "println" haben kann. Aber warum diese Punktschreibweise?

Warum nicht
Code:
out.println();

Muss denn der ganze Ableitungsbaum hin?

Gruss
 
B

Beni

Gast
Wenn du in einer Methode bist, hast du nur direkten Zugriff auf Variablen die in deiner Klasse oder in der Methode definiert wurden.
Wenn du nur "out.println()" schreibst, was ist dann "out"? Woher soll der Compiler wissen, dass du das "out" aus der Klasse "System" meinst, und nicht irgendein beliebiges anderes?
 

eugen graf

Mitglied
Sorry, ich glaube ich habe es verstanden.
Ich mache viel zu viel OOP und keine Syntax.

Also die Klasse "System" hat eine Variable "out" vom Typ "java.io.PrintStream", die wiederrum die Methode println() hat. Um an die zuletztgenannte Methode ran zu kommen, muss man diese durch die Variable und die Klasse (in der diese Variable definiert ist) durch die Punktschreibweise aufrufen.

OK?

Danke
 

Illuvatar

Top Contributor
Bei deinem Code, woher soll Java wissen, wo/was out ist? Du musst immer ausgehend von etas, was an der Programmstelle bekannt ist, dich zu der Methode/Variable "vorarbeiten", die du haben willst.

Anmerkung. In Java5 kann man per
Code:
import static java.lang.System.*;
alles statische aus System importieren, so dass dein Code funktionieren würde ;)
 
B

Beni

Gast
Wie es zur Laufzeit im Speicher tatsächlich aussieht, kann ich nicht sagen.

Aber rein semantisch, wird hier schon auf die Klasse, und nicht auf irgendein Objekt zugegriffen.
Wenn es ein Objekt wäre, müsste "System" eine Variable sein. In deiner Klasse wurde aber niergends eine solche Variable definiert, und Variablen tauchen nicht einfach so aus dem Nichts auf.
 

eugen graf

Mitglied
Im Speicher sieht es ganz bestimmt anders aus (0101001101010101010101010101) :noe:


Aber man muss doch zuerst eine Klasse definieren und danach ein Objekt davon erzeugen(instanziieren). Oder kann man direkt ein Objekt anlegen ohne zuerst den Typ festzulegen? Kann man beide Schritte in einem machen?
 

PyroPi

Aktives Mitglied
eugen graf hat gesagt.:
Aber man muss doch zuerst eine Klasse definieren und danach ein Objekt davon erzeugen(instanziieren).
Das macht man gewöhnlich so. Um auf statische Variablen/Methoden zuzugreifen, muß aber keine Instanz erzeugt werden. Man kann diese Methoden direkt aufrufen durch Klassenname.methode(parameter).
Die Klasse System ist so ein Sonderfall, sie besteht nur aus statischen Variablen/Methoden und ist nicht instanziierbar.

eugen graf hat gesagt.:
Oder kann man direkt ein Objekt anlegen ohne zuerst den Typ festzulegen?
Nein, das geht nicht. Jedem Objekt muß ein Typ zugeordnet werden, selbst wenn es nur der allgemeinste Typ Object ist.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben