Zmienna instancyjna a zmienna lokalna
Zmienna instancji to typ zmiennej, który występuje w programowaniu obiektowym. Jest to zmienna zdefiniowana w klasie, a każdy obiekt tej klasy zawiera osobną kopię tej zmiennej. Z drugiej strony użycie zmiennych lokalnych nie ogranicza się do języków programowania obiektowego. Jest to zmienna, którą można ocenić tylko w ramach konkretnego bloku kodu (np. funkcji, bloku pętli itp.), w którym jest zdefiniowana. Z tego powodu mówi się, że zmienne lokalne mają zasięg lokalny.
Co to jest zmienna instancji?
Zmienne instancji są używane w programowaniu obiektowym do przechowywania stanu każdego obiektu w klasie. Są one również znane jako zmienne składowe lub zmienne pól. Zmienne instancji są deklarowane bez użycia słowa kluczowego static w Javie. Wartości przechowywane w zmiennych instancji są unikalne dla każdego obiektu (każdy obiekt ma osobną kopię), a wartości w nich przechowywane reprezentują stan tego obiektu. Miejsce na zmienną instancji jest alokowane na stercie, gdy ten obiekt jest alokowany na stercie. Dlatego zmienne instancji są przechowywane w pamięci tak długo, jak obiekt jest aktywny. Na przykład kolor jednego samochodu jest niezależny od koloru innego samochodu. Tak więc kolor obiektu samochodu może być przechowywany w zmiennej instancji. W praktyce zmienne instancji są deklarowane wewnątrz klas i poza metodami. Zwykle zmienne instancji są deklarowane jako prywatne, więc dostęp do nich można uzyskać tylko w zadeklarowanej klasie.
Co to jest zmienna lokalna?
Zmienne lokalne to zmienne mające zasięg lokalny i są deklarowane w określonym bloku kodu. Zmienne lokalne mogą być postrzegane jako zmienne używane przez metodę do przechowywania jej stanu tymczasowego. Zasięg zmiennej lokalnej jest określany na podstawie miejsca, w którym jest zadeklarowana zmienna, a do tego celu nie są używane specjalne słowa kluczowe. Zazwyczaj dostęp do zmiennej lokalnej jest ograniczony w obrębie zadeklarowanego bloku kodu (tj. między otwierającym i zamykającym nawiasem klamrowym tego bloku kodu). Zmienne lokalne są zwykle przechowywane w stosie wywołań. Umożliwiłoby to rekurencyjnym wywołaniom funkcji przechowywanie własnych kopii zmiennych lokalnych w oddzielnych przestrzeniach adresowych pamięci. Kiedy metoda zakończy swoje działanie, informacja o tej metodzie jest wyskakiwana ze stosu wywołań, niszcząc również przechowywane zmienne lokalne.
Jaka jest różnica między zmienną instancji a zmienną lokalną?
Zmienne instancji są deklarowane wewnątrz klas poza metodami i przechowują stan obiektu, podczas gdy zmienne lokalne są deklarowane w blokach kodu i służą do przechowywania stanu metody. Zmienna instancji jest aktywna tak długo, jak długo obiekt zawierający tę zmienną jest aktywny, podczas gdy zmienna lokalna jest aktywna podczas wykonywania tej metody/bloku kodu. Dostęp do zmiennej instancji (która jest zadeklarowana jako public) można uzyskać w ramach klasy, podczas gdy do zmiennej lokalnej można uzyskać dostęp tylko w zadeklarowanym bloku kodu. Użycie zmiennych instancji jest ograniczone tylko do programowania obiektowego, podczas gdy zmienne lokalne nie mają takiego ograniczenia.