napisałem taki testowy "programik":
class Nowy
{
final static int x;
final static int y;
Nowy(int x, int y){
this.x = x; this.y = y;}
public static void main(String args[]){
Nowy nju = new Nowy(100, 200);
System.out.println("wspolrzedne nju to: x = " + nju.x + ", y = " + nju.y);
}
}
w ogóle nie kapuję o co tu chodzi.
tak napisany program nie chce się skompilować ze względu na konstruktor.
dostaję komunikat:>>cannot assign a value to final variable x<<, i to samo dla y.
z kolei jeśli w ogóle wyciąć ten cały konstruktor i poprawić w deklaracji nju:
Nowy nju = new Nowy();
to program się nie kompiluje, bo nie ma zainicjowanych x i y!!
dostaję komunikat: >>variable x (lub y) might not have been initialized<<
to jak: nie może zainicjować x i y z konstruktora, tak jakby JUŻ BYŁY
zainicjowane , ale nie może też ich wywołać w System.out.println, bo jeszcze NIE SĄ zainicjowane????!!!
po pierwsze: dlaczego nie mogę zainicjować wartości zmiennej typu final static w
konstruktorze?
po drugie: jeśli wywalam konstruktor to czemu x i y nie ustawiają się domyślnie na
zero, jak przy normalnym obiekcie z niezainicjowaną zmienną w polu?
problem pojawia się tylko wtedy, gdy int x i int y są określone jako "final static". we wszystkich innych przypadkach działa w porządku.
czy ktoś mógłby mi wytłumaczyć, czy za tym kryje się jakaś głębia?
z góry dzięki.