Java genaue Bedeutung von "new [Hier steht eine klasse]();"?

4 Antworten

Es werden durch diese Zeilen zwei Objektinstanzen erzeugt. Einmal von der Klasse Test und einmal von der Klasse Test2.

Die Referenzen auf diese Objektinstanzen werden aber nicht weiter verwendet - sie werden keiner Variablen zugewiesen und sind somit "verloren". Somit musst Du in den Konstruktoren der jeweiligen Klassen schauen, was da passiert.

Man kann Klassen auch nicht ausführen, denn eine Klasse ist nur eine Definition von Daten und Operationen. Was hier ausgeführt wird ist der Konstruktor der jeweiligen Klasse im Rahmen der Initialisierung des Objekts.

Danke erstmal ! :)

Okay, also mein Programm ist dafür ausgelegt mehrere Sachen zu machen. Jedoch sollen die Sachen hintereinander abgearbeitet werden (viel presskey Methoden). Ich möchte aber nicht alles in eine main Methode packen, ist dafür mein Ansatz richtig ?

0
@Einhorn1237282

Nein.

Richtig wäre, eine Klasse zu deklarieren, welche beispielsweise eine Methode "showMenu" hat. Dieses zeigt ein Menü mit den Möglichkeiten und ruft dann für die Funktionalitäten eigenen Methoden auf.

In main() stünde dann beispielsweise nur:

Program p = new Program();
p.showMenu();

Und die restliche Programmlogik steckt alleine in der Klasse "Program".

0
@ohwehohach

Das Problem ist, das mein Programm von alleine laufen soll und ich nicht alles über ein Menu steuern möchte. Also müsste ich für jede Methode die ich ausführen möchte deinen Ansatz nutzen oder ?

0
@Einhorn1237282

Methoden können sich auch gegenseitig aufrufen. Es gibt keinen Grund, warum nicht sowas her auch funktionieren sollte:

public void run()
{
  step1();
  step2();
  step3();
  ...
}

wobei step1 bis step3 jeweils Methoden der Klasse sind.

1

normalerweise schreibst du sowas wie:

Test test = new Test();

dabei wird ein neues Objekt des Typs Test initiiert. Es wird dabei der Konstruktor ausgeführt. Eine Klasse kann mehrere Konstruktoren haben.

Siehe:

https://javabeginners.de/Grundlagen/Konstruktor.php

https://www.java-tutorial.org/objekte-in-java.html

Woher ich das weiß:Beruf – Softwareentwickler

Danke erstmal ! :)

Okay, also mein Programm ist dafür ausgelegt mehrere Sachen zu machen. Jedoch sollen die Sachen hintereinander abgearbeitet werden (viel presskey Methoden). Ich möchte aber nicht alles in eine main Methode packen, ist dafür mein Ansatz richtig ?

0
@Einhorn1237282

hm Java ist eine Objektorientierte Sprache, also macht es schon Sinn Logik in anderen Klassen zu packen.

Allerdings kommt diese Logik nicht in den Konstruktor, sondern in Methoden.

Der Konstruktor ist eigentlich nur dafür da, die (privaten) Felder des Objekts zu initialisieren.

Sagen wir mal du hast eine Klasse "Taschenrechner". Diese soll verschiedene grundlegende Funktionen eines Schulrechners abdecken. Dann machst du erstmal eine Klasse: Taschenrechner:

public class Taschenrechner {
Double zwischenspeicher1;
Double zwischenspeicher2;

  public Taschenrechner() {
    /* das ist der Konstruktor der aufgerufen wird sobald du
    ... = new Taschenrechner(); aufrufst. */
    this.zwischenspeicher1 = new Double();
    this.zwischenspeicher2 = new Double();
  }
    
  public Double addieren(Double zahl1, Double zahl2) {
    return zahl1 + zahl2;
  }
}

Dann kannst du aus deiner main() sowas machen:

...
Taschenrechner meinTaschenrechner = new Taschenrechner();

zahl = meinTaschenrechner.addieren(1, 1);
....
0

Damit werden neue Objekte einer Klasse initialisiert. Es wird also der Code im Konstruktor ausgeführt.

Das Objekt wird aber nicht gespeichert. Sobald die Klasse fertig ist (also nicht mehr läuft) wird sie von der GC gelöscht.

Über das Schlüsselword "new" kannst du neue Objekte einer kalsse erzeugen.

Konkret ruft

new Klassenname(Parameterliste)

den Konstruktor der Klasse Klassenname auf, der zu der parameterliste passt.

Jede Klasse hat einen Standardkonstruktor ohne Parameterliste.(Sofern keine anderen konstruktoren definiert werden)

Außerdem gibt es einen Sonderfall beid er Erzeugung von Arrays:

new Klassenname_oder_Primitivebezeichner[]

Erzeug einen Array des angegebenen Typs.

Danke erstmal ! :)

Okay, also mein Programm ist dafür ausgelegt mehrere Sachen zu machen. Jedoch sollen die Sachen hintereinander abgearbeitet werden (viel presskey Methoden). Ich möchte aber nicht alles in eine main Methode packen, ist dafür mein Ansatz richtig ?

1
@Einhorn1237282

Das lässt sich so nicht sagen.

Es gibt verscheidense Programmierparadigmen und Entwuzrfsmuster.

Wenn du in deinem Code nicht viel hast, was du mehrfach tust, dann kann es durchaus auch sinnvoll sein, dass Alles in einer einzelnen methode zu haben.

0

Was möchtest Du wissen?