2016-10-11 9 views
0

Ich habe viele Tutorial gesehen, die das Array beschreibt, ist Objekt und seine Aufgabe wird durch die Bezugsgröße wie dieseErstellen von Array-Objekt Java

int a[]=new int[5]; 

Aber die Sache verwiesen, die mich ist verwirrend ist, dass, als ein zu schaffen Objekt brauchen wir Konstruktor wie wenn ein einfaches Objekt wie diese

box b1=new box(); 

zu schaffen, sondern beim Erstellen von Arrays Objekt wir keinen Konstruktor fordern stattdessen schreiben wir wie dieses int [5] so etwas ist das? und was ist der Datentyp des Array-Objekts?

+4

Der Datentyp des Array-Objekts ist genau das, was Sie erstellen - 'int []' in diesem Fall. Und sicher, Sie rufen keinen regulären Konstruktor auf - das Erstellen eines Arrays tut das nur und nichts mehr. Alles, was Sie angeben müssen, ist die Größe, und Sie geben das in den eckigen Klammern an. Das heißt aber nicht, dass es kein Objekt ist ... –

+1

Sie haben den Datentyp i angegeben.e 'int' und about constructor, sagen wir einfach, der Compiler kümmert sich darum –

+0

Beachten Sie, dass Sie keinen Konstruktor aufrufen, wenn Sie ein Array erstellen - Sie ordnen nur etwas Speicherplatz zum Speichern von" stuff "zu; Alle Elemente werden auf den Standardwert initialisiert (Null für numerische Typen, Null für Referenztypen). Dies ist eine häufige Ursache von Verwirrung für Anfänger (besonders wenn Sie ein wenig C++ kennen, wo es anders ist). –

Antwort

1

Vom JLS 4.3.1 - Objects:

Ein Objekt ist eine Instanz der Klasse oder ein Array.

Für Klasseninstanziierung benötigen wir Konstruktoren. Arrays stellen keine Klasse dar, daher sind Konstruktoren nicht erforderlich. Beide Klassen und Arrays haben unterschiedliche Erstellungsstile. Siehe JLS 15.9 und JLS 15.10.1

Bezüglich Art von Arrays aus JLS 10.1:

Ein Array-Typ, wie der Name eines Elementtypen durch bestimmte Anzahl von leeren Paaren von eckigen Klammern [] gefolgt geschrieben wird. Die Anzahl der Klammerpaare gibt die Tiefe der Arrayverschachtelung an.

Nur wenige Klassen/Schnittstellen können Arrays halten, siehe JLS 4.10.3.

Edit: So int[] oder jede andere Array Referenztyp genannt, aber nicht Klasse. Objekte werden von den Referenztypen referenziert, nicht von Klassen. Von JLS 4.3,

Es gibt vier Arten von Referenztypen: Klassentypen (Abschnitt 8.1), Interface Typen (§9.1), Typ-Variablen (§ 4.4) und Array-Typen (§10.1).

+0

Ja Danke für eine aussagekräftigere und kürzere Antwort..Eine Sache ist immer noch verwirrend, wenn Array zu keiner Klasse gehört, dann wie sein Objekt erstellt wird, um Objekte zu erstellen, brauchen wir class..und auch was ist int []? Ist es eine Klasse oder etwas anderes? –

+0

@HasnainAbidKhanzada Arrays sind völlig anders als Klassen. Durch die Definition von Objekt können Sie sehen, dass eine Klasse nicht für ein Objekt vorgeschrieben ist. Objekt kann entweder eine Klasseninstanz oder ein Array sein. 'int []' ist ein Referenztyp, keine Klasse. Bearbeitete meine Antwort ein bisschen. –

+0

Danke Mann, das habe ich gesucht! Sie bearbeiteten Antwort löste mein Problem! –

2

Die Array-Erstellungssyntax für Objekte unterscheidet sich nicht wirklich von Primitiven, z.

Box[] boxArray = new Box[5]; 

Nun, wenn Sie Boxen innerhalb des Arrays erstellen möchten Sie den Konstruktor Syntax verwenden würde:

boxArray[0] = new Box(); 

Bitte beachte, dass ich ging weiter und aktiviert box-Box, da mit einem Kapital Klassennamen beginnen Brief ist im Grunde der akzeptierte Standard.

+2

Ich denke, die Verwirrung von OP besteht nicht zwischen primitiven Arrays und Objektarrays, sondern zwischen arrays-as-objects und non-array-objects: warum nicht 'new int [] (5)' und 'new Box [] (5)', beispielsweise. Wenn dies der Fall ist, ist die Antwort wahrscheinlich Bequemlichkeit: Das Erstellen eines neuen Arrays ist eine sehr häufige Operation, und es ist nicht dumm, eine Ausnahme für gängige Idiome zu machen, wenn es hilfreich ist. Außerdem sind alle Arrays auf die gleiche Weise aufgebaut, indem einfach der entsprechende Speicherplatz zugewiesen wird. – Amadan

+0

Ich glaube, diese Erklärung dient nicht der Frage. –

+0

Sowohl im Array- als auch im Klassenobjekt wird Heap-Speicher verwendet. Überprüfen Sie die Grundlagen dazu. –