[Java] "Löschen" von Objekten?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Da du das CardLayout verwendest, brauchst du doch nur die Ansicht (Card) wechseln, die gerade angezeigt wird?


KriegerMan 
Beitragsersteller
 12.11.2019, 23:08

Das stimmt so. Mir wurde nur empfohlen, dass ich diese ganze Prozedur in ne eigene Klasse kapseln soll. Deswegen dachte ich, dass das löschen da vllt. etwas bringt. Ist das ein unnötiger Schritt?

0
regex9  12.11.2019, 23:13
@KriegerMan

Die Funktionen für den Login kommen in eine eigene Klasse. Die instanzierst du dann im Controller/in den Controllern, der/die die Events auf dem Layout handhabt/handhaben (Klick auf Button, u.ä.). Löschen musst du aber nichts.

1
KriegerMan 
Beitragsersteller
 13.11.2019, 00:17
@regex9

Alles klar. Danke dir. Noch eine Nebenfrage: Ich möchte für eine Funktion (Filterangaben) eine neue Klasse bauen (noch in der Main, füllt aber alles, weil die Funktion ca. 80 Objekte enthält). Die Filterangaben basieren auf versch. Listenelementen die wählbar sind. D.h. anderes Listenelement, andere Filter. Ich würde gerne die Klasse Filter erstellen und dann Subklassen für das jeweilige Listenelement. Pack ich dann jede Subklasse in eine eigene Datei? Wären dann 8 Dateien extra :O LG

0
regex9  13.11.2019, 00:20
@KriegerMan

Jede Klasse sollte in eine eigene Datei. Das gilt ebenso für Enumerationen und Interfaces. Soweit die empfohlene Konvention - wie du dein Projekt letztendlich wirklich verwaltest, ist natürlich deine Entscheidung.

0
KriegerMan 
Beitragsersteller
 13.11.2019, 00:31
@regex9

Danke dir! Ich möchte schon gern Standards einhalten. Vielen Vielen Dank <3

0

Hi,

du denkst viel zu kompliziert... die automatische Speicherverwaltung ist gerade ein Vorteil von Java, und man muss dazu nichts tun.

Wenn es keine Referenzen mehr auf ein Objekt gibt (sei es, du setzt die Variable auf null oder diese verschwindet aus dem Gültigkeitsbereich) wird das Objekt irgendwann mal von Java automatisch freigegeben.

Das passiert nicht sofort (man kann das System.gc() und Co beeinflussen), da manuell irgendwas zu tun ist aber unnötig, Java kann das ganz gut selbst.

Wenn deine Anmeldung fertig ist, versteckst du das Fenster einfach (setVisible(false)) und setzt die Variable, die das Objekt beinhaltet auf null, freigeben tut Java dann das Fenster mit allen Unterobjekten von allein.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

KriegerMan 
Beitragsersteller
 12.11.2019, 23:06

D.h. Ablauf wie folgt: Anmeldemaske anzeigen, anmelden, Fenster unsichtbar/deaktiviert machen, referenz löschen. So korrekt?

1

Hallo.

Der Garbage Collector arbeitet autonom und kann nicht direkt beeinflusst werden. Alles was du tun kannst ist, ihm Hinweise zu geben und so zu programmieren, dass Speicher schnell frei werden kann.

  • Pack Variablen immer in den kleinst nötigen Scope
  • Lösche Referenzen auf nicht mehr benötigte Objekte (Variable auf null setzen)

Es nutzt auch nichts, die finalize() Methode manuell aufzurufen. Dadurch wird zwar der Code in der Methode ausgeführt, das Objekt aber nicht gelöscht.

Woher ich das weiß:Berufserfahrung – Berufserfahrung