final i static w Javie??

0

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.

0

Połączenie static i final służy do definiowania stałych więc możesz im nadać wartość tylko w taki sposób:

public static final int x = 5;

lub

public static final int x;

static
{
    x = 6;
}
0

entombed - a czy nie wiesz, dlaczego x i y nie ustawiają się domyślnie na zero (jeśli wycinam konstruktor), jak przy normalnym obiekcie bez zainicjowanej zmiennej w polu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1