Witam serdecznie!
Poprzednim razem zająłem się tak naprawdę sprzedażą dywanów czy przedziwnych mikstur na wszystkie choroby świata. Po tym luźnym wprowadzeniu w temat i napisaniu swojego pierwszego legendarnego Hello World'a pora na dalsze kroki.
Dzisiaj zajmiemy się zmiennymi oraz ich prymitywnymi typami w Javie. Na wstępie zastrzegam iż lekcja ta może zawierać wiele uproszczeń. Java jest w pełni obiektowym językiem programowania, który działa w oparciu o tzw. maszynę wirtualną Javy. Póki co ograniczymy się do pisania programów ograniczających się tylko i wyłącznie do rozbudowywania metody startowej static void main(String[] args) co pozwoli nieco uprościć temat celem wprowadzenia. Raczkującemu programiście terminy te na obecną chwilę mogą tylko niepotrzebnie skomplikować życie, więc póki co tylko o nich napomnę na potrzeby tejże lekcji. Definitywnie jeszcze wrócimy do tych terminów jak już będziesz na to gotowy/gotowa. Ale mimo wszystko zapamiętaj maksymę: W Javie wszystko jest obiektem!
Czym są zmienne?
Najprościej rzecz ujmując zmienna jest to informacja zapisana (najczęściej) w pamięci komputera.
- Nazwa - Zmienne posiadają symboliczną nazwę która ułatwia jej wykorzystywanie w kodzie. Nazwa zmiennej jest tożsama z określeniem identyfikatora zmiennej.
- Adres - Każda zmienna posiada swój adres w pamięci, poprzez który możemy się do niej odwołać. Zmienne uzyskują adres w pamięci wskutek ich zadeklarowania. W Javie w odróżnieniu od wielu innych języków programowania, rzadko kiedy trzeba szczególnie martwić się o fizyczne adresy zmiennych w pamięci. Zatem znów upraszczamy wszystko do twierdzenia iż zmienną zapisuje się po prostu gdzieś w pamięci
- Typ - Każda zmienna również jest zdefiniowana poprzez typ. W dużym uproszczeniu typ określa rodzaj informacji przechowywanej przez zmienną. Czy jest to obrazek, plik czy może tak jak w przypadku tej lekcji liczba całkowita, zmiennoprzecinkowa czy po prostu tekst (Wiem! Fachowo łańcuch znaków). Z racji iż Java jest tylko i wyłącznie obiektowa temat ten potraktujemy z ogromnym uproszczeniem. Przy okazji tłumaczenia czym są obiekty w przyszłości myślę że wszystko stanie się jasne w tym punkcie.
- Wartość - Czyli nic innego niż zapisanie w pamięci tego na czym chcemy operować. W zależności od typu zmiennej możliwe jest zapisywanie różnych rodzajów wartości kompatybilnych z zakresem i typem zmiennej. Wraz z określeniem wartości dla zmiennej mamy do czynienia z jej definicją. Jeżeli nie ustalimy wartości zmiennej to otrzyma ona wartość domyślną. W Javie w szalonej ilości przypadków deklaracja i definicja są nierozłączne.
- Długość - W zależności od tego z jak wielką wartością/zakresem typu zmiennej mamy do czynienia to zmienna może ona posiadać inną długość. Pod tym pokręconym zdaniem na chłopski rozum nie kryje się nic innego niż to iż każdy typ zmiennej lub jej wartość może wpływać na to ile pamięci zmienna zajmuje.
Ażeby nie pozostać gołosłownym posłużmy się obrazującym temat przykładem. Mamy do czynienia z wyimaginowanym komputerem który posiada 64 bity pamięci RAM. Jeden bajt to osiem bitów. Spróbujmy za pomocą Java zamodelować w nim nasz wiek i go wyświetlić. W tym celu utwórz nowy projekt Przyklad001 analogicznie tak jak to miało miejsce w poprzedniej lekcji, wpisz następujący kod. Kody źródłowe dla wszystkich przykładów również możesz pobrać stąd.
Zmienna zmienną jest - A.D. Zielony 2017. Czyli wartości zmiennych mogą ulegać zmianie w trakcie pracy programu. Wartość zmiennych zmienia się poprzez ponowne przypisanie do nich wartości. Dobrze to pokazuje Przyklad002, w którym wartość zmiennej wiek ulega zmianie w trakcie pracy programu:
Możliwe również jest przypisywanie wartości jednej zmiennej do drugiej. Dobrze pokazuje to przykład Przyklad003.
Typy prymitywne zmiennych
Poniżej znajduje się spis prymitywnych typów zmiennych dostępnych w języku Java oraz garść informacji o nich.
boolean
- Długość - zależna od maszyny wirtualnej, ale z reguły jeden bit.
- Wartość domyślna - false (fałsz).
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala w dużym uproszczeniu na przechowywaniu jedynie dwóch wartości (prawda -> true oraz fałsz -> false). Pozwala na przechowywanie wyników operacji logicznych. Myślę że na zrozumienie tego typu zmiennych jeszcze przyjdzie pora.
boolean ukonczony = true; |
char
- Długość - 16 bitów.
- Wartość domyślna - null (pusta);
- Wartość minimalna - Unicode 0.
- Wartość maksymalna - Unicode 65535.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwalana przechowywania jednego znaku Unicode. Unicode to nic innego niż tablica w której do każdej z liczb całkowitych przypisany jest jeden symbol. Przykładowo litera 'a' to U+0041. Całą tabelę możesz obejrzeć tutaj
char literka= 'a'; |
byte
- Długość - 8 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - -128.
- Wartość maksymalna - 127.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na jednym bajcie pamięci. Jest to najlżejszy typ wartości całkowitoliczbowej ale jednocześnie o najmniejszym zakresie.
byte wiek= 18; |
short
- Długość - 16 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - -32768.
- Wartość maksymalna - 32767.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na dwóch bajtach pamięci (16 bitach). Jest to nieco większy typ od byte.
short rok= 2017; |
int
- Długość - 32 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - -2147483648.
- Wartość maksymalna - 2147483647.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na czterech bajtach pamięci (32 bitach). Jest to nieco większy typ od short.
int predkoscSwiatla= 299792458; |
long
- Długość - 64 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - -9223372036854775808.
- Wartość maksymalna - 9223372036854775807.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości całkowitoliczbowej, zapisanej na ośmiu bajtach pamięci (64 bitach). Jest to nieco największy typ.
long cwiercDrogiDoGalaktykiAndromeda= 5912950000000000000l; |
float
- Długość - 32 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - IEEE754.
- Wartość maksymalna - IEEE754.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości zmiennoprzecinkowej. Komputery posiadają ograniczone możliwości przechowywania precyzji liczb. Dla Javy wartości te są określone przez standard IEEE754. Czyli nic innego niż możliwość przechowywania ułamków.
float masaWlasna = 87.6f; |
double
- Długość - 64 bitów.
- Wartość domyślna - 0;
- Wartość minimalna - IEEE754.
- Wartość maksymalna - IEEE754.
- Przykład:
- Opis - Jest to typ zmiennej, który pozwala na przechowywanie wartości zmiennoprzecinkowej z zachowaniem podwojonej precyzji. Komputery posiadają ograniczone możliwości przechowywania precyzji liczb. Dla Javy wartości te są określone przez standard IEEE754. Czyli nic innego niż możliwość przechowywania ułamków.
double precyzja = 3.5789055d; |
Poniżej znajduje się przykład kodu pokazujący wykorzystanie wszystkich wymienionych typów prymitywnych Przyklad004:
Przekroczenie zakresu typu zmiennej
A co się stanie jak będziemy chcieli oszukać system i ustawimy wartość zmiennej na taką spoza zakresu? Sprawdźmy to Przyklad005!
Spróbuj sam/sama!
Zadanie 1
Napisz program w którym zamodelujesz za pomocą wybranego typu zmiennej jakąś wartość z życia wziętą i wyświetlisz ją w konsoli. Jak Ci się uda to spróbuj tak zrobić z dowolnym typem zmiennej.
Zadanie 2
Jak zamodelować następujące wartości w kodzie za pomocą zmiennych i wyświetlić je w postaci tekstu konsoli?
- Jacek ma 5 palców.
- Zdanie Julii to false.
- Do księżyca mamy 384 403 km a ile to metrów?
- Długość fali świetlnej dla utrafioletu to 0,00000035m;
- Imię Anna piszemy od wielkiej litery A a andruty od a.
- Za pomocą Unicode można zarówno drukować znaki ® jak i ¾.
Zadanie 3
Spróbuj dla każdego z przedstawionych typów zmiennych przekroczyć jej zakres.