Przenosząc kod z C++, potrzebuję zdefiniować zmienne, które będą przechowywać stan aplikacji. Z informacji zaciągniętych usłyszałem, że w JAVIE nie ma zmiennych globalnych w takim przypadku. Jak takie zadanie zrealizować?
Przenosząc kod z C++, potrzebuję zdefiniować zmienne, które będą przechowywać stan aplikacji. Z informacji zaciągniętych usłyszałem, że w JAVIE nie ma zmiennych globalnych w takim przypadku. Jak takie zadanie zrealizować?
Ja używałem zmiennych statystycznych.
Faktycznie. Można zdefiniować klasę, w której znajdą się publiczne pola statyczne. Pełnią one rolę zmiennych globalnych. Jeśli dodatkowo zadeklarujemy je jako final, to uzyskamy stałe globalne. Przykładowo:
package pl.altkom.defs; public class Global { // stałe public static final int COLS = 4; public static final float MAX = 12.0f; // zmienne public static int counter; public static double currentMax; }
Do takich zmiennych można odwołać się poprzez nazwę klasy z dowolnego miejsca programu:
import pl.altkom.defs; public class OtherClass { private int x = Global.counter; ... }
lub bez jawnego poprzedzania nazwą klasy, o ile zastosujemy import statyczny (od JSE 5):
import static pl.altkom.defs.*; public class OtherClass { private int x = counter; ... }
Jeśli chodzi o stałe globalne (a propos powyższej odpowiedzi), to:
1. Można je definiować w interfejsie np.:
public interface Consts
{
int CONST1 = 100;
String CONST2 = "string";
}
Tego typu konstrukcja powoduje oznaczenie implicite CONST1 i CONST2 jako public static final.
2. W przypadku typów nieprymitywnych - stałe są tylko referencje, co oznacza, że możesz modyfikować stan stałej, nie możesz natomiast przypisać do niej innej referencji.