# Als FINAL deklarieren -> sinnvoll?



## anfang (15. Jan 2007)

Eclipse schlägt vor mehrere Variablen als final zu definieren sollte man den Vorschlag folgen?
Und wieso?

Ich hatte:


```
public static void main(String[] args) {
    Frame frame = new Frame();
```

Vorgeschlagen würde:


```
public static void main(final String[] args) {
    final Frame frame = new Frame();
```

sogar vor Exception setzte es final


```
catch(final Exception e) {
      e.printStackTrace();
    }
```

gruß Pepe


----------



## Beni (15. Jan 2007)

Das final könnte höchstens ein versehentliches Überschreiben einer Variable verhindern, aber wie wahrscheinlich ist das schon?

Also: machs wenn du willst und es Übersichtlich findest, notwendig ist es nicht.


----------



## Guest (15. Jan 2007)

Perfekt... danke dir


----------



## nocxsville (15. Jan 2007)

Ich persönlich finde das sehr wichtig. Man sollte generell so viel wie möglich final setzen. Das verhindert bei Methoden ungewolltes überschreiben und bei Variablen ungewolltes Wertverändert / Referenzverbiegen. So kann man mit unter viel schneller Fehlerquellen ausfindeig machen.

Gruß,
nocxsville.


----------



## byte (15. Jan 2007)

Seit Eclipse 3.2 gibts dafür auch ein Refactoring.


----------



## mephi (15. Jan 2007)

final bedeutet ja bei primitiven datentypen, dass sie nicht verändert werde können.. und bei refernzen auf objekte? eigentlich nur dass die referenz nun immer darauf zeigt und auf das objekt selber hat es keinen einfluss oder?
sry benutz das ziemlich selten


----------



## SlaterB (15. Jan 2007)

anders macht es keinen Sinn

bei allgemein unveränderlichen Objekten wie String/ Integer kommts natürlich in etwa hin


----------



## byte (15. Jan 2007)

mephi hat gesagt.:
			
		

> final bedeutet ja bei primitiven datentypen, dass sie nicht verändert werde können.. und bei refernzen auf objekte? eigentlich nur dass die referenz nun immer darauf zeigt und auf das objekt selber hat es keinen einfluss oder?



So ist es. Und von finalen Klassen kann man nicht mehr ableiten.


----------



## André Uhres (16. Jan 2007)

http://www.java-forum.org/de/viewtopic.php?p=154193#154193


----------



## Leroy42 (16. Jan 2007)

Bei final deklarierten Methoden _kann_ ein enormer Performancegewinn
erreicht werden, da die JVM diese Methoden nicht über eine Funktionstabelle
aufrufen _könnte._

Das macht allerdings nur dann Sinn, wenn du eine Methode ein paar
hunderttausend Mal aufrufst.


----------



## mephi (16. Jan 2007)

und was genau geschieht da, dass den performancegewinn ausmacht? und was heißt dass zB für den rückgabewert?


----------



## byte (16. Jan 2007)

Mit dem Rückgabewert hat das nix zu tun. Die VM kann finale Methoden intern halt anders handhaben (Stichwort: späte Bindung, Polymporphie). Aber der Performance-Gewinn ist eher maginal, um nicht zu sagen: vernachlässigbar.


----------



## Gast (16. Jan 2007)

ich würde auch sagen, man sollte sich nicht seinen source mit finals zupflastern nur wegen nem eventuellen performancegewinn


----------



## byte (16. Jan 2007)

Wie gesagt: beim Entwickeln einfach ignorieren und am Ende mit einem Klick die finals rein-refactorn.


----------



## mephi (16. Jan 2007)

byto hat gesagt.:
			
		

> Wie gesagt: beim Entwickeln einfach ignorieren und am Ende mit einem Klick die finals rein-refactorn.


und wie mach ich das? hab jetz in eclipse unter refactor nichts gefunden


----------



## byte (16. Jan 2007)

Ach sry, is nich unter Refactoring sondern bei Source -> Clean Up...


----------



## Gast (17. Jan 2007)

gibts da auch nen ant task zu?


----------

