Stilfrage Initialisierung
-
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?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
-
/* * 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{}
-
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. Arrayspublic 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(); } }