Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Java ::  Stilfrage Initialisierung     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
ini
Unregistrierter




Beitrag ini Unregistrierter 09:34:48 19.02.2010   Titel:   Stilfrage Initialisierung            Zitieren

An welcher Stelle Initialisiert man am Besten?
Und gibt es Gründe einen Stil zu bevorzugen und einen anderen nicht zu verwenden? Oder ist es vollkommen egal welchen Stil man verwendet?

Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Init {

  int x = 1; // Deklaration

  {
    x = 2; // Initialisierungblock
  }

  Init() {
    x = 3; // Konstruktor
  }

  public static void main(String[] args) {
    new Init();
  }
}
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Init {

int x = 1; // Deklaration

{
x = 2; // Initialisierungblock
}

Init() {
x = 3; // Konstruktor
}

public static void main(String[] args) {
new Init();
}
}
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Init {

  int x = 1; // Deklaration

  {
    x = 2; // Initialisierungblock
  }

  Init() {
    x = 3; // Konstruktor
  }

  public static void main(String[] args) {
    new Init();
  }
}


die Reihenfolge ist:
* Definition
* Initialisierungsblock
* Konstruktor
Gugelmoser
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.07.2007
Beiträge: 612
Beitrag Gugelmoser Mitglied 14:35:18 19.02.2010   Titel:              Zitieren

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
 *    Also ich verwende immer ersteres, weil:
 *         1.    ich mir angewöhnt habe, Attribute immer, wenn möglich, zu initalisieren.
 *         2.    ich Attribute, wenn möglich, final mache.
 *
 *    jaja und mein Prof. sagt immer Attribute final zu machen ist en guter Programmierstiel xD
 */

public class Test
{
    final Ober o1 = null;
    final Ober o2 = new Ober(); // schön

    {
        o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
    }
   
    Test()
    {
        o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
    }
   
    public static void main(String[] args)
    {
    }
}

class Ober{}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
* Also ich verwende immer ersteres, weil:
* 1. ich mir angewöhnt habe, Attribute immer, wenn möglich, zu initalisieren.
* 2. ich Attribute, wenn möglich, final mache.
*
* jaja und mein Prof. sagt immer Attribute final zu machen ist en guter Programmierstiel xD
*/

public class Test
{
final Ober o1 = null;
final Ober o2 = new Ober(); // schön

{
o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
}

Test()
{
o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
}

public static void main(String[] args)
{
}
}

class Ober{}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
 *    Also ich verwende immer ersteres, weil:
 *         1.    ich mir angewöhnt habe, Attribute immer, wenn möglich, zu initalisieren.
 *         2.    ich Attribute, wenn möglich, final mache.
 *
 *    jaja und mein Prof. sagt immer Attribute final zu machen ist en guter Programmierstiel xD
 */

public class Test
{
    final Ober o1 = null;
    final Ober o2 = new Ober(); // schön

    {
        o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
    }
   
    Test()
    {
        o1 = new Ober(); // Error, da o1 final ist und initialisiert wurde.
    }
   
    public static void main(String[] args)
    {
    }
}

class Ober{}


Zuletzt bearbeitet von Gugelmoser am 14:39:29 19.02.2010, insgesamt 2-mal bearbeitet
ctor
Unregistrierter




Beitrag ctor Unregistrierter 17:17:10 19.02.2010   Titel:              Zitieren

Ich versuche Objekte erst so spät wie möglich zu erzeugen - also im entsprechenden Konstruktor. Sehe es bei Konstanten wie Dweb - ist afaik allerdings auch nicht anders möglich.
Damit kein doppelter Source in verschiedenen Konstruktoren vorkommt, pack ichs in den Initialisierungsblock. Kann man dann Theoretisch auch in die Deklaration packen, wenn es dann ohnehin jedesmal ausgeführt wird, wenn eine Instanz erzeugt wird. Allerdings kann man in Initialisierungsblöcken auch komplexere Initialisierungen vornehmen als eine Zuweisung eines neuen Objekts - z.B. Arrays

Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Init
{
  private static final int    N  = 10;
  private static final double PI = 3.0;
  private double              circumferences[];

  {
    this.circumferences = new double[N];
    for (int d = 0; d < N; ++d)
    {
      this.circumferences[d] = PI * d;
    }
  }

  Init()
  {
    // alles was nirgendwo anders initialisiert wird
  }

  Init(int x)
  {
    // und auch nicht hier vorkommt
  }

  public static void main(String[] args)
  {
    new Init();
  }
}
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Init
{
private static final int N = 10;
private static final double PI = 3.0;
private double circumferences[];

{
this.circumferences = new double[N];
for (int d = 0; d < N; ++d)
{
this.circumferences[d] = PI * d;
}
}

Init()
{
// alles was nirgendwo anders initialisiert wird
}

Init(int x)
{
// und auch nicht hier vorkommt
}

public static void main(String[] args)
{
new Init();
}
}
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Init
{
  private static final int    N  = 10;
  private static final double PI = 3.0;
  private double              circumferences[];

  {
    this.circumferences = new double[N];
    for (int d = 0; d < N; ++d)
    {
      this.circumferences[d] = PI * d;
    }
  }

  Init()
  {
    // alles was nirgendwo anders initialisiert wird
  }

  Init(int x)
  {
    // und auch nicht hier vorkommt
  }

  public static void main(String[] args)
  {
    new Init();
  }
}
C/C++ Forum :: Java ::  Stilfrage Initialisierung   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.