Final sprawia, że pole jest tylko do odczytu. Inaczej mówiąc tworzy zmienną tylko do odczytu. Różni się tym od stałej, że nie trzeba jej definiować podczas deklaracji. Można określić jej wartość później, ale wtedy już zmienić jej się nie da. Static sprawia, że rezerwuje się tylko jeden obszar pamięci dla każdego z obiektów, zamiast tworzyć po jednej takiej samej stałej dla każdego obiektu. Połączenie dwóch tworzy stałą i efekt jest taki:
public static void main(String[] args) {
final int stala;
stala = 8;
System.out.println(stala);
}
Powyższy kod się wykona.
public static void main(String[] args) {
final static int stala;
stala = 8;
System.out.println(stala);
}
Drugi kod już zwróci błąd: Error:(2, 22) java: modifier static not allowed here
public class Main {
final static int stala = 8;
public static void main(String[] args) {
System.out.println(stala);
}
}
Trzeci kod też się wykona, jednak trzeba mieć na uwadze gdzie jest definicja stałej.