Referenzen zu Instanzen einer Klasse im Array

cryblood

Mitglied
Ich hab folgende Klasse erstellt und versuche in mein Array Referenzen auf Instanzen dieser zu erzeugen. Der erste Befehl funktioniert, beim 2. meckert der Compiler. In der main-Methode gehen aber beide. Warum ist das so ?

public class Buch {

Buch[]a = new Buch[10];
for (int i=0;i<a.length;i++) a = new Buch();

public static void main(String[] args) {

}
}
 

Michael...

Top Contributor
Ich hab folgende Klasse erstellt und versuche in mein Array Referenzen auf Instanzen dieser zu erzeugen. Der erste Befehl funktioniert, beim 2. meckert der Compiler. In der main-Methode gehen aber beide. Warum ist das so ?

public class Buch {

Buch[]a = new Buch[10];
for (int i=0;i<a.length;i++) a = new Buch();

public static void main(String[] args) {

}
}

Weil sich diese Zeilen im Deklarationsbereich der Klasse befinden. Hier könnten nur Variablen deklariert und instanziiert aber kein Code "ausgeführt" werden.
 

cryblood

Mitglied
Weil du keine Schleife mitten in der Klasse außerhalb jeder Methode ausführen kannst? :autsch:
Nee die Schleife ist nicht der Grund.

Weil sich diese Zeilen im Deklarationsbereich der Klasse befinden. Hier könnten nur Variablen deklariert und instanziiert aber kein Code "ausgeführt" werden.

Was meinst du mit "kein Code ausgeführt werden" ?

ist "a = new Buch();" keine Instanziierung?
was ist der unterschied zu dem hier ? Buch b = new Buch(); ? <--- das geht nämlich
 

njans

Top Contributor
Habs mal etwas eingrrückt :)

Java:
public class Buch 
{
  public static void main(String[] args) 
  {
    // Code wird nur innerhalb von Methoden ausgeführt
    Buch[]a = new Buch[10];
    for (int i=0;i<a.length;i++) 
      a[i] = new Buch();
  }
}

In deinem Code führst du den Code außerhalb der main-Methode aus. Da dürfte der Compiler dir schon Fehlermeldungen werfen :)

Code:
In der main-Methode gehen aber beide. Warum ist das so ?
Weil du mit dieser Aussage:
Java:
Buch[]a = new Buch[10];
Nur eine Variable deklarierst und gleich initialisierst. Das kannst du in einer Klassse außerhalb einer Methode machen (normalerweise würde man dann private davor schreiben, damit diese Variable nur innerhalb der Klasse gesehen werden kann).

Die for-Schleife ist Code, der nur innerhalb von Methoden ausgeführt werden kann.
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Du kannst außerhalb von Methoden nur eine Variable deklarieren und ihr direkt einen Wert zuweisen.
[Java]
// Gültig, hier wird eine Variable a[] als Array von Buch deklariert und bekommt direkt den Wert zugewiesen
Buch[]a = new Buch[10];
// Ungültig, hier deklarierst Du keine Variablen, sondern versuchst, in einer Schleife
// vielen bereits deklarierten Variablen einen Wert zu zu weisen. Das geht so nicht
for (int i=0;i<a.length;i++) a = new Buch();
[/Java]

Du kannst es aber so machen:
[Java]
Buch[]a = new Buch[10];{
for (int i=0;i<a.length;i++)
a = new Buch();
}
[/Java]

Mit diesem Konstrukt (die geschweiften Klammern) wird die Schleife praktisch Bestandteil der initialen Wertzuweisung. Und so ist der Code gültig.
 
Zuletzt bearbeitet von einem Moderator:

cryblood

Mitglied
Du kannst außerhalb von Methoden nur eine Variable deklarieren und ihr direkt einen Wert zuweisen.
[Java]
// Gültig, hier wird eine Variable a[] als Array von Buch deklariert und bekommt direkt den Wert zugewiesen
Buch[]a = new Buch[10];
// Ungültig, hier deklarierst Du keine Variablen, sondern versuchst, in einer Schleife vielen Variablen einen
// Wert zu zu weisen. Das geht so nicht
for (int i=0;i<a.length;i++) a = new Buch();
[/Java]

Du kannst es aber so machen:
[Java]
Buch[]a = new Buch[10];{
for (int i=0;i<a.length;i++)
a = new Buch();
}
[/Java]

Mit diesem Konstrukt (die geschweiften Klammern) wird die Schleife praktisch Bestandteil der initialen Wertzuweisung. Und so ist der Code gültig.

Du hast mich verstanden, danke ! Vielleicht hatte ich meine Frage etwas missverständlich ausgedrückt. Hätte auch schreiben können:

Buch a = new Buch(); <-- geht

Buch[]a = new Buch[10];
a[3] = new Buch(); <-- geht nicht

Du kannst außerhalb von Methoden nur eine Variable deklarieren und ihr direkt einen Wert zuweisen.

Ok, das war der Satz den ich gebraucht habe. Kannst du mir auch erklären warum das so ist ? Also welchen Sinn diese Konvention hat ?
 
N

nillehammer

Gast
Da kann ich nur spekulieren. Solche von Dir gewünschten Konstrukte sind in einigen (meist funktionalen) Sprachen ja möglich. Ich denke, es liegt daran, dass bei Java als objektorientierter Sprache konzeptionell sehr stark zwischen Daten und Funktionalität getrennt wird. Daten werden über Variablen abgebildet und Funktionalität über Methoden. Die Trennung ist so stark ausgeprägt, dass die JDK-Entwickler die Syntaxregeln so definiert haben, dass man das nicht vermischen kann.
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
Du kannst es aber so machen:
[Java]
Buch[]a = new Buch[10];{
for (int i=0;i<a.length;i++)
a = new Buch();
}
[/Java]

Diese Art der Einrückung würde ich nicht empfehlen, lieber neue Zeile für den Block nehmen:
Java:
class Blah{
  static {
   System.out.println("this is executed when the class is loaded");
  }

  {
    System.out.println("this is executed when an instance is created");
  }
}
oder sogar so:
Java:
X blah = new X(){
  {
    callMethodOfX();
  }
}

"Initialization Block" nennt sich das ganze...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Instanzen, Referenzen und Collections Java Basics - Anfänger-Themen 3
G Speicherung von Referenzen auf Instanzen Java Basics - Anfänger-Themen 5
G Instanzen und Referenzen Java Basics - Anfänger-Themen 5
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
B JaxB - Unique Name updaten / Referenzen in XML Java Basics - Anfänger-Themen 0
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
B JaxB - Referenzen erstellen? Java Basics - Anfänger-Themen 2
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
scratchy1 Referenzen Java Basics - Anfänger-Themen 32
O Referenzen Java Basics - Anfänger-Themen 2
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
A Variablen Referenzen Java Basics - Anfänger-Themen 6
A GUI-Bedienelemente mit Zeiger/Referenzen-Array veralten Java Basics - Anfänger-Themen 4
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
F Referenzen zwischen Methoden Java Basics - Anfänger-Themen 5
T Klassen Referenzen auf Klassen / Objekte Java Basics - Anfänger-Themen 5
J OOP Ein Fahrrad - zwei Besitzer: Zwei Referenzen auf ein Objekt Java Basics - Anfänger-Themen 43
K Collections Auf Referenzen in ArrayList zugreifen? Java Basics - Anfänger-Themen 3
B ArrayList.clear - Daten in allen Referenzen weg Java Basics - Anfänger-Themen 2
L Grundlegende Verständnisfrage Hasmap Referenzen Java Basics - Anfänger-Themen 4
C OOP Referenzen-Problem Java Basics - Anfänger-Themen 3
N Referenzen Problem Java Basics - Anfänger-Themen 2
K Referenzen - 2ter Versuch Java Basics - Anfänger-Themen 17
C Referenzen in Java Java Basics - Anfänger-Themen 11
J Referenzen vergleichen Java Basics - Anfänger-Themen 8
M Referenzen verschieben Java Basics - Anfänger-Themen 2
J Mehrere Referenzen auf ein Objekt Java Basics - Anfänger-Themen 6
M Referenzen Java Basics - Anfänger-Themen 11
G Netzwerk: RMI Objekt-Referenzen Java Basics - Anfänger-Themen 2
I clone() und Referenzen Java Basics - Anfänger-Themen 25
A Referenzen zu festen Werten machen? Java Basics - Anfänger-Themen 5
F Referenzen Java Basics - Anfänger-Themen 7
H Problem mit Events bzw. Referenzen Java Basics - Anfänger-Themen 4
M Zugriff auf Textfelder über Referenzen? Java Basics - Anfänger-Themen 3
F ArrayList! Pointer, Referenzen! Java Basics - Anfänger-Themen 4
K Verständnisfrage Collection, ArrayList und Referenzen Java Basics - Anfänger-Themen 4
H Begriff: Objekt enthält Referenzen Java Basics - Anfänger-Themen 3
J Referenzen Java Basics - Anfänger-Themen 5
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
T Referenzen. Java Basics - Anfänger-Themen 5
Z Referenzen in LinkedList Java Basics - Anfänger-Themen 3
F Referenzen in Java - Fehlerpotenzial ! Java Basics - Anfänger-Themen 5
G array auf null-referenzen überprüfen ! Java Basics - Anfänger-Themen 9
G Referenzen Java Basics - Anfänger-Themen 5
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
C Was machen mit nicht mehr verwendeten Instanzen ? Java Basics - Anfänger-Themen 18
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
M Alle Instanzen einer Klasse ansprechen Java Basics - Anfänger-Themen 4
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
B OOP Summe aus verschiedenen Instanzen einer Klasse berechnen Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
Q OOP Mehrere Instanzen auf ein Feld Java Basics - Anfänger-Themen 13
G Instanzen eines Interfaces erzeugen Java Basics - Anfänger-Themen 7
S Direkt Instanzen anlegen Java Basics - Anfänger-Themen 1
K Variablen Instanzen gleich aber warum ? Java Basics - Anfänger-Themen 3
D Instanzen durch Methode Java Basics - Anfänger-Themen 14
W Zugriff auf Instanzen von Klassen Java Basics - Anfänger-Themen 8
S aus Text Datei Instanzen erzeugen, so richtig? Java Basics - Anfänger-Themen 4
O Liste aller Instanzen einer Klasse Java Basics - Anfänger-Themen 18
H Klassen Instanzen mit anderen Klassen erzeugen Java Basics - Anfänger-Themen 5
B Enum: Instanzen Java Basics - Anfänger-Themen 10
M Instanzen vergleichen? Java Basics - Anfänger-Themen 12
H Klassen, Konstruktoren, Instanzen etc Java Basics - Anfänger-Themen 6
W Instanzen, Klassen Java Basics - Anfänger-Themen 2
C Vectorarrays und Instanzen Java Basics - Anfänger-Themen 10
S alle instanzen einer klasse löschen Java Basics - Anfänger-Themen 18
C OOP Instanzen ansprechen Java Basics - Anfänger-Themen 3
P Verständnisfrage zu Instanzen/Objekten Java Basics - Anfänger-Themen 9
B Zugriff auf Variablen in nicht bekannten Instanzen Java Basics - Anfänger-Themen 6
R mit klassen-instanzen arbeiten in packages Java Basics - Anfänger-Themen 10
A Mehrere Instanzen einer eigenen Klasse in einem Array Java Basics - Anfänger-Themen 5
W mehrere (numerierte) Instanzen erzeugen Java Basics - Anfänger-Themen 3
M Dynamisch Instanzen erstellen. Java Basics - Anfänger-Themen 4
N Instanzen von beliebigen Klassen aus dem Filesystem erzeugen Java Basics - Anfänger-Themen 7
M Problem mit Instanzen von JLabel Java Basics - Anfänger-Themen 4
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
V mehrere Instanzen gleicher Name möglich? Java Basics - Anfänger-Themen 3
E instanzen von Klassen erzeugen Java Basics - Anfänger-Themen 2
H Instanzen erzeugen und Methoden aufrufen Java Basics - Anfänger-Themen 5
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
K Eindeutige Instanzen von einem Objekt Java Basics - Anfänger-Themen 13
T Wo Daten ablegen für mehrere Servlet-Instanzen? Java Basics - Anfänger-Themen 2
G Instanzen in einem Feld erzeugen Java Basics - Anfänger-Themen 9
J Instanzen dynamisch erzeugen Java Basics - Anfänger-Themen 8
T Instanzen von abstrakten Klassen? Java Basics - Anfänger-Themen 14
D Instanzen einer Klasse Java Basics - Anfänger-Themen 6
G alle Instanzen einer Klasse serialisieren Java Basics - Anfänger-Themen 4
Silver-Blue mehrere Instanzen einer Klasse, trotz Random immer das Selbe Java Basics - Anfänger-Themen 7
W Instanzen herunterzählen Java Basics - Anfänger-Themen 7
S Instanzen Java Basics - Anfänger-Themen 4
G wenn auch schon oft gefragt (Konstruktor , Instanzen , usw) Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben