# Innere Klassen und UML



## Coldplay (19. Feb 2009)

Hallo,

ich wollte wissen, wie sich die inneren Klassen in Java verhalten. Kann es sein, dass eine Instanz einer inneren Klasse immer noch existiert, obwohl die Instanz der äußeren Klasse nicht mehr benötigt wird? Oder können sie unabhängig voneinander existieren? Also leben und sterben sie gleichzeitig?

Ich habe als Student im Rahmen einer Vorlesung ein Projekt entwickelt. Nun muss ich einpaar UML-Diagramme für die Dokumentation erstellen. Die innere Klasse wird nur innerhalb der äußeren Klasse mit new instanziiert aber mit einer getter-Methode der äußeren Klasse können diese Instanzen auch von anderen Klassen benutzt werden. Dabei bin ich mir unsicher, ob die UML-Beziehung zwischen den inneren und äußeren Klassen eine normale Assoziation, eine Aggregation oder eine Komposition ist. Mit verschiedenen Tools habe ich von demselben Quellcode alle verschiedenen Varianten generiert bekommen. Nun weiß ich nicht mehr, welche von diesen richtig ist. Nach meinen Kenntnissen müsste es eine Komposition sein.


----------



## 0x7F800000 (19. Feb 2009)

kommt ja auch drauf an, ob das eine statische innere oder einfach nur innere Klasse ist. Eine Statische dürfte keine Probleme damit haben, unabhängig von der "umgebenden" zu existieren. Eine einfache Innere kann dagegen nicht ohne die umgebende existieren, die Instanz der "umgebenden" klasse wird auch nicht vom GC eingesammelt, weil's keinen Sinn macht. Sowas:

```
for(Iterator<String> i=((List<String>)Arrays.asList(new String[]{"assff","bfdfs","csff"})).iterator(); i.hasNext(); ){
			System.out.println(i.next());
		}
```
ist ja zB. ohne Probleme möglich, die Liste bleibt im Speicher und wird komplett durchlaufen, obwohl sie selbst sonst nirgends referenziert wird, und nur durch den Iterator i erreichbar ist.


----------



## Coldplay (19. Feb 2009)

Danke für die Antwort!

Da die statischen inneren Klassen fast wie die normalen unabhängigen top-level Klassen in dem selben Package agieren, meine ich natürlich die normalen nicht-statischen inneren Klassen.


----------



## tfa (19. Feb 2009)

Laut Definition sind Inner Classes niemals statisch. Die statischen eingebetteten Klassen sind enfach nur "nested classes".
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.1.3


----------

