Wie war das noch´mal mit den Objekten?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
also, ich hab das mal mit dem c++ an den 'nagel gehangen' und bin mit java angefangen.

deswegen gleich eine frage *hehe*:

wenn ich ein objekt alá:

ConnectionDB cn = new ConnectionDB();

erzeuge, ist es doch zur laufzeit immer vorhanden. wie kann ich denn aus einem anderen package bzw. einer anderen klasse schauen, ob dieses objekt noch 'am leben' ist? muss dafür das objekt (cn) zur klasse weitergereicht werden, oder kann man das global aufrufen?

thx 4 help!

gondor(..)
 
Ein Objekt ist so lange am "Leben", wie die Methode, in der das Objekt sitzt lebt. Wenn du ein Objekt(zb. Eimer) in einem Objekt(zb. Lager) hast, lebt es so lange, wie das Objekt(Lager) lebt.

Du scheinst den Unterschied zwischen Klasse und Objeckt noch nicht wirklich begriffen zu haben(Sorry wenn ich mich irre): eine Klasse ist nur im Quellcode. Eine Instanzierung (zb. Object o = new Object()😉 Erzeugt ein Object und im Beispeil ist o eine Referenz auf diese Objekt.
 
ehm kommt drauf an. entweder du machst daraus eine instanzvariable und erstellst evtl. entsprechende getter/setter methoden oder du machst es als statische klassenvariable. wie du das implemetnierst ist deine sache und kommt auf den kontext drauf an.
 
@Anubis

d.h. sobald die methode z.b. cn.getConnection() abgelaufen ist, ist auch das objekt gestorben, oder nur die referenz (cn) auf dieses objekt?

@Roar

ähm... das habe ich leider noch nicht (ganz) begriffen. sry...

gondor(..)
 
Ein Objekt ist imho nur solange am Leben, wie es auch genutzt wird. Dann wird es vom Garbage Collector vernichtet.
EDIT: Wenn das Objekt global (bei global bin ich mir nicht sicher) oder statisch ist, lebt es solange wie die Klasse lebt.

Liebe Grüße
Reality
 
Reality hat gesagt.:
Ein Objekt ist imho nur solange am Leben, wie es auch genutzt wird. Dann wird es vom Garbage Collector vernichtet.

Kann man so nicht direkt sagen...solange du irgendwo eine Refernz hältst, ist es am leben.

Reality hat gesagt.:
EDIT: Wenn das Objekt global (bei global bin ich mir nicht sicher) oder statisch ist, lebt es solange wie die Klasse lebt.

Globale Objekte gibt es nicht...Es gibt statische Teile einer Klasse..
Wenn du zum Beispiel sowas machst:
Code:
 public final static Object o = new Object();
...dann wird das Objekt nie mehr gelöscht, da du ja die Referenz noch hältst... (Das Object o gehört zu der Klasse, in welcher es ist)...



Leider kann man das aber nicht wirklich so genau sagen, da wir keinen Einblick in den Code des GC haben....
 
meez hat gesagt.:
Reality hat gesagt.:
Ein Objekt ist imho nur solange am Leben, wie es auch genutzt wird. Dann wird es vom Garbage Collector vernichtet.
Kann man so nicht direkt sagen...solange du irgendwo eine Refernz hältst, ist es am leben.
Wenn diese Refrenz auch ungenutzt ist, wird es auch gelöscht.
Reality hat gesagt.:
EDIT: Wenn das Objekt global (bei global bin ich mir nicht sicher) oder statisch ist, lebt es solange wie die Klasse lebt.

Globale Objekte gibt es nicht...Es gibt statische Teile einer Klasse..
Nein?!

Code:
class A{
Image img; // <-- Nicht global?!

public static void main(String imgSollNichtGlobalSeinFragezeichen[]){
if(imgSollNichtGlobalSeinFragezeichen.length() > 0)
  System.out.println(imgSollNichtGlobalSeinFragezeichen[0]);
}
}

Liebe Grüße
Reality
 
Reality hat gesagt.:
Wenn diese Refrenz auch ungenutzt ist, wird es auch gelöscht.

Ob du sie benutzt oder nicht ist nebensächlich...Wichtig ist, ob du sie irgendwo in einer Var hast, auf die es dir möglich wäre, zuzugreifen...

Reality hat gesagt.:
Code:
class A{
Image img; // <-- Nicht global?!

public static void main(String imgSollNichtGlobalSeinFragezeichen[]){
if(imgSollNichtGlobalSeinFragezeichen.length() > 0)
  System.out.println(imgSollNichtGlobalSeinFragezeichen[0]);
}
}

Das ist eine Klassenvariable....
Wir haben wohl aneinander vorbei geredet...
Mit Global meinte ich Vars, welche du überall im Code aufrufen kannst..😉
 
gondor hat gesagt.:
@Anubis

d.h. sobald die methode z.b. cn.getConnection() abgelaufen ist, ist auch das objekt gestorben, oder nur die referenz (cn) auf dieses objekt?

So meine ich es nicht.
Sobals die Methode, die die Variable cn erzeugt am leben ist lebt das Objekt. Wie schon mal gesagt wurde. Wenn du ein Objekt erzeugst wird das Object im arbeitsspeicher irgendwo angelegt und die Variable ist nur eine Adrese auf das Objekt Es können auch mehere Variablen auf das Objekt ziegen:


Speicher Programm

ConnectionDB <-------cn
/\
--------------------cn2

Sobald es keine Referenz (Zeiger) auf das Objekt gibt wird es gelöscht.

Folgnder Code mach das Bild oben:

Code:
ConnectionDB cn = new ConnectionDB();
ConnectionDB cn2 = cn;
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben