Wiem, że używanie zmiennych final sie przydaje. Kompilator coś takiego:
final int number = 10;
object.method(number);
zamieni na:
object.method(10);
A jak jest z obiektami? Czy zadeklarowanie obiektu jako final coś mi daje?
Wiem, że używanie zmiennych final sie przydaje. Kompilator coś takiego:
final int number = 10;
object.method(number);
zamieni na:
object.method(10);
A jak jest z obiektami? Czy zadeklarowanie obiektu jako final coś mi daje?
Modyfikator final jest uzywany dla klas, metod i zmienych, wszystko co ma final nie moze byc zmieniane w przszlosci.
Jesli zadeklarujemy final dla klasy oznacza to ze nie mozna tej klasy dziedziczyc.
pozdr.
kalvin, to wiem. Pytam się czy to coś daje dla obiektu? Ineresuje mnie to, ponieważ tworzę program z obiektami, które nigdy się nie zmienią po zainicjalizowaniu. Zależy mi na wydajności, wiec się pytam.
Jest to wymagane na przyklad gdy twrzysz anonimowa klase zagniezdzaona i chcesz wykorzystac w niej jakas zmienna lokalna jakiegos typu - wtedy musi byc oznaczona jako final.
Obiekt, pole inego obiektu, oznaczone jako final nie może być zmienione. i OK. Dokładanie oznacza to że nie może zostać zmieniona referencja do pamięci reprezentowana przez zmienną. Jednocześnie można zmieniać pola obiektu oznaczonego jako final. Obiekty, pola final muszą być inicjowane najpóźniej w konstruktorze.
Przykładowy kod w którym pole finalny jest final, ale jednocześnie można zmienić jego pole
public class ObiektFinal {
public final Finalny finalny;
public ObiektFinal(){
this.finalny = new Finalny();
}
public static void main( String[] args ) {
ObiektFinal obiektF = new ObiektFinal();
obiektF.finalny.pole = 10;
System.out.println(obiektF.finalny.pole);
obiektF.finalny.pole = 11;
System.out.println(obiektF.finalny.pole);
}
}
class Finalny{
public int pole;
}
Oczywiście nie można zrobić w ten sposób:
this.finalny = new Finalny();
nigdzie poza:
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.