Instanzieren, initialisieren, deklarieren?

  • Variable instanzieren:

    Code
    Objekt o = new Objekt();
    // o ist Instanz der Klasse Objekt



    Variable deklarieren:

    Code
    int var;
    // var als Variable des Typs int deklariert



    Variable initialisieren:

    Code
    var = 0;
    // var mit Wert 0 initialisiert
  • Zitat

    Der unterschied zwischen instanzieren und initialisieren besteht zwischen Objekt und simplem datentyp?


    Nicht ganz..

    deklarieren: du legst eine Variable von einem bestimmten Datentyp an. Der Speicher wird allokiert, aber die Variable hat noch keinen bestimmten Wert. Das können auch Objekte sein.

    instanziieren: Gilt nur für Objekte. Du legst eine Variable vom Typ des Objekts an. Diese Variable ist eine Instanz der KLASSE "wasauchimmer". Der Speicher wird allokiert und die member-Variablen der Instanz werden meist auch schon initialisiert, weil beim instanziieren ein Konstruktor der Klasse aufgerufen wird.

    initialisieren: Der Speicher muss allokiert sein und die Variable bekommt einen Wert.

    640K ought to be enough for anybody. :eek2:

  • In einer etwas abstrakteren Sichtweise:

    Beim Deklarieren (C++: "Person p;") wird vereinbart, dass "p" nachfolgend als Variablenname verfügbar und vom (statischen) Typ "Person" ist.

    Beim Instanzieren (C++: "Person* p = new Person();") wird für eine Variable Speicherplatz angefordert.

    Beim Initialisieren wird einer Variable erstmals ein Wert zugewiesen.

    "int i" kann übrigens ein Beispiel für alle drei Begriffe sein. Kommt drauf an, in welcher Sprache man sich befindet. In C++ wird ein "int i" nicht automatisch initialisiert, in Java aber schon (mit 0). In beiden Sprachen wird Speicherplatz in der Größe eines int angefordert. Eine Deklaration ist es auch in beiden Sprachen.

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von sauzachn

    In C++ wird ein "int i" nicht automatisch initialisiert, in Java aber schon (mit 0).

    in Java wird ein int automatisch initialisiert?

    wenn ich das schreibe:

    Code
    int i;
    System.out.println(i);

    dann meckert der compiler: "variable i might not have been initialised"

  • Zitat von Paulchen
    Code
    int i;
    System.out.println(i);

    dann meckert der compiler: "variable i might not have been initialised"

    Ja, aber damit meint er nur daß DU die Variable noch nicht initialisiert hast. Und daß du gefälligst "= 0" hinschreiben sollst wenn du die Variable auf 0 initialisiert haben willst.

  • Das Problem in deinem Beispiel: Lokale Variablen werden nicht initialisiert. Ich meinte aber ganz gewöhnliche "klassenweite" Variablen, also etwa:

    Code
    class test {
     public int i;
    }


    i wird mit 0 initialisiert. Ein Boolean mit false, ein Objekt mit null usw.

    EDIT: null, nicht 0 für Objekte. Danke, Swoncen!

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von sauzachn

    Lokale Variablen werden nicht initialisiert. Ich meinte aber ganz gewöhnliche "klassenweite" Variablen (...)

    Ups, tatsächlich, das habe ich jetzt auch durcheinander gebracht.

  • Zitat von sauzachn

    Das Problem in deinem Beispiel: Lokale Variablen werden nicht initialisiert. Ich meinte aber ganz gewöhnliche "klassenweite" Variablen, also etwa:

    Code
    class test {
     public int i;
    }


    i wird mit 0 initialisiert. Ein Boolean mit false, ein Objekt mit 0 usw.



    ein Objekt mit NULL nicht mit 0.

    640K ought to be enough for anybody. :eek2:

  • Zitat von huzi

    Dankeschön für die Antworten...Jetzt blick ich da ein Bisserl durch...

    Vieles was hier gepostet wurde ist falsch. Bezueglich Initialisierung muss In C++ zwischen lokalen, dynamischen und nicht-lokalen Variablen bzw. Objekten unterschieden werden; NULL stammt aus C-Tagen, in C++ fuehrt 0 zu weniger Problemen. Default-Initializer in C++ ist 0 (des entsprechenden Typs) usw.

  • Zitat von huzi

    Ich habs nur bis zu Swoncen's Post vom 7.3. durchgelesen,

    Dann zu einem der Fehler in diesem: Eine Deklaration ist eine statische Sache im Source-Code und hat nichts mit Speicher-Allokation zu tun.

  • Zitat von sauzachn

    Wie meinst du das?

    Wenn fuer globale, namespace oder lokale statische Objekte kein Initializer angegeben ist, werden sie (und nur sie) implizit mit 0 initialisiert. 0 ist an sich "int" und wird je nach Kontext automatisch in den notwendigen Typ verwandelt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!