Twitter: @grzegg
Kategoria: java, Tagi: - .

Java [05] – Zmienne cz. I: tworzenie i rodzaje

Bezpośrednie operowanie liczbami i łańcuchami znaków nie zawsze jest wygodne, szczególnie jeśli dana wartość zmienia się w trakcie działania programu. W takich, a także wielu innych przypadkach z pomocą przychodzą zmienne.


Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

Czym są zmienne?

Zmienne (ang. variables)możemy sobie wyobrazić jako karteczki z zapisanymi liczbami, tekstami, datami etc. Każda z takich karteczek ma swoją nazwę, tak aby łatwo było się do nich odwoływać. Wyobraźmy sobie, że zapisujemy w ten sposób niektóre dane dotyczące fikcyjnej studentki.


Zauważ, że znajdują się tu różne rodzaje informacji. Są tu liczby (całkowite i zmiennoprzecinkowe), pojedyncze znaki, słowa a także dłuższe teksty. Jeśli używamy rzeczywistych karteczek, nie musimy sobie tym zaprzątać głowy, po prostu piszemy tekst, ale dla komputera, rodzaj zapisanej informacji jest kwestią fundamentalną. Wynika to miedzy innymi z tego, jaką ilość pamięci musi zarezerwować do przechowania danej informacji a także co może z nią zrobić. Na czym innym na przykład polega dodawanie liczb a na czym innym dodawanie tekstów (zob. poprzednia lekcja).

Tworzenie zmiennych

Utwórz nowy projekt w NetBeans IDE, z klasą o nazwie Zmienne.
W metodzie main umieść taki kod:

Przyjrzyj mu się teraz uważnie i zastanów się co oznaczają poszczególne linie.
Być może domyślasz się, że są tu utworzone różne zmienne o nazwach z grubsza odpowiadających nazwom „karteczek” z rysunku powyżej. Są to np. imie, motto, rokStudiow itd. Zmiennym zostają przypisane pewne wartości, przy czym w niektórych przypadkach dzieje się to od razu (np. nazwisko, wiek) a w innych dzieje się to później (np. motto, kursy1Rok).

Bardziej tajemnicze mogą wydawać się słowa, występujące przed nazwami zmiennych: String, int, byte, double, char. Mówią one o tym, jakiego rodzaju dane może przechowywać zmienna, inaczej rzecz ujmując o określają typ zmiennej.

Każda zmienna, zanim zostanie jej przypisana wartość, musi zostać zadeklarowana. Deklaracja składa się z określenia typu zmiennej i nazwy zmiennej. Na przykład:


Zadeklarowanej zmiennej można przypisać wartość, używając znaku równości =, np:


Od tej chwili zmienna wiek będzie miała wartość 22. Pierwsze przypisanie zmiennej, jest jednocześnie inicjacją zmiennej. Nie można użyć zmiennej w kodzie, na przykład spróbować wydrukować jej wartość, zanim się jej nie zainicjuje.

Obie operacje, tj. deklarację i przypisanie wartości można umieścić w jednej linijce kodu:


Deklaracje kilku zmiennych jednego typu można zmieścić w jednej linijce, np:


int kursy1Rok, kursy2Rok, kursy3Rok;

ale przypisujemy im wartości już osobno.

Pamiętaj, że zanim do zmiennej zostanie przypisana wartość, musi ona zostać zadeklarowana. Taki kod będzie błędny:


liczba = 4;
int liczba;

NetBeans natychmiast podkreśli nazwę zmiennej w pierwszej linijce informując nas, że: „_cannot find symbol…_”. Trzeba więc trzymać się żelaznej reguły: Najpierw deklarujemy, później używamy.

Skoro już wiadomo (przynajmniej z grubsza) jak zadeklarować zmienną i przypisać jej wartość, przyjrzyjmy się bliżej rodzajom zmiennych.

Typy zmiennych

Określenie typu zmiennej, której zamierzamy używać z programie, jest sprawą kluczową. Przyjrzyjmy się zatem dostępnym typom zmiennych (danych) i pokrótce przeanalizujmy kiedy jakich z nich używać.
Typy zmiennych można podzielić na dwie podstawowe kategorie:

  • typy podstawowe (proste, prymitywne) (ang. primitive types) – obejmujące różne typy liczb, wartości booleanowskie oraz pojedyncze znaki
  • typy odnośnikowe (odwołania do obiektów) (ang. reference types) – odnoszące się do bardziej złożonych struktur niż powyższe, takich jak tablice i obiekty. Należy do nich np. typ String umożliwiający przechowywanie łańcuchów znaków.

Teraz przyjrzyjmy się bliżej typom podstawowym, na inne w tym łańcuchy znaków przyjdzie czas później.

Typy podstawowe

Typy podstawowe danych i zmiennych obejmują cztery podstawowe kategorie:

  • liczby całkowite (całkowitoliczbowe) (ang. integers, integral types) – jak sama nazwa wskazuje dotyczą liczb całkowitych.
  • liczby zmiennopozycyjne (zmiennoprzecinkowe) (ang. floating-point) – umożliwiają zapamiętanie liczb ułamkowych.
  • znakowy: char (ang. characters) – służy do przechowywania pojedynczych znaków.
  • boolowski: boolean (logiczny) (ang. boolean) – pozwala na zachowanie jednej z dwu możliwych wartości: true (prawda) lub false (fałsz).

Liczby całkowite

W Javie istnieją cztery typy zmiennych przechowujących liczby całkowite. Każdy kolejny z wymienionych umożliwia przechowywanie coraz większych (i coraz mniejszych) liczb ale wymaga też coraz większej ilości pamięci, tu przedstawionych jako liczba bitów:

typ l. bitów Zakres liczb
byte 8 –128 do 127
short 16 –32 768 do 32 767
int 32 –2 147 483 648 do 2 147 483 647
long 64 –9 223 372 036 854 775 808 do 9 223 372 036 854 775 807

Liczby zmiennopozycyjne

Dla liczb zmiennopozycyjnych w Javie przewidziano dwa typy:

typ l. bitów Zakres liczb
float 8 –3,4∙1038 do 3,4∙1038
double 16 –1,8∙10308 do 1,8∙10308

Typ znakowy

W zmiennej typu char można przechowywać pojedyncze znaki określone przez Unicode, czyli zestaw znaków mający obejmować znaki używane we wszystkich pismach na świecie. Każdemu znakowi odpowiada liczba, można więc zamiast pisać: char plec = 'K'; napisać: char plec = 75; (literze K odpowiada liczba 75). Daje to pewne dodatkowe możliwości, o czym później.

Typ boolowski

Ten typ jest najbardziej ograniczony pod względem zakresu przyjmowanych wartości. Jest ich bowiem aż… dwie: true (prawda) oraz false (fałsz), które mogą być interpretowane także jako „tak/nie”, „1/0” itp. Najbardziej oczywistą sytuacją wykorzystania zmiennych tego typu jest zapis stanu związanego z prawdziwością jakiejś sytuacji czy wyrażenia, np: „czy wartość x jest większa niż 5?”. Można jednak je wykorzystać także w innych przypadkach, w których istnieją dwa możliwe stany, np: noc/dzień, wolny/zajęty, żywy/martwy. Wtedy zwykle sprowadzamy je do wyboru „prawda/fałsz” („tak/nie”), co też uwzględniamy odpowiednio nazywając zmienne, np: noc, wolny, zywy.

Nazwy zmiennych

Na koniec parę słów o nazwach zmiennych. Oto podstawowe zasady, których trzeba się trzymać:

  • W Javie nazwy zmiennych mogą składać się z liter, cyfr i znaków _ oraz $
  • Pierwszym znakiem nie może być cyfra.
  • Java odróżnia wielkość znaków, więc: imie, Imie oraz IMIE to zupełnie różne nazwy.

Oczywiste jest, że nazwa zmiennej nie może zawierać spacji! Jakkolwiek powyższe zasady pozwalają na takie nazwy jak $liczba, z1, moja_ocena, WAZNAZMIENNA czy źródło, warto jednak trzymać się konwencji nazewnictwa przyjętej w Javie oraz zdrowego rozsądku. Zatem poniżej kilka zasad, których warto się trzymać:

  • Zaczynaj nazwę od liter. Co prawda kompilator przełknie nazwy typu $masa albo _rodzaj, ale takie nazwy mile widziane w niektórych innych językach programowania, są zdecydowanie źle widziane w Javie.
  • Jeśli nazwa zmiennej składa się z jednego słowa, używaj wyłącznie małych liter (np. gatunek), jeśli składa się z wielu słów, pierwsze zaczyna się z małej litery, następne z wielkiej (np. haploidalnaLiczbaChromosomów). Pomiędzy poszczególnymi słowami nie wstawiaj dodatkowych znaków.
  • Używaj nazw „samoobjaśniających” tak, żeby o ile to możliwe sama nazwa wskazywała czego zmienna dotyczy. Unikaj nieoczywistych skrótów. Co prawda krótkie nazwy są łatwiejsze i szybsze w pisaniu ale czas, który zaoszczędzisz pisząc zapewne z nawiązką stracisz starając się przypomnieć co właściwie oznacza np. zmienna lwg. Gdybyś nazwał ją liczbaWszystkichGatunkow byłoby bardziej czytelnie, prawda?
  • Raczej unikaj polskich (ą, ś, ć, ż…) i innych liter wkraczających poza podstawowy zakres alfabetu łacińskiego (angielskiego), szczególnie jeśli masz zamiar dzielić się kodem z innymi. Kodowanie UTF-8, którego powinieneś używać (!), co prawda powinno prawidłowo obsłużyć wszelkie „ogonki” ale może się okazać, że ktoś, kto chce z Twojego kodu korzystać, ma ustawione inne kodowanie i zamiast zobaczyć w kodzie żółć, ujrzy nieczytelny ciąg krzaczków.

Konwencje dotyczące innych elementów języka, jak klasy, metody czy stałe, różnią się nieco od powyższych, tak więc do tematu nazewnictwa jeszcze powrócimy.

Warto też zajrzeć do poradników stylu programowania w Javie. Na przykład do Google Java Style.

Ta strona jest częścią materiałów do kursu “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”. Pozostałe materiały znajdziesz tutaj

4 komentarze Java [05] – Zmienne cz. I: tworzenie i rodzaje

  • Dzień dobry, bardzo ładna strona, świetny kurs. Dla mnie bardzo przejrzysty, przystępny.
    Chciałam też zwrócić uwagę na drobną literówkę w słowie „Wszytskich”, oczywiście kurs i tak jest bardzo fajny. Pozdrawiam

  • Mateusz

    Nie wiem czy to za sprawą nowej versji Java czy eclips, ale wykonanie wpisy „int kursy1Rok, kursy2Rok, kursy3Rok;” oznaczone jest błędem.

  • Grzegorz

    Proszę sprawdzić, czy przy przepisywaniu nie pojawiła się jakaś literówka.
    Jeśli nie, to proszę sprawdzić jak brzmi komunikat przy błędzie.

    U siebie sprawdziłem w Eclipse, zmienne są podkreślone na żółto a komunikat „The value of local variable kursy1Rok is not used” oznacza, że zmienne zostały utworzone ale nie są nigdzie w programie wykorzystane, co jest normalne na tym etapie pisania programu.

Leave a Reply to Grzegorz Cancel reply