Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser?

Berlin_er

Mitglied
Hallo Leute,

Ich kann bei der Objektorientierung mein Objekt erzeugen und gleichzeitig mein Konstruktor aufrufen: test meinTest = new Test();
Man kann es auch einzelt durchführen: test meinTest; meinTest = new Test();

Was wäre in folgender Situation besser?

Ich hab eine Switch-Case-Verzweigung und brauche die Methoden der Objektklasse(test) für case 1,2 und 3, aber nicht für default.
Sollte ich:
1) vor der Switch-Case-Verzweigung mein Objekt erzeugen und Konstruktor aufrufen oder
2) vor der Switch-Case-Verzweigung nur mein Objekt erzeugen und mein Konstruktor dann in case 1,2 und 3 aufrufen?

Was ich weiß:
Die erste Möglichkeit würde mein Code verkürzen, jedoch unnötig den Konstruktor aufrufen, falls default eintreffen sollte.
D.h. es startet so oder so, egal ob es gebraucht wird oder nicht - dafür aber kürzeren Code.

Die zweite Möglichkeit würde mein Code verlängern bzw. in jedem case würde sich derselbe Konstruktoraufruf befinden (was blöd aussieht) außer in default.
d.h. es würde nur starten, wenn auch wirklich einer der Case eintreffen würde - dafür aber längeren Code.

Noch eine Frage:
Mit welcher Option würde außerdem ein Programm schneller laufen? Bei den unteren Beispielen findet wahrscheinlich keine Verzögerung statt.
Aber was wenn ich einen riesen Code habe und solch einer Situation begegne, wo ich mich für eine der beiden Möglichkeiten entscheiden muss?

Ich bedanke mich im voraus!

Java:
1)
public class start{
  public static void main(String[] args){
   
    System.out.println("Inhalt Tank 1 = 1000 Liter, Tank 2 = 2000 Liter\n1 - Tank befüllen\n2 - Tank entleeren\n3 - Tanks umfüllen\n9 - Abbruch\n");
    int wahl = InOut.readInt("Wahl?\t");
    int menge = InOut.readInt("Menge\t");
    int startTank = InOut.readInt("Tank Nr.?\t");
   
    tank meinTank = new tank(menge, startTank);
   
    switch (wahl) {
      case 1:
      ....
      break;
      case 2:
      .....
      break;
      case 3:
      .....
      break; 
      default:
      System.out.println("fail");
    } // end of switch
  }
}

Java:
2)
public class start{
  public static void main(String[] args){
   
    System.out.println("Inhalt Tank 1 = 1000 Liter, Tank 2 = 2000 Liter\n1 - Tank befüllen\n2 - Tank entleeren\n3 - Tanks umfüllen\n9 - Abbruch\n");
    int wahl = InOut.readInt("Wahl?\t");
    int menge = InOut.readInt("Menge\t");
    int startTank = InOut.readInt("Tank Nr.?\t");
    
    tank meinTank;
    
    switch (wahl) {
      case 1:
      meinTank = new tank(menge, startTank);
      .....
      break;
      case 2:
      meinTank = new tank(menge, startTank);
      .....
      break;
      case 3:
      meinTank = new tank(menge, startTank);
      .....
      break; 
      default:
      System.out.println("fail");
    } // end of switch
  }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Den Konstruktor aufrufe ist das Objekt erzeugen!
Das was du als "Objekt erzeugen" bezeichnest, ist nur eine Variablendeklaration.

Generell: nimm das, was für dich besser lesbar ist. (für mich ist es das direkt initialisieren, also Test meinTest = new Test();)
Gleichzeitig aber auch: Deklarier die Variable mit möglichst keinem Scope.

Performance sollte bei sowas erstmal zweitrangig sein - wenn die bei sowas ein Problem ist, hat man vermutlich ein ziemliches Design-Problem.

In deinem Beispielfall: ich würde vor dem switch initialisieren, ist mMn deutlich lesbarer, und im Fehlerfall wäre mir der Konstruktoraufruf herzlich egal.

Mit welcher Option würde außerdem ein Programm schneller laufen? Bei den unteren Beispielen findet wahrscheinlich keine Verzögerung statt.
Je nachdem was der Konstruktor macht, merkt man keinen wesentlichen Unterschied.
Theoretisch kann dein zweites Beispiel schneller sein, wenn nur der default-Fall eintritt.
Würde ich aber dabei völlig ignorieren.

Aber was wenn ich einen riesen Code habe und solch einer Situation begegne, wo ich mich für eine der beiden Möglichkeiten entscheiden muss?
Das gleiche wie bei kurzem Code ;)
Wenn sich sowas über mehrere duzend Zeilen erstreckt, hat man ganz andere Probleme als dieses.
 

Berlin_er

Mitglied
Den Konstruktor aufrufe ist das Objekt erzeugen!
Das was du als "Objekt erzeugen" bezeichnest, ist nur eine Variablendeklaration.

Generell: nimm das, was für dich besser lesbar ist. (für mich ist es das direkt initialisieren, also Test meinTest = new Test();)
Gleichzeitig aber auch: Deklarier die Variable mit möglichst keinem Scope.

Performance sollte bei sowas erstmal zweitrangig sein - wenn die bei sowas ein Problem ist, hat man vermutlich ein ziemliches Design-Problem.

In deinem Beispielfall: ich würde vor dem switch initialisieren, ist mMn deutlich lesbarer, und im Fehlerfall wäre mir der Konstruktoraufruf herzlich egal.


Je nachdem was der Konstruktor macht, merkt man keinen wesentlichen Unterschied.
Theoretisch kann dein zweites Beispiel schneller sein, wenn nur der default-Fall eintritt.
Würde ich aber dabei völlig ignorieren.


Das gleiche wie bei kurzem Code ;)
Wenn sich sowas über mehrere duzend Zeilen erstreckt, hat man ganz andere Probleme als dieses.
Vielen Dank! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
F Klasse vorhanden - wie daraus Objekt erzeugen Allgemeine Java-Themen 8
P Objekt einer Klasse erzeugen, die als String vorliegt Allgemeine Java-Themen 3
multiholle Objekt einer Klasse anhand eines String erzeugen Allgemeine Java-Themen 3
A Objekt in einem Array erzeugen Allgemeine Java-Themen 6
L Objekt erzeugen Allgemeine Java-Themen 2
V Aus String -> Objekt einer Klasse erzeugen Allgemeine Java-Themen 7
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
B objekt einer klasse dynamisch erzeugen Allgemeine Java-Themen 6
B COM Objekt erzeugen Allgemeine Java-Themen 2
S Objekt mit Erkennung erzeugen Allgemeine Java-Themen 8
T Color-Objekt aus Hex-Farbcode erzeugen Allgemeine Java-Themen 11
T Per Reflection neues Objekt erzeugen Allgemeine Java-Themen 3
C File Objekt über ftp-Zugang erzeugen Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben