Pola a zmienne, to samo ?

0

Jak w temacie, zawsze myślałam że to jest to samo, tylko różni ludzie różnie to nazywają. Aż w końcu w jednym z poradników, były omawiane pola, a po jakimś czasie była informacja że o zmiennych będzie w przyszłości, czy takie teksty:

" .... dzięki temu jasno wskazujemy, że chodzi nam o pole klasy a nie o zmienną...."

Mówią, że przykładowa deklaracja pola wygląda tak:

String imie;

a przecież deklaracja zmiennej wygląda tak samo, to musi być to samo.
To o co chodzi?

5

Pole to zmienna zadeklarowana w klasie, w przeciwieństwie do np. zmiennej lokalnej zadeklarowanej w metodzie. Inaczej mówiąc, pole to szczególny typ zmiennej.

2
twonek napisał(a):

Pole to zmienna zadeklarowana w klasie, w przeciwieństwie do np. zmiennej lokalnej zadeklarowanej w metodzie. Inaczej mówiąc, pole to szczególny typ zmiennej.

A co z polem będącym stałą?

2

Zmienna to "pojemnik" na informacje, która może przechowywać tekst, liczby, wartość logiczną, kolekcję lub obiekty:

int liczba = 54;
String tekst = "Cześć, co tam?";
float ulamek = 5.3413; // mniejsza dokładność
double ulamek2 = 5.1235123412321; // większa dokładność
boolean prawdaFalsz = true;

String[] kilkaTekstow = new String[] { 'Hej', 'co', 'tam?' };
Klasa obiekt = new Klasa();

W zależności od tego gdzie taka zmienna zostanie zadeklarowana będzie zachowywała się trochę inaczej i będzie miała inną charakterystykę. Te które mają inną widoczność mają z reguły inne nazwy.

Zmienna może być zadeklarowana tak aby:

  • Była dostępna (widoczna) w całej klasie.
  • Była dostępna w pojedynczej metodzie/bloku.
  • Była dostępna w jednym pliku lub w całym programie.

Pola to zmienne które zostały zadeklarowane w klasie, tak że każda metoda w niej ma do niej dostęp. Może odczytać lub zmienić jej wartość.

class Klasa {
    public String pole;  // zmienna, która jest polem

    void zmien() {
        pole = "inna wartosc";
    }

    String odczytaj() {
        return pole;
    }
}

Oczywiście można zadeklarować pole w taki sposób by było stałą, ale przez swoją widoczność ciągle jest nazywane polem.

class Klasa {
    public final String pole; // stała, która jest polem

    void zmien() {
        pole = "inna wartosc"; // Błąd składni, program się nie skompiluje
    }
}

Zmienne które nie są widoczne w całej klasie nazywane są często po prostu zmienną albo "zmienną lokalną". Charakteryzują się tym że jeżeli stworzy się taką zmienną w jednym bloku (np ifie albo forze, lub w funkcji), to taka zmienna nie będzie istniała poza nią.

class Klasa {
    void set() {
        String zmienna = "something";
    }
    
    String get() {
        return zmienna; // Błąd składni, program się nie skompiluje.

        if (true) {
            int liczba = 24;
        }
        return liczba.toString(); // Błąd składni, zmienna liczba jest zadeklarowana w ifie
    }
}

Wydaje mi się że takim "szczególnym" przypadkiem zmiennej jest parametr przekazywany metodzie. On również jest widoczny tylko w niej

class Klasa {
    String get(String parametr) {
        return parametr; // Zmienna parametr również jest widoczna tylko tutaj.
    }
}
Klasa obiekt = new Klasa();
obiekt.get("Czesc"); // Wartość "Cześć" będzie teraz wartością parametru "parametr"

Kolejnym przykładem mogą być zmienne globalne, które da się stworzyć w niektórych językach. Można je ustawiać i odczytywać z (zależnie od języka) dowolnej metody globalnej czy klasy.

Ostatnie co może być to podzielenie zmiennych "zwykłych" i statycznych. Pola statyczne to również są zmienne nazywane "polami statycznymi" albo tak, jak ja lubię "staticami". Mają zwiększoną widoczność ponieważ należą do klasy, a nie do obiektu tej klasy. Zmienne statyczne są współdzielone przez obiekty danej klasy, w odróżnieniu do dynamicznych, które każdy obiekt ma jakby "na własność".

class Klasa {
    static int staticVariable;
    int dynamicVariable;
 
    void increaseStatic() {
        staticVariable++;
    }

    void increaseDynamic() {
        dynamicVariable++; 
    }
}
Klasa obiekt1 = new Klasa();
Klasa obiekt2 = new Klasa();

obiekt1.increaseStatic(); // zmienna statyczna (współdzielona) ma teraz wartość 1
obiekt1.increaseDynamic(); // zmienna dynamiczna ma teraz wartość 1

obiekt2.increaseStatic(); // zmienna statyczna (współdzielona) ma teraz wartość 2
obiekt2.increaseDynamic(); // zmienna dynamiczna ma teraz wartość 1

Pole - zmienna lub stała należąca widoczna w klasie (statyczne lub nie)
Zmienna lokalna - zmienna widoczna tylko w metodzie lub bloku (if/for)

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