Java "Datentyploses" Array ?

HelloSpencer

Ensign
Registriert
März 2011
Beiträge
137
Hallo,
ich bin etwas verwirrt im Bezug auf den Datentyp von Arrays. Der Grundsätzliche Aufbau von einem Array ist ja folgender.

Code:
Typ[] Name = new Typ[Anzahl];
Typ Name[] = new Typ[Anzahl];

Dieser ist mir auch klar. Doch nun habe ich auch schon desöfteren Arrays gesehen, bei denen kein Datentyp angegeben war. z.b sowas hier:

Code:
	Fahrzeuge[] auto = new Fahrzeuge[10];


Was ist das ? Hat das was mit den Objekten der Klasse Fahrzeuge zu tun die da erstellt werden ?
 
Der Datentyp ist in dem Fall dann die Klasse/Struktur Fahrzeuge ... und die muss irgendwo definiert sein, sonst wird nicht funktionieren
 
Jop, scoutone hat recht.
Da hat jemand Fahrzeuge definiert.
Es handelt sich also um ein Array von Fahrzeugen.
 
Du hast deine Frage doch selbst beantwortet?!?

auto ist ein Array vom Typ Fahrzeuge (vermutlich eine selbst-definierte Klasse).
 
Worin siehst du in deinem Beispiel, das da kein Datentyp angegeben ist.

Du zählst ja z.B auf.

Code:
Typ[] Name = new Typ[Anzahl];

das entspricht doch genau deinem Beispiel.
Code:
Fahrzeuge[] auto = new Fahrzeuge[10];

Typ = Fahrzeuge
Name = auto
 
Deadmanshand schrieb:
Was ist das ? Hat das was mit den Objekten der Klasse Fahrzeuge zu tun die da erstellt werden ?

Hier werden noch keine Fahrzeuge erstellt, sondern nur der nötige Platz reserviert. Die JVM muss an der Stelle wissen, wie viel Speicher sie für das Array reservieren muss und welche Werte sie für das Array erlauben soll (Klasse "Fahrzeug" oder typkompatibel).

Es ist lediglich ab da der Platz vorhanden, um 10 Instanzen der Klasse Fahrzeug unterbringen zu können.
 
Ok danke, ich wusste nich das Fahrzeuge in dem Fall eine Art Datentyp ist.
 
"Fahrzeug" ist hier eine Klasse, die eigentlich nichts anderes als ein Object ist.

Du könntest auch

Code:
Object[] autos = new Object[10];

schreiben.
Damit würdest Du ein neues Array erstellen, das 10 Elemente des Typs Object enthält. Da könntest Du dann im endeffekt alles reinpacken was Dir so einfällt, das wäre also "Datentyplos". Wenn Du allerdings vorher eine Klasse Fahrzeug definierst, dann kannst Du diese auch als Datentyp für Arrays nutzen - allderdings kann das Array dann auch nur Objekte dieses Typs fassen. Das bringt aber u.U. unerwünschte Effekte mit sich, die man durch setzen eines Datentyps verhindern kann.

Implizit erben alle Klassen die man selbst definiert von der Oberklasse Object, und sind somit selbst Objekte.
 
derduke81 schrieb:
"Fahrzeug" ist hier eine Klasse, die eigentlich nichts anderes als ein Object ist.
Eine Klasse ist kein Objekt! Erst durch das "new" wird ein Objekt vom Typ "Fahrzeug" erstellt.

derduke81 schrieb:
Code:
Object[] autos = new Object[10];
Damit würdest Du ein neues Array erstellen, das 10 Elemente des Typs Object enthält.
Nein, das Array ist jetzt erst mal leer, enthält also 10x NULL.
 
Darlis schrieb:
Eine Klasse ist kein Objekt! Erst durch das "new" wird ein Objekt vom Typ "Fahrzeug" erstellt.

Haarspalterei, natürlich wird (hier) von einer Klasse ein Objekt erstellt, und nicht die Klasse ist das Objekt. Das hab ich jetzt implizit mal vorausgesetzt.

Darlis schrieb:
Nein, das Array ist jetzt erst mal leer, enthält also 10x NULL.

Du hast natürlich vollkommen recht. Was ich meinte war, dass das Array jetzt 10 Objekte vom Typ Object halten kann, also Strings, Integers, Fahrzeuge... was man auch immer will.

War auf er Arbeit als ich das schrieb...
 
Zuletzt bearbeitet:
derduke81 schrieb:
Haarspalterei, ...
Nicht gegenüber einem Anfänger. Die nehmen das noch ernst und wundern sich dann, warum Fahrzeug.fahren() nicht funktioniert.
 
Darlis schrieb:
Nicht gegenüber einem Anfänger. Die nehmen das noch ernst und wundern sich dann, warum Fahrzeug.fahren() nicht funktioniert.

Wenn das eine statische Methode wäre, dann würde fahren() funktionieren :D
Ergänzung ()

derduke81 schrieb:
Was ich meinte war, dass das Array jetzt 10 Objekte vom Typ Object halten kann, also Strings, Integers, Fahrzeuge... was man auch immer will.

Also entweder drückst du dich umständlich aus, oder du denkst wirklich dass man verschiedene Datentypen in ein array stopfen kann.

Er erzeugt ein Object-Array der Klasse Fahrzeuge und das kann nur weiter Objekte der Fahrzeug-Klasse aufnehmen und keine Objekte anderer Art.
 
Zuletzt bearbeitet:
Hades85 schrieb:
Also entweder drückst du dich umständlich aus, oder du denkst wirklich dass man verschiedene Datentypen in ein array stopfen kann.

Er erzeugt ein Object-Array der Klasse Fahrzeuge und das kann nur weiter Objekte der Fahrzeug-Klasse aufnehmen und keine Objekte anderer Art.

Nein, wenn ich ein
Code:
Object[] arr = new Object[10];
erzeuge

Kann ich da durchaus Objekte verschiedener Typen reinstecken, was aber noch lange nicht heisst, das man das auch tun sollte.

Ein Array vom Typ Fahrzeug[] ist also durchaus korrekt. Alles andere verwirrt Anfänger... Ein man kööööönnte aber auch, ist für einen Anfänger nicht interessant oder hilfreich.
 
Die Klasse Object ist aber etwas spezielles, die Mutter aller Klassen. Von daher hast du da schon recht. Ich wollte dich nicht direkt korrigieren, nur dein Satz liest sich verwirrend.
 
Schau dir einfach die JAVA API genauer an, z.B.

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Dann siehst du dir den Klassen Baum ganz oben an und weißt was von was erbt.
Ein String ist also nur ein Object, erweitert um eine gewisse Funktionalität.
Ein String ist ein Object, aber ein Object kein String.

Dennoch macht man solchen Daten Mix nicht, das gehört sich nicht, man will ja wissen was drin ist.
Stelle dir vor du gehst über eine Schleife durch ein Array und weißt beim auslesen nicht was es ist.

Datentyp los geht am besten mit Generics. Z.b. du baust dir eine spezielle Listen Klasse wo du nicht weißt was rein soll, diese machst du mit generics und musst dich beim bauen der Liste nicht um Datentypen kümmern. Erst wenn du diese Liste benutzen willst (new...) , sagst du was rein soll. Somit kann diese Klasse für alle Datentypen herhalten, wobei pro Liste nur ein Datentyp rein darf.
 
Zuletzt bearbeitet:
Hades85 schrieb:
Wenn das eine statische Methode wäre, dann würde fahren() funktionieren :D
Ergänzung ()

Also entweder drückst du dich umständlich aus, oder du denkst wirklich dass man verschiedene Datentypen in ein array stopfen kann.

Er erzeugt ein Object-Array der Klasse Fahrzeuge und das kann nur weiter Objekte der Fahrzeug-Klasse aufnehmen und keine Objekte anderer Art.

Das ist differenzierter zu betrachten.
Von der Klasse Fahrzeuge abgeleitete Klassen können ebenfalls dem Array auto vom Typ Fahrzeuge hinzugefügt werden.


Code:
Fahrzeuge[] auto = new Fahrzeuge[10]

for(int i=0;i<auto.lenth;i++)
      auto[i] = new Ferrari();
 
fz21z schrieb:
Das ist differenzierter zu betrachten.
Von der Klasse Fahrzeuge abgeleitete Klassen können ebenfalls dem Array auto vom Typ Fahrzeuge hinzugefügt werden.

Das widerspricht aber in keinster Weise der Aussage von Hades85, die da war:

Er erzeugt ein Object-Array der Klasse Fahrzeuge und das kann nur weiter Objekte der Fahrzeug-Klasse aufnehmen und keine Objekte anderer Art.

Denn ein Ferrari-Objekt (vorausgesetzt, es ist von Fahrzeug abgeleitet) IST per Definition auch ein Fahrzeug-Objekt.
 
Zurück
Oben