Warum soll man mit dem Konstruktor Objektvariablen initalisieren wenn man das auch
einfacher machen könnte?
------------------
public class Objektvariablen {
int i = 450;
String s = ""; // <-- 2. ...das machen kann
public Objektvariablen(){
this.i = 450; // <-- 1.Warum das wenn man auch ...
this.s = "";
}
}
--------------------
Das hat mit "einfacher" nix zu tun.
Es ist Geschmackssache wo du deine Variablen initialisierst.
Ich bevorzuge es bspw. im Konstruktor, da dort auch Variablen initialisiert werden die eventuell als Übergabeparameter über den Konstruktor mitkommen.
Dadurch ist es dann alles an einem Ort.
Da streiten sich aber wie gesagt die Geister drum.
Es ist doch aber viel sinnvoller das ganze in den Konstruktor zu schreiben, wenn du mehrere Konstruktoren hast oder wenn du Parameter übergeben musst! Und eines von beiden trifft eigentlich immer zu.
Wenn die Variablen initialisiert werden, spielt die Anzahl schon eine Rolle. Denn in dem einem Konstruktor initialisierst du alle Variablen und in dem anderen nur eine Variable. Und dann wäre es relativ unschön, wenn du die Variablen gleich initialisierst. Im Konstruktor ist das dann übersichtlicher!
Wenn die Variablen initialisiert werden, spielt die Anzahl schon eine Rolle. Denn in dem einem Konstruktor initialisierst du alle Variablen und in dem anderen nur eine Variable. Und dann wäre es relativ unschön, wenn du die Variablen gleich initialisierst. Im Konstruktor ist das dann übersichtlicher!
In den meisten Fällen gibt es einen Konstruktor, der von allen anderen aufgerufen würde, und in dem initialisiert man alles übergebene. Das, was unabhängig von Argumenten ist kann man dann trotzdem direkt initialisieren.
Sollte das nicht der Fall sein, muss man drauf achten, dass man in jedem alles initialisiert, da hilft dann die direkte Variante
Es hat auch etwas mit der Reihenfolge zu tun. Die Variablen, welche direkt an der Deklaration initialisiert werden, werden VOR denen im Konstruktor initialisiert. Falls das wichtig ist (und ich hoffe für dich, es ist nie wichtig), dann MUSST du sie an der Deklaration initialisieren, sonst ist es im Grunde wurscht.
Sinnvoll ist es für "final static" Variablen, die als Konstanten dienen.
ps: statische Variablen werden (egal ob final oder nicht) einmalig noch vor der Initialisierung der Klasse initialisiert, sofern das entweder direkt an der Deklaration oder im static{}-Bereich passiert.
Sofern möglich, streicht der Compiler Variablen auch aus dem Quellcode und setzt an den Aufrufen den Wert ein.
Es hat auch etwas mit der Reihenfolge zu tun. Die Variablen, welche direkt an der Deklaration initialisiert werden, werden VOR denen im Konstruktor initialisiert. Falls das wichtig ist (und ich hoffe für dich, es ist nie wichtig), dann MUSST du sie an der Deklaration initialisieren, sonst ist es im Grunde wurscht.
publicabstractclassAbstractC{publicAbstractC(){Objects.requireNonNull(test());}abstractStringtest();}classCextendsAbstractC{privatefinalString test ="C";@OverrideStringtest(){return test;}}