Lekcja 02. Co to jest zmienna? Wszystkie typy proste w Javie.

W tym artykule wyjaśnimy sobie czym są zmienne oraz poznamy wszystkie proste typy zmiennych występujące w Javie a jest ich 8.

Na potrzeby tej lekcji stwórzmy sobie nową klasę. Nazwijmy ją TypyZmiennych. Jak widzisz rama klasy jest stworzona.

public class TypyZmiennych {

}

Generowanie metody main w inteliJ

Jak pamiętasz, punktem startowym programu jest funkcja main, a dokładnie public static void main. Pisanie tego za każdym razem nie będzie należało ani do przyjemnych ani rozwijających czynności. Można by mieć jakąś szablon i go za każdym razem kopiować lub skopiować z poprzedniej lekcji, jednak jest jeszcze lepszy sposób jaki dostarcza nam intliJ. A mianowicie napiszmy same pierwsze litery tych 4 słów czyli p od public s od stati v od void i m od main i teraz enter. inetliJ nam wygenerował szablon klasy main. Jest również inny skrót robiący dokładnie to samo, a mianowicie main, to jest jeszcze łatwiejsze do zapamiętania. Funkcję main tworzymy wpisując po prostu main i enter. Warto zapamiętać taki skrót. I od razu powiem ci jeszcze jeden. Proste wypisywanie tekstu robimy za pomocą instrukcji System.out.println(“”) – dokładnie to samo możemy wygenerować wpisując sout i klikając enter.

System.out.println("Lekcja o typach zmiennych");

Oh! dzięki Ci inteliJu. 4 znaki i gotowe. A w najbliższym czasie będziemy często używali wypisywania czegoś w konsoli. Teraz jest to zwykły tekst na przykład „Lekcja o typach zmiennych” natomiast będziemy również tego używać do wyświetlania wyników naszych obliczeń.

Co to jest zmienna?

No dobra wróćmy do głównego tematu tego odcinka czyli typów zmiennych, a na początek musimy wyjaśnić czym jest sama zmienna. Najlepiej sobie zmienną wyobrazić jako pojemnik na informację. Zmienne zapisywane są w pamięci RAM komputera. Tworząc zmienną możesz więc używać kawałka pamięci RAM. W pamięci RAM natomiast wykorzystuje się różne poziomy napięć do rozróżniania dwóch stanów. Symbolicznie jeden stan zapisujemy jako 0 a drugi jako 1. Jeśli chcesz wiedzieć dlaczego komputer używa akurat systemu dwójkowego do zapisywania danych to polecam ci artykuł o ewolucji liczb:

No dobra, wiesz już że zmiennych używa się do zapisywania informacji w pamięci RAM. Teraz zobacz jakie to jest proste w praktyce. Wystarczy napisać typ zmiennej oraz jej nazwę i już w ten sposób mamy zarezerwowaną pamięć na nasze dane. Typ definiuje jakiego rodzaju zmienne będę przechowywane natomiast nazwa to po prostu identyfikator. Tej nazwy będziemy później używać żeby zapisywać i odczytywać wartości z pamięci. Oprócz zmiennych w programowaniu są tak zwane stałe. Zmienne jak sama nazwa wskazuje – zmieniają się, to znaczy mogą zmieniać swoją wartość. Do zmiennej można więc przypisać nową wartość. Stałe to są takie zmienne które się nie zmieniają. Przypisaną tam wartość można później tylko odczytywać, nie można przypisać nowej wartości.

Deklaracja pierwszej zmiennej

Zadeklarujmy swoją pierwszą zmienną niech będzie typu byte oraz niech nazywa się zmiennaByte i koniecznie pamiętaj o średniku. Ten typ oznacza że będziemy przechowywać w pamięci małą liczbę całkowitą. Jej wielkość jak sama nazwa wskazuje to jeden bajt.

byte zmiennaByte;

Bajt a bit

Jeden bajt składa się z ośmiu bitów. Bit czyli to przysłowiowe 0 albo 1. Każdy z bitów może być ustawiony na 0 albo 1. Gdybyśmy mieli do dyspozycji tylko 1 bit to moglibyśmy przechowywać jedynie 2 wartości: 0 albo 1. Na 2 bitach są 4 możliwości: 00, 01, 10, 11, gdy dojdzie 3 bit to liczba kombinacji się znowu podwoi, ponieważ 3 bit może być ustawiony na zero i wtedy wykorzystujemy każdą z 4 dwu bitowych możliwości albo może być ustawiany na 1 i wtedy również pozostałe dwa bity dają 4 możliwości. Zauważając to dochodzimy do wniosku że każdy dodatkowy kolejny bit podwaja liczbę możliwych kombinacji zer i jedynek. I tak w rzeczywistości jest.

Nie będę się jednak zagłębiał jak dokładnie reprezentowane są liczby za pomocą zer i jedynek w komputerze. Bo inaczej jest w przypadku liczb całkowitych a inaczej w przypadku liczb rzeczywistych. Do tych zagadnień może napiszę w przyszłości jakiś osobny artykuł. Natomiast ta wiedza którą już przedstawiłem powinna wystarczyć aby zrozumieć ograniczenia typów danych.

Całkowitoliczbowe typy proste w Javie

Typ byte

Tak więc na ośmiobitowej zmiennej typu byte możemy zapisać maksymalnie 28 różnych wartości, czyli 256 różnych wartości. Sprawdźmy informacje na temat typu byte bezpośrednio w kodzie. Do tego celu użyjme klasy Byte. Napiszmy najpierw jakiś tekst że teraz zajmujemy się typem byte. I teraz w kolejnej linii wypiszemy jakąś informację.

Napisz Byte koniecznie z dużej litery i teraz po kliknięciu kropki powinno się pojawić okienko z propozycjami. Jeżeli się nie pojawi albo zniknie to możesz je pokazać gdy kursor masz za kropką używając skrótu CTRL + SPACJA. Mamy tu kilka informacji na temat typu Byte w postaci stałych. Wypiszmy po kolei te co nas interesują. Zacznijmy Od SIZE czyli ilości bitów.

        System.out.println("Zmienna byte");
        System.out.println(Byte.SIZE);

Uruchommy program już na tym etapie. Teraz widzimy nasz napis Zmianna byte a pod nim 8 czyli ilość bitów. Nie podoba mi się taka sama ósemka – bez żadnych informacji. Lepiej by było jakoś ją opisać np. ilość bitów.

        System.out.println("Zmienna byte");
        System.out.println("Ilość bitów: " + Byte.SIZE);

Jak widzisz za pomocą plusa można łączyć łańcuchy znaków. Tutaj połączyliśmy ciąg znaków w cudzysłowach ze stałą Byte.SIZE. Na temat ciągów znaków będziemy mówić dokładniej w jednej z kolejnych lekcji. Zobaczmy jak to teraz będzie wyglądało. O wiele lepiej. Teraz nie musimy pamiętać co to za ósemka bo mamy podpisane: Ilość bitów. No to teraz pójdzie szybciej z kolejnymi informacjami. Jeśli jesteś kursorem w ostatnio napisanej linijce to użyj skrótu CTRL + D aby ją zduplikować. Zduplikujmy ją jeszcze 3 razy. I wypiszmy informację takie jak BYTES czyli ilość bajtów. Dla typu byte to będzie oczywiście 1. I jeszcze mamy informacje MAX_VALUE o maksymalnej wartości oraz MIN_VALUE o minimalnej wartości. Mówiłem wcześniej że za pomocą 1 bajta, czyli 8 bitów możemy zapisać 256 różnych wartości i to by się zgadzało od -128 do 127 jest dokładnie 256 różnych wartości.

        System.out.println("Zmienna byte");
        System.out.println("Ilość bitów: " + Byte.SIZE);
        System.out.println("Ilość bajtów: " + Byte.BYTES);
        System.out.println("Wartość maksymalna: " + Byte.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Byte.MIN_VALUE);
Zmienna byte
Ilość bitów: 8
Ilość bajtów: 1
Wartość maksymalna: 127
Wartość minimalna: -128

Typ short

Często jednak przychodzi potrzeba zapisać liczby większe, np. jak chcemy zapisać rok wybuchu I wojny światowej czyli 1914, to już trzeba użyć innego typu niż byte. Poznajmy więc typ short.

        short zmiennaShort;

Zadeklarujmy teraz zmienną typu short i nazwijmy ją zmiennaShort. Short czyli krótki. Również jest przeznaczony na stosunkowo niewielkie liczby. Teraz skopiujmy fragment kodu odpowiedzialny za wypisywanie informacji i wypiszmy te samy dane tylko że dla typu short.

        System.out.println("Zmienna short");
        System.out.println("Ilość bitów: " + Short.SIZE);
        System.out.println("Ilość bajtów: " + Short.BYTES);
        System.out.println("Wartość maksymalna: " + Short.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Short.MIN_VALUE);
Zmienna short
Ilość bitów: 16
Ilość bajtów: 2
Wartość maksymalna: 32767
Wartość minimalna: -32768

Widzimy że typ short składa się już z 2 bajtów, czyli z 16 bitów. A to oznacza że możemy zapisać 2 do potęgi 16 różnych wartości czyli 65 536. I ta ilość jest rozdzielana niemal równo pomiędzy liczby dodatnie i ujemne.

Typ int

Natomiast nawet takie liczby mogą okazać się niewystarczające . Liczby rzędu dziesiątek tysięcy to nadal za mało aby zapisać np. ilość Polaków na świecie. Poznajmy więc kolejny typ całkowitoliczbowy, który nazywa się int natomiast klasa z informacjami o tym typie to Integer. Wypiszmy również informacje na temat tego typu.

        int zmiennaInt;
        System.out.println("Zmienna int");
        System.out.println("Ilość bitów: " + Integer.SIZE);
        System.out.println("Ilość bajtów: " + Integer.BYTES);
        System.out.println("Wartość maksymalna: " + Integer.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Integer.MIN_VALUE);
Zmienna int
Ilość bitów: 32
Ilość bajtów: 4
Wartość maksymalna: 2147483647
Wartość minimalna: -2147483648

Ilość bajtów 4, ilość bitów 32, no i zakres ponad 2 miliardy na plusie i minusie. No i to już jest całkiem sporo, ale dalej nie wystarczy żeby zapisać liczbę ludzi na świecie.

Typ long

Poznajmy więc ostatni typ prosty całkowitoliczbowy. Jest nim long, czyli długi. Już sama nazwa wskazuje że może on pomieścić duże liczby. Wypiszmy znowu te same dane tym razem dla typu Long.

        long zmiennaLong;
        System.out.println("Zmienna long");
        System.out.println("Ilość bitów: " + Long.SIZE);
        System.out.println("Ilość bajtów: " + Long.BYTES);
        System.out.println("Wartość maksymalna: " + Long.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Long.MIN_VALUE);
Zmienna long
Ilość bitów: 64
Ilość bajtów: 8
Wartość maksymalna: 9223372036854775807
Wartość minimalna: -9223372036854775808

Typ long składa się z aż 8 bajtów czyli 64 bitów i może przechowywać naprawdę olbrzymie liczby. Do standardowych rozwiązań zdecydowanie wystarczy. No ale czy to znaczy że Java ma takie ograniczenie liczbowe i już większych liczb nie można zapisywać? No nie. To oczywiście nie jest maksymalna liczba jaką można zapisać w Javie ale maksymalna jaką można zapisać w typie prostym long. Oprócz typów prostych są jeszcze typy złożone a nawet sam będziesz mógł stworzyć swój własny typ. Teoretycznie maksymalna liczba jest więc nieskończenie wielka, praktycznie jednak ograniczona dostępną pamięcią do jej zapisu.

Zmiennoprzecinkowe typy proste w Javie – float i double

No dobra, omówiliśmy już wszystkie całkowitoliczbowe typy proste w Javie. Natomiast jak zapisać liczbę rzeczywistą np. masę w kilogramach, jak coś waży 6,5 kg. Poprzednie typy pozwalały tylko na zapis liczb całkowitych. Do liczb rzeczywistych, popularnie nazywanych wśród programistów liczbami zmiennoprzecinkowymi są dedykowane typy proste. Jest nim float oraz double. Wyświetlmy również informacje dla tych typów.

        float zmiennaFloat;
        System.out.println("Zmienna float");
        System.out.println("Ilość bitów: " + Float.SIZE);
        System.out.println("Ilość bajtów: " + Float.BYTES);
        System.out.println("Wartość maksymalna: " + Float.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Float.MIN_VALUE);

        double zmiennaDouble;
        System.out.println("Zmienna double");
        System.out.println("Ilość bitów: " + Double.SIZE);
        System.out.println("Ilość bajtów: " + Double.BYTES);
        System.out.println("Wartość maksymalna: " + Double.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Double.MIN_VALUE);
Zmienna float
Ilość bitów: 32
Ilość bajtów: 4
Wartość maksymalna: 3.4028235E38
Wartość minimalna: 1.4E-45
Zmienna double
Ilość bitów: 64
Ilość bajtów: 8
Wartość maksymalna: 1.7976931348623157E308
Wartość minimalna: 4.9E-324

Widać że typ float składa się z 4 natomiast double z 8 bajtów. Wartości maksymalne i minimalne są natomiast podane w innym formacie. W tak zwanej notacji wykładniczej. Najprościej rzecz ujmując liczba za znakiem E informuje o ile należy przesunąć przecinek. Gdy liczba jest dodatnia to przesuwamy w prawo a dla liczb ujemnych przesuwamy w lewo.

Dla typu float wartość maksymalna składa się więc z trójki i 38 znaków, jest to ogromna liczba. Jak za pomocą 32 bitów można zapisać tak dużą liczbę? No tu liczby zapisywane są w zupełnie inny sposób nie da rady zapisać dowolnej liczby z takiego zakresu, tak więc mamy informacje tylko o 6,7 cyfrach najbardziej znaczących i o ile należy przesunąć przecinek. Taka dokładność często nie wystarcza, więc w praktyce częściej wykorzystuje się typ double na który się mówi podwójnej precyzji. Można na nim zapisać dokładnie 15 cyfr dziesiętnych. Na razie nie zagłębiajmy się jeszcze bardziej w szczegóły. Natomiast pamiętaj o tym ograniczeniu precyzji, więc tam gdzie naprawdę precyzja jest wymagana typy proste są niewystarczające.

Inne typy proste w Javie

No dobra, omówiliśmy już wszystkie liczbowe typy proste w Javie. Oprócz nich są jeszcze 2 nieliczbowe.

Typ boolean

Jednym z nich jest typ boolean. Klasa Boolean nie ma tych wszystkich informacji co typy liczbowe. Boolean reprezentuje wartość logiczną – prawdę albo fałsz – może teraz wydaje ci się nie potrzebny taki typ który może zapisywać tylko prawda albo fałsz, natomiast poznasz jego przydatność w przyszłych lekcjach.

        boolean zmiennaBoolean;
        System.out.println("Zmienna boolean");
        System.out.println("True: " + Boolean.TRUE);
        System.out.println("False: "  + Boolean.FALSE);
Zmienna boolean
True: true
False: false

Typ char

No i jeszcze dla kompletności poznajmy ostatni typ prosty w Javie. Jest to typ char za pomocą tego typu prostego możesz zapisać jeden znak np. jakąś literkę. Jednak nie polecam Ci używania tego typu, dopóki nie zrozumiesz czym jest Unicode.

String – typ złożony

Typ char trzeba używać świadomie, natomiast teraz polecam Ci używania typu złożonego String. Jest to typ reprezentujący Ciąg znaków, więc równie dobrze możesz w zmiennej typu String zapisać jeden znak jak i całe zdanie. Typ String jest pierwszym typem złożonym który poznajemy. Różnice między typami prostymi a złożonymi jest kilka ale wszystko zrozumiesz w odpowiednim czasie. Dzisiaj i tak już sporo nowych rzeczy poznałeś. Zwróć jednak uwagę na to że wszystkie typy proste w Javie są zapisywane z małej litery, natomiast typy złożone będą zapisywane z dużych liter. Jeżeli będziemy tworzyć w przyszłości swoje własne typy to również należy je nazywać z dużej litery, tak się po prostu przyjęło.

Nazewnictwo zmiennych

Jeszcze powiedzmy sobie na temat nazewnictwa zmiennych. Otóż nie każda nazwa jest dozwolona. Nazwa musi się zaczynać od litery albo znaku podkreślenia natomiast w środku lub na końcu mogą znajdować się też cyfry. To znaczy że nie możesz zrobić zmiennej o nazwie np:

 1zmienna

Możesz używać w nazwie polskich znaków, więc nic nie stoi na przeszkodzie aby zrobić zmienną gęś. Natomiast jest to nie zalecane aby używać polskich znaków w programowaniu. Nazwa zmiennej jest identyfikatorem więc musi być unikalna w danym bloku kodu. Nie można zadeklarować drugiej zmiennej o takiej samej nazwie. Zresztą sam inteliJ w takiej sytuacji podpowiada

Variable 'Zmienna1' is already defined in the scope

czyli zmienna1 jest już zdefiniowana w tym zasięgu. Natomiast rozróżniana jest wielkość znaków więc można zrobić 2 zmienne o nazwach różniących się jedynie wielkością jakiegoś znaku. Jednak to również nie jest dobra praktyka.

Jak nazywać zmienne?

Podsumowanie lekcji

W tym odcinku nauczyliśmy się deklarować zmienne, natomiast żeby w pełni móc ich używać trzeba jeszcze nauczyć się nimi manipulować. Początkowo miało to być w jednej lekcji, jednak taki artykuł wyszedł by zbyt długi. Tak więc temat zmiennych nie został dzisiaj wyczerpany i będzie kontynuowany w kolejnym artykule.

Dzisiejszy artykuł był jeszcze teoretyczny, natomiast było w nim sporo informacji, które musisz przyswoić. Tak więc nie przejmuj się jeśli na razie wydaje się to dziwne. Z każdą kolejną lekcją wszystko będzie się coraz bardziej rozjaśniać – szczególnie podczas robienia praktycznych przykładów.

Podsumowójąc dzisiejszy odcinek:

  • Poznaliśmy kilka przydatnych skrótów w inteliJ
  • Poznaliśmy wszystkie typy proste w Javie, a nawet rozumiemy ograniczenia poszczególnych typów
  • Potrafimy już zadeklarować zmienną w zasadzie dowolnego typu
  • Poznaliśmy również pierwszy typ złożony czyli ciąg znaków String
  • Wiemy jak można nazywać i jak się powinno nazywać zmienne.

Typy proste w Javie – Lekcja w formie video

Kod źródłowy z dzisiejszej lekcji:

public class TypyZmiennych {
    public static void main(String [] args) {
        System.out.println("Lekcja o typach zmeinnych");
        byte zmiennaByte;
        System.out.println("Zmienna byte");
        System.out.println("Ilość bitów: " + Byte.SIZE);
        System.out.println("Ilość bajtów: " + Byte.BYTES);
        System.out.println("Wartość maksymalna: " + Byte.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Byte.MIN_VALUE);

        short zmiennaShort;
        System.out.println("Zmienna short");
        System.out.println("Ilość bitów: " + Short.SIZE);
        System.out.println("Ilość bajtów: " + Short.BYTES);
        System.out.println("Wartość maksymalna: " + Short.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Short.MIN_VALUE);

        int zmiennaInt;
        System.out.println("Zmienna int");
        System.out.println("Ilość bitów: " + Integer.SIZE);
        System.out.println("Ilość bajtów: " + Integer.BYTES);
        System.out.println("Wartość maksymalna: " + Integer.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Integer.MIN_VALUE);

        long zmiennaLong;
        System.out.println("Zmienna long");
        System.out.println("Ilość bitów: " + Long.SIZE);
        System.out.println("Ilość bajtów: " + Long.BYTES);
        System.out.println("Wartość maksymalna: " + Long.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Long.MIN_VALUE);

        float zmiennaFloat;
        System.out.println("Zmienna float");
        System.out.println("Ilość bitów: " + Float.SIZE);
        System.out.println("Ilość bajtów: " + Float.BYTES);
        System.out.println("Wartość maksymalna: " + Float.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Float.MIN_VALUE);

        double zmiennaDouble;
        System.out.println("Zmienna double");
        System.out.println("Ilość bitów: " + Double.SIZE);
        System.out.println("Ilość bajtów: " + Double.BYTES);
        System.out.println("Wartość maksymalna: " + Double.MAX_VALUE);
        System.out.println("Wartość minimalna: " + Double.MIN_VALUE);

        boolean zmiennaBoolean;
        System.out.println("Zmienna boolean");
        System.out.println("True: " + Boolean.TRUE);
        System.out.println("False: "  + Boolean.FALSE);

        char typChar;
        String typString;
        String gęś;
        String nazwa;
        String Nazwa;

    }
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *