Frezl
Erfahrenes Mitglied
Hallo allerseits,
ich habe ein kleines Problem mit meinen Objekten in Java: Ich hab zwei Hühner erschaffen, die munter gackern, scharren und Eier legen können. Und außerdem kann ein Huhn ein anderes attackieren, bis dieses keine Lebenspunkte mehr hat und stirbt. Jedenfalls sterben soll, denn leider gackert das Huhn nach seinem Tod munter weiter. Das Problem ist, dass Java soweit ich weiß keinen echten Destruktor für Objekte hat. Mit finalize() wird dem Garbage Collector ja nur empfohlen, das Objekt zu löschen. Aber der tuts nur, wenn er gerade Lust dazu hat. Selbes Spiel mit System.gc().
Das einzige, was funktioniert, ist der Aufruf von Elfi = null; um das Objekt Elfi zu löschen. Aber ich hab nicht rausgefunden, wie ich das aus einem anderen Objekt heraus bewerkstelligen kann. Aber seht selbst:
Main.java
Huhn.java
Ei.java
(Der Vollständigkeit halber, obwohl diese Klasse mit dem Problem nix zu tun hat)
Weiß jemand Rat? Oder muss ich tatsächlich darauf warten, bis sich der Sensenman bemüßigt fühlt, das Huhn von seinen Leiden zu erlösen?
Gruß und Dank,
Frezl
ich habe ein kleines Problem mit meinen Objekten in Java: Ich hab zwei Hühner erschaffen, die munter gackern, scharren und Eier legen können. Und außerdem kann ein Huhn ein anderes attackieren, bis dieses keine Lebenspunkte mehr hat und stirbt. Jedenfalls sterben soll, denn leider gackert das Huhn nach seinem Tod munter weiter. Das Problem ist, dass Java soweit ich weiß keinen echten Destruktor für Objekte hat. Mit finalize() wird dem Garbage Collector ja nur empfohlen, das Objekt zu löschen. Aber der tuts nur, wenn er gerade Lust dazu hat. Selbes Spiel mit System.gc().
Das einzige, was funktioniert, ist der Aufruf von Elfi = null; um das Objekt Elfi zu löschen. Aber ich hab nicht rausgefunden, wie ich das aus einem anderen Objekt heraus bewerkstelligen kann. Aber seht selbst:
Main.java
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package zoo;
/**
*
* @author Frezl
*/
public class Main {
// METHODEN
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Hühner
Huhn Elfi = new Huhn("Elfriede", 430, "braun", 2);
Huhn Berta = new Huhn("Berta", 410, "weiß", 3);
// Leben auf dem Hühnerhof
Elfi.gackern();
Berta.gruessen();
Berta.scharren();
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.scharren();
Elfi.gackern();
Elfi.gackern();
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.scharren();
Elfi.gackern();
Elfi.gackern();
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.attackieren(Elfi);
Berta.attackieren(Elfi); // hier stirbt Elfi, da die Lebenspunkte auf 0 sinken
// leider lebt der Geist von Elfi aber munter weiter :-P
Elfi.gackern();
Elfi.scharren();
Ei Osterei = Elfi.eiLegen();
// erst wenn Gott das Huhn mit eigener Hand tötet, ist es erlöst
Elfi = null;
Elfi.gackern(); // und kann auch nicht mehr gackern... (Was zu einer NullPointerException führt)
}
}
Huhn.java
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package zoo;
/**
*
* @author Frezl
*/
public class Huhn {
// ATTRIBUTE
String Name;
float Gewicht;
String Farbe;
int Alter;
int Lebenskraft;
// METHODEN
void gackern() {
System.out.println(Name + ": gack");
}
void gruessen() {
System.out.println(Name + ": Hallo, ich bin " + Name + ".");
}
void scharren() {
System.out.println(Name + ": *scharr*");
}
void attackieren(Huhn Huhn) {
Huhn.Lebenskraft = Huhn.Lebenskraft - 10;
System.out.println("> " + Huhn.Name + " hat jetzt noch " + Huhn.Lebenskraft + " Lebenspunkte.");
if(Huhn.Lebenskraft <= 0) {
Huhn.finalize(); // Hier soll das attackierte Huhn getötet werden
System.out.println("> " + Huhn.Name + " wurde von " + this.Name + " getötet.");
}
}
Ei eiLegen() {
System.out.println("> " + Name + " hat ein Ei gelegt.");
return new Ei("braun", 45);
}
// KONSTRUKTOR
Huhn(String Name, float Gewicht, String Farbe, int Alter) {
this.Name = Name;
this.Gewicht = Gewicht;
this.Farbe = Farbe;
this.Alter = Alter;
this.Lebenskraft = 100;
System.out.println("> " + Name + " wurde geboren.");
}
// DESTRUKTOR
@Override
protected void finalize() {
System.out.println(Name + ": *röchel*");
System.out.println("> " + Name + " ist gerade gestorben.");
}
}
Ei.java
(Der Vollständigkeit halber, obwohl diese Klasse mit dem Problem nix zu tun hat)
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package zoo;
/**
*
* @author Frezl
*/
public class Ei {
// ATTRIBUTE
String Farbe;
float Gewicht;
// KONSTRUKTOR
Ei(String F, float G) {
Farbe = F;
Gewicht = G;
}
}
Weiß jemand Rat? Oder muss ich tatsächlich darauf warten, bis sich der Sensenman bemüßigt fühlt, das Huhn von seinen Leiden zu erlösen?
Gruß und Dank,
Frezl
Zuletzt bearbeitet: