końcowe i statyczne w Javie

Przeczytałem to zdanie w książce, ale nie zrozumiałem:

Pole, które jest zarówno statyczne, jak i końcowe, ma tylko jeden element pamięci, którego nie można zmienić.

Czy ktoś może mi to wyjaśnić?

Author: Jonas, 2010-10-26

4 answers

Źródłem Twojego zamieszania może być to, że słowo "static" w języku angielskim i jego znaczenie w Javie są tylko luźno ze sobą powiązane.

Zmienna zdefiniowana w klasie Cat w sposób "normalny" może być określana jako zmienna instancyjna.

class Cat {
   int weight;
}

Za każdym razem, gdy tworzysz nowy obiekt typu Cat, tworzysz nową kopię zmiennej 'weight'. Jeśli utworzysz 10 obiektów typu Cat, każdy z nich ma własną kopię zmiennej weight.

Zmienną "statyczną" można traktować jako zmienna poziomu klasy, w przeciwieństwie do zmiennej instancji. Zmienna statyczna ma tylko jedną kopię i należy do samej klasy Cat, zamiast mieć jedną kopię dla każdego obiektu typu Cat.

class Cat {
   static String speciesName;

   int weight;
}

Tutaj, bez względu na to ile obiektów typu Cat stworzymy, jest tylko jedna kopia speciesName.

Jeśli zmienna statyczna jest również 'ostateczna', to ta jedna kopia zmiennej jest jedynym miejscem przechowywania, którego nie można zmienić. Jeżeli zmienna "waga" była ostateczna w w powyższym przykładzie byłoby 10 elementów pamięci, których nie można by zmienić - po jednym dla każdego obiektu typu Cat, który stworzyliśmy.

 47
Author: Mike Edwards,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-25 21:24:28

Zmienna static jest wspólna dla wszystkich instancji klasy. Zmienna final nie może się zmienić po pierwszym ustawieniu.

Tak więc zmienna static final w Javie jest wspólna dla wszystkich instancji klasy i nie można jej zmienić po jej pierwszym ustawieniu.

class Car {

    static final int numberOfWheels = 4;
    Color color;

    public Car(Color color) {
        this.color = color;
    }
}

Car redCar = new Car(Red);
Car blueCar = new Car(Blue);

Każdy samochód ma teraz jedną indywidualną i zmienną właściwość color i dzieli tę właściwość numberOfWheels, której nie można zmienić.

 24
Author: Jonas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 14:20:45

Zobacz sekcję "stałe"dla wyjaśnienia na tej stronie:

Http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

 1
Author: rmk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-25 21:09:02
  • Final oznacza, że nie można ponownie przypisać wartości do żadnej zmiennej
  • Static oznacza, że tylko jedna kopia odniesienia może być w całości w klasie wszystkich metod.
 1
Author: Vishwa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 14:01:04