1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Instanzieren, initialisieren, deklarieren?

    • Frage
  • huzi
  • 7. März 2006 um 03:41
  • Unerledigt
  • huzi
    6
    huzi
    Mitglied
    Reaktionen
    7
    Punkte
    372
    Beiträge
    67
    • 7. März 2006 um 03:41
    • #1

    Hallo!
    Kann mir wer den Unterschied zuwischen

    • Eine Variable instanzieren,
    • Eine Variable initialisieren und
    • Eine Variable deklarieren

    erklären?
    Was ist richtig, was ist schön?
    mfg Huzi

    >>>javatricks.de
    Studentenjobs Wien
    aktuelle Kalenderwoche

  • Ubik
    5
    Ubik
    Mitglied
    Punkte
    205
    Beiträge
    39
    • 7. März 2006 um 14:26
    • #2

    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
  • huzi
    6
    huzi
    Mitglied
    Reaktionen
    7
    Punkte
    372
    Beiträge
    67
    • 7. März 2006 um 18:52
    • #3

    Sprich

    Code
    Object o;

    is dann die Deklaration des Objekts o?

    Der unterschied zwischen instanzieren und initialisieren besteht zwischen Objekt und simplem datentyp?
    Also einen String instanzieren und nicht deklarieren?
    is das überhaupt so genau zu nehmen?
    Sorry für die penible Fragerei...:D

    >>>javatricks.de
    Studentenjobs Wien
    aktuelle Kalenderwoche

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 7. März 2006 um 19:46
    • #4
    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:

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 8. März 2006 um 11:07
    • #5

    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

  • Paulchen
    1
    Paulchen
    Gast
    • 8. März 2006 um 11:18
    • #6
    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"

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 8. März 2006 um 11:30
    • #7
    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.

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 8. März 2006 um 11:46
    • #8

    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

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 8. März 2006 um 12:01
    • #9
    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.

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 8. März 2006 um 12:26
    • #10
    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:

  • huzi
    6
    huzi
    Mitglied
    Reaktionen
    7
    Punkte
    372
    Beiträge
    67
    • 17. März 2006 um 00:46
    • #11

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

    >>>javatricks.de
    Studentenjobs Wien
    aktuelle Kalenderwoche

  • Spockman
    5
    Spockman
    Mitglied
    Punkte
    210
    Beiträge
    41
    • 17. März 2006 um 15:27
    • #12
    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.

  • huzi
    6
    huzi
    Mitglied
    Reaktionen
    7
    Punkte
    372
    Beiträge
    67
    • 17. März 2006 um 15:36
    • #13
    Zitat von Spockman

    Vieles was hier gepostet wurde ist falsch..


    Ich habs nur bis zu Swoncen's Post vom 7.3. durchgelesen, den rest hab ich eh nimma kapiert...
    mich betriffts eh nur für Java!
    mfg

    >>>javatricks.de
    Studentenjobs Wien
    aktuelle Kalenderwoche

  • Spockman
    5
    Spockman
    Mitglied
    Punkte
    210
    Beiträge
    41
    • 17. März 2006 um 16:36
    • #14
    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.

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 17. März 2006 um 18:04
    • #15
    Zitat von Spockman

    Default-Initializer in C++ ist 0 (des entsprechenden Typs)


    Wie meinst du das?

    Dipper dipper dii dipper dii dipper dii duuu

  • Spockman
    5
    Spockman
    Mitglied
    Punkte
    210
    Beiträge
    41
    • 17. März 2006 um 18:36
    • #16
    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 4 Besucher

Rechtliches

Impressum

Datenschutzerklärung