# Eine kleine Java Frage



## janosch (13. Juni 2003)

HI !

Ich hab hier eine kleine Frage aus der Javawelt und wolte mal wiessen ob ich die richtig beantwortet habe.

2. class Foo {
    Bar bar = new Bar();
   }

   Wie nennt man den codierten Zustand ??
A: Vererbung 
B: Konstuktor
C: Assoziation
D: Polymorphismus

Ich würde die Antwort B nehmen ,weil man ja ein Konstruktor aufruft.
Ist meine Antwort richtig?

mfg janosch


----------



## AlexD1979 (16. Juni 2003)

b ist richtig.
Du erzeugst eine neue Instanz von dem Objekt "Bar".


----------



## Christian Fein (16. Juni 2003)

2. class Foo {
Bar bar = new Bar();
}

<- was soll denn der Blödsinn.
Das ist so nicht ganz richtig.


----------



## janosch (16. Juni 2003)

*lol* Die Frage wurde so von einem Professor gestellt  

Bei uns wuste auch keiner was der eigentlich will   

mfg janosch


----------



## Thomas Darimont (16. Juni 2003)

Servus!

Das nennt man Assoziation!

In der Klasse Foo gibt es eine Membervariable vom Typ Bar! ...

Siehe:

http://www.galileocomputing.de/open...xxxJava060001256AssoziationenzwischenObjekten

Gruss Tom


----------



## Christian Fein (16. Juni 2003)

nur instanziere ich nicht bei der Klassendeklaration ein Object.


----------



## Thomas Darimont (16. Juni 2003)

Servus!



> nur instanziere ich nicht bei der Klassendeklaration ein Object.



... man sollte nicht, aber man kann ...


```
public class Foo{

bar b = new bar();

	public Foo(){
		System.out.println("Ich bin foo!");
        }

	public static void main(String[] args){
       		new Foo();
	}

	class bar{

	  	 public bar(){
			System.out.println("Ich bin bar!");	
  	 	 }

	}

}
```

Liefert :

"Ich bin bar!"
"ich bin foo!"

Gruss Tom


----------



## Christian Fein (16. Juni 2003)

> _Original geschrieben von Tom _
> *
> ... man sollte nicht, aber man kann ...
> *



Was ich nicht bestreite, jedoch ist ctor die Stelle an der Member instanziert werden.


----------



## Christoph (16. Juni 2003)

Kann da mal einer einen Übersetzer installieren


----------



## Dario Linsky (16. Juni 2003)

> Was ich nicht bestreite, jedoch ist ctor die Stelle an der Member instanziert werden.


... was meiner Ansicht nach auch nicht unbedingt ganz sauber ist, weil die Membervariablen direkt mit der Klasse selbst instanziert werden - also sofort im Speicher liegen, obwohl man sie evtl. noch gar nicht benötigt.
Allerdings weiss ich nicht, wie Java damit umgeht.


----------



## Christian Fein (16. Juni 2003)

Nun wenn ich habe:


```
class FirstClass
   SecondClass sc = new SecondClass();
end
```

wann wird dann sc instanziert?
Ebenso wenn die Klasse instanziert wird, vorher match ja kein sinn. sc ist nach diesem Beispiel nicht eine Klassenvariable, und somit macht auch nur eine instanzierung des Members sinn wenn eine inszierung der Klasse erfolgt.

Demnach duerfe sich in Sachen Instanzierungszeitraum und auch lebensdauer rein gar nichts von:

```
class FirstClass
   SecondClass sc;
   
   public FirstClass()  {
     sc = new SecondClass();
   }
}
```
unterscheiden. Sprich der GC räumt beides auf sobald die letzte Referenz auf das Object von FirstClass seine Gültigkeit verliert.

Oder habe ich hier einen Denkfehler?


----------



## Dario Linsky (16. Juni 2003)

Denkfehler nicht, aber vielleicht hast Du mich nicht ganz verstanden. Es gibt doch immer wieder Situationen, wo man die Objektinstanz noch nicht sofort benötigt. Warum soll man dann also Speicher dafür verschwenden?

Folgendes Beispiel:

```
class meineKlasse
{
    public Frame f;

    public meineKlasse()
    {
        // here be nothing!
    }

    public void f_erzeugen()
    {
        f = new Frame("blub");
    }

    public static void main(String[] args)
    {
        meineKlasse mObject = new meineKlasse();
        // hier ist für den Frame noch kein Speicher reserviert, 
        // weil er u. U. gar nicht gebraucht wird
        meineKlasse.f_erzeugen();
        // ab hier kann ich irgendwas mit dem Frame machen
    }
}
```


----------



## Thomas Darimont (16. Juni 2003)

Servus!



> Sprich der GC räumt beides auf sobald die letzte Referenz auf das Object von FirstClass seine Gültigkeit verliert.



...ceteris paribus ;-)

... man sagt ja, dass bei der Instanziierung eines Objektes zuerst der Konstruktor durchgeführt wird, aber...

Versuch mal folgendes:
(nur zum Spass);


```
public class Test(){
   
     static{ 
          System.out.println("eins");
     }

     public Test(){
          System.out.println("zwei");
     }

     public void doOut(){
          System.out.println("drei");
     }
 
     public static void main(String[] args){
        new test().doOut();
     }

}
```

(Hoffe mal, dass ich mich jetzt nicht verschrieben habe, leider habe ich auf meinem Laptop noch kein JDK installiert ums noch mal vor dem Posten zu testen...)

Gruss Tom


----------



## Christian Fein (16. Juni 2003)

Habs jetzt nicht ausgetestet, aber es ist logisch das statische Dinge vorher "abgearbeitet" werden.
Das macht auch sinn.

aber hier:

class Foo {
Bar bar = new Bar();
}

ist nicht von static die Rede.


----------



## Dario Linsky (16. Juni 2003)

Das hängt aber nicht mit der Instanzierung der Klasse zusammen, der Code in dem static-Block wird auch ausgeführt, wenn man keine Instanz von der Klasse anlegt:

```
class test
{   
     static
     { 
          System.out.println("eins");
     }

     public test()
     {
          System.out.println("zwei");
     }

     public void doOut()
     {
          System.out.println("drei");
     }
 
     public static void main(String[] args)
     {
        // einfach mal leer lassen
     }
}
```


----------



## Thomas Darimont (16. Juni 2003)

Servus!



> Das hängt aber nicht mit der Instanzierung der Klasse zusammen, der Code in dem static-Block wird auch ausgeführt, wenn man keine Instanz von der Klasse anlegt:



Korrekt ;-)

Gruss Tom


----------



## Christian Fein (16. Juni 2003)

jo 

das ist bei Ruby interressant:


```
$debug = true

class Foo
  if $debug 
      def DebugClass
         puts "Bla"
      end
  end 
end
```

Klassen Definitionscode wird ausgefuehrt. Sprich mann kann vollkommen Dynamisch Klassen generieren und instanzieren.

Damit kann mann eine Menge Schundluder betreiben, und so machen Programmierer der mit dem Code dann arbeiten muss in den Wahnsinn treiben


----------



## Christian Fein (16. Juni 2003)

> _Original geschrieben von Lirion _
> *Das hängt aber nicht mit der Instanzierung der Klasse zusammen, der Code in dem static-Block wird auch ausgeführt, wenn man keine Instanz von der Klasse anlegt:
> *



Bestes Beispiel hierfür:


```
class Myclass {

 public static void main(String[] args) {
   System.out.println("MyClass wird nie instanziert");
 }

}
```

Ausgabe, obwohl von Myclass nie etwas instanziert wird.


----------



## Dario Linsky (16. Juni 2003)

Das ist mir schon klar, Chris. Allerdings stört es mich an Java doch etwas, dass der Einsprungpunkt für das gesamte Programm in einer Klasse definiert wird. Nichts gegen OOP, aber das finde ich persönlich etwas unpraktisch... 

Wenn wir schon voll im Offtopic sind: War nicht irgendwann mal die Rede von einem Forum speziell für programmiertechnisches Offtopic?


----------



## Christian Fein (16. Juni 2003)

Ja Forum steht ja schon. 
Nur sehen kanns noch keiner. 

Vielleicht währe dieser Thread ja auch genau passend dafuer...


----------



## Dario Linsky (16. Juni 2003)

> Ja Forum steht ja schon.
> Nur sehen kanns noch keiner.


Wieso eigentlich nicht? Warten wir damit noch auf die V4 oder gibt's dafür einen anderen Grund? (Sorry, falls die Frage überflüssig ist...  )


----------



## Christian Fein (17. Juni 2003)

der grund ist:
Damit du was zu fragen hast 

Nein mann kann ja schonmal anfangen solche Threads nach und nach reinzuverschieben.
Leere Boards sind nicht so angehm


----------



## Dario Linsky (17. Juni 2003)

> der grund ist:
> Damit du was zu fragen hast


Dann gleich die nächste Frage. 



> Leere Boards sind nicht so angehm


Unsichtbare Boards werden aber auch nicht so schnell voll, oder? Es sei denn natürlich, man hilft künstlich mit. 
Aber so, wie ich mich kenne, kriegen wir das auch auf natürliche Weise relativ schnell gefüllt. 

Langsam ist dieses Thema sowieso schon überqualifiziert für das Board.


----------



## Christian Fein (17. Juni 2003)

ok ok 
dann oeffne ich die pforten


----------

