Dane oryginału

Copyright © 2017 by Bryson Payne. Title of English-language original: Learn Java the Easy Way: A Hands-On Introduction to Programming, ISBN 978-1-59327-805-2, published by No Starch Press. Polish-language edition copyright © 2018 by Polish Scientific Publisher PWN Wydawnictwo Naukowe Spółka Akcyjna. All rights reserved.

Przekład Witold Sikorski na zlecenie WITKOM Witold Sikorski

Projekt okładki polskiego wydania INT-MEDIA Dawid Mazur

Wydawcy Łukasz Łopuszański, Edyta Kawala

Redaktor prowadzący Jolanta Kowalczuk

Redaktor Małgorzata Dąbkowska-Kowalik

Koordynator produkcji Anna Bączkowska

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN: konwersja.virtualo.pl

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji

Copyright © for the Polish edition by Wydawnictwo Naukowe PWN SA

Warszawa 2018

ISBN 978-83-01-20067-1

eBook został przygotowany na podstawie wydania papierowego z 2018 r., (wyd. I)

Warszawa 2018

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl, www.pwn.pl

Mojej Mamie, która zawsze we mnie wierzyła

O autorze

Dr Bryson Payne pracuje jako profesor informatyki na Uniwersytecie Północnej Georgii, gdzie od 1998 roku edukuje aspirujących programistów. Jest posiadaczem tytułów Certified Information Systems Security Professional (CISSP), Certified Ethical Hacker (CEH) oraz innych certyfikatów informatycznych. Piastował stanowisko pierwszego kierownika Katedry Informatyki na Uniwersytecie Północnej Georgii oraz dyrektora i założyciela centrum Cyber Operations Education, w ramach programu NSA Center of Academic Excellence in Cyber Defense. Z przyjemnością współpracuje ze szkołami na całym świecie, promując edukację informatyczną.

Dr Payne publikował w magazynach CIO, Campus Technology oraz w Wall Street Journal i jest autorem bestselera Teach Your Kids to Code: A Parent-Friendly Guide to Python Programming (Wydawnictwo No Starch Press, 2015), przetumaczonego na pięć języków (koreański, portugalski, rosyjski, chiński i angielski). Prowadzi również wiele popularnych kursów online, m.in. cieszący się uznaniem kurs Real-World Ethical Hacking (2017) na platformie Udemy. W jego szkoleniach uczestniczyło około 20 000 studentów z ponad 150 krajów. Zdobył doktorat z informatyki na Uniwersytecie stanu Georgia. Publikuje artykuły w czasopismach naukowych oraz branżowych i regularnie zabiera głos na regionalnych oraz ogólnokrajowych konferencjach poświęconych edukacji informatycznej i bezpieczeństwu cybernetycznemu.

Dr Payne mieszka w Atlancie w stanie Georgia ze wspaniałą żoną Bev, dwoma synami Alexem i Maxem oraz trzema kotami: Leo, Rockym i Pixelem.

O recenzencie technicznym

Bryan Fagan jest nauczycielem inżynierii oraz technologii. Mieszka w Dahlonega w stanie Georgia, gdzie uczy, rozkoszuje się pięknem Appalachów z żoną i córką oraz trenuje brazylijskie jiu-jitsu. Jest założycielem Make Stuff, pozalekcyjnych warsztatów dla uczniów w wieku gimnazjalnym.

Spis treści

Podziękowania

Wprowadzenie

Dlaczego warto nauczyć się programowania?

Dlaczego warto programować w języku Java?

Co można znaleźć w tej książce

Jakie narzędzia będę potrzebne?

Zasoby online

Pora zacząć!

Materiały pomocnicze

1
Pierwsze kroki

Java dla systemów Windows, macOS oraz Linux

Instalowanie wersji Java 8 oraz 9 dla programistów

Instalowanie programu Eclipse IDE for Java Developers

Konfigurowanie środowiska Eclipse

Instalowanie edytora WindowBuilder

Dostosowywanie wyglądu i działania programu Eclipse

Instalowanie Android Studio do tworzenia aplikacji mobilnych

Poznawanie języka Java przy użyciu narzędzia JShell

Uruchamianie JShell

Korzystanie z wyrażeń Java w JShell

Deklarowanie zmiennych Java w JShell

Drukowanie danych wyjściowych w języku Java

Polecenia JShell

Co już umiesz

2
Budowanie aplikacji zgadywanki!

Planowanie gry krok po kroku

Tworzenie nowego projektu

Tworzenie klasy HiLo

Generowanie liczby losowej

Wczytywanie danych wpisanych na klawiaturze przez użytkownika

Przygotowanie programu do drukowania danych wyjściowych

Pętle: spytaj, sprawdź, powtórz

Instrukcje if: sprawdzanie odpowiednich warunków

Dodawanie pętli do ponownego grania

Testowanie gry

Co już umiesz

Zadania programistyczne

Zadanie 1: rozszerzanie zakresu

Zadanie 2: zliczanie prób

Zadanie 3: gra MadLibs

3
Tworzenie GUI dla naszej zgadywanki

Trenowanie umiejętności korzystania z narzędzia JShell

Tworzenie interfejsu GUI w czterech wierszach kodu

Tworzenie interaktywnego interfejsu GUI za pomocą 10 wierszy kodu!

Przygotowywanie aplikacji GUI w programie Eclipse

Projektowanie interfejsu GUI przy użyciu edytora WindowBuilder programu Eclipse

Projektowanie interfejsu użytkownika

Ustawianie właściwości GUI w panelu Properties

Dostosowywanie komponentów GUI w panelu Palette

Wyrównywanie elementów GUI

Nadawanie nazw komponentom GUI do użycia w kodzie

Łączenie GUI z kodem źródłowym

Dodawanie metody sprawdzającej typowane liczby

Pobieranie tekstu z JTextField

Konwertowanie łańcuchów na liczby

Rozpoczynanie nowej gry

Odbieranie zdarzeń użytkownika: kliknij, aby zgadnąć!

Przygotowywanie okna GUI

Czas zacząć zabawę!

Dodawanie funkcji ponownej gry

Ulepszanie środowiska użytkownika

Przesyłanie próby odgadnięcia po naciśnięciu klawisza ENTER

Automatyczne usuwanie poprzednich prób odgadnięcia

Obsługa nieprawidłowych danych wejściowych

Co już umiesz

Zadania programistyczne

Zadanie 1: pokazywanie użytkownikowi liczby prób

Zadanie 2: pokazywanie i ukrywanie przycisku Play Again

Zadanie 3: tworzenie interfejsu GUI gry MadLibs

4
Tworzenie pierwszej aplikacji w systemie Android

Rozpoczynanie nowego projektu aplikacji w Android Studio

Budowanie układu GUI w widoku projektu

Nazywanie komponentów GUI w Android Studio

Łączenie interfejsu GUI z kodem Java w Android Studio

Dodawanie metod sprawdzania liczby i rozpoczynania nowej gry

Obsługiwanie zdarzeń w systemie Android

Uruchamianie aplikacji na emulatorze Androida

Uruchamianie aplikacji na prawdziwym urządzeniu z systemem Android

Przygotowanie urządzenia

Podłączanie własnego urządzenia

Uruchamianie aplikacji na urządzeniu

Ulepszanie środowiska użytkownika

Wyśrodkowanie wpisywanej liczby w polu tekstowym

Dodawanie interfejsu słuchacza dla klawisza ENTER

Jeszcze jeden ostateczny szlif

Co już umiesz

Zadania programistyczne

Zadanie 1: „Toast”-owanie liczby prób

Zadanie 2: zwiększanie atrakcyjności wizualnej

Zadanie 3: tworzenie aplikacji mobilnej MadLibs

5
Udoskonalanie aplikacji przez dodanie menu i preferencji

Dodawanie menu opcji w systemie Android

Dodawanie elementów do pliku XML menu

Wyświetlanie menu opcji

Reagowanie na wybory użytkownika

Tworzenie wyskakującego okna dialogowego dla opcji About

Modyfikowanie zakresu liczb do odgadnięcia

Dodawanie zmiennej zakresu

Wykorzystywanie zmiennej range

Budowanie okna dialogowego, które umożliwia użytkownikowi wybranie zakresu

Przechowywanie preferencji użytkownika i statystyk gry

Zapisywanie i pobieranie preferowanego przez użytkownika zakresu

Przechowywanie liczby wygranych gier

Co już umiesz

Zadania programistyczne

Zadanie 1: raz wygrana, raz przegrana

Zadanie 2: proporcja gier wygranych do przegranych

6
Odszyfrowywanie sekretnych wiadomości

Kod Cezara

Przygotowywanie aplikacji Secret Messages

Tworzenie projektu Secret Messages w programie Eclipse

Rozpoczynanie kodowania w pliku SecretMessages.java

Przetwarzanie ciągów znaków

Znaki i wartości w języku Java

Szyfrowanie samych liter

Zamykanie skanera

Dodawanie niestandardowej wartości klucza

Szyfrowanie cyfr

Uruchamianie aplikacji wiersza poleceń bez programu Eclipse

Znajdowanie folderów przestrzeni roboczej

Otwieranie okna wiersza poleceń

Co już umiesz

Zadania programistyczne

Zadanie 1: zapętlanie pętli

Zadanie 2: odwracanie i szyfrowanie

Zadanie 3: bezpieczna obsługa kluczy za pomocą instrukcji try-catch

7
Tworzenie zaawansowanych interfejsów GUI i udostępnianie aplikacji

Przygotowywanie projektu aplikacji Secret Messages z interfejsem GUI

Projektowanie interfejsu GUI i nazywanie komponentów

Pisanie kodu aplikacji Secret Messages z interfejsem GUI

Tworzenie metody encode()

Pisanie obsługi zdarzenia dla przycisku Encode/Decode

Obsługa nieprawidłowych danych i błędów

Budowanie metody main() i uruchamianie aplikacji

Ulepszanie interfejsu GUI

Ustawianie zawijania tekstu

Obsługa nieprawidłowych danych i błędów: część 2

Dodawanie suwaka do interfejsu GUI aplikacji Secret Messages

Łamanie szyfru przy użyciu suwaka

Bonus: Udostępnianie aplikacji w postaci uruchamialnego pliku JAR

Co już umiesz

Zadania programistyczne

Zadanie 1: przenoszenie w górę!

Zadanie 2: przewijanie!

Zadanie 3: zmienianie suwaka pod wpływem zmiany tekstu

8
Przekształcanie Secret Messages w aplikację mobilną do udostępniania znajomym!

Przygotowywanie mobilnego interfejsu GUI

Projektowanie mobilnego interfejsu GUI

Łączenie interfejsu GUI z kodem Javy

Łączenie przycisku Encode z metodą encode()

Testowanie aplikacji

Praca z widżetem SeekBar

Uruchamianie aplikacji na emulatorze i urządzeniu z systemem Android

Bonus: Dostosowywanie przycisku FAB

Odbieranie sekretnych wiadomości z innych aplikacji

Co już umiesz

Zadania programistyczne

Zadanie 1: tworzenie przycisku Move Up

Zadanie 2: zmienianie postępu na pasku postępu SeekBar

9
Rysowanie kolorowych bąbelków przy użyciu myszy!

Tworzenie plików projektu BubbleDraw

Budowanie okna BubbleDraw

Tworzenie klasy Bubble

Definiowanie klasy Bubble

Projektowanie metod klasy Bubble

Przechowywanie bąbelków w ArrayList

Dodawanie konstruktora do klasy BubblePanel

Dodawanie metody do rysowania na ekranie

Testowanie klasy BubblePanel

Obsługa zdarzeń myszy inicjowanych przez użytkownika

Tworzenie interfejsu słuchacza zdarzeń do wielokrotnego użytku

Obsługiwanie kliknięć i przeciągnięć

Bonus: obsługa zdarzeń MouseWheel

Co już umiesz

Zadania programistyczne

Zadanie 1: wyeliminowanie zbyt małych bąbelków

Zadanie 2: pikselizacja!

10
Dodawanie animacji i wykrywanie kolizji przy użyciu timerów

Kopiowanie projektu Java BubbleDraw w celu utworzenia aplikacji BubbleDrawGUI

Zmienianie nazw klasy z metodą main i pliku Java

Dodawanie transparentności

Dodawanie animacji: bąbelki w ruch!

Dodawanie timera

Ustawianie timera

Przygotowywanie animacji

Uruchamianie timera

Rozdmuchiwanie bąbelków: dodawanie losowej prędkości i kierunku

Budowanie interfejsu GUI dla naszej animowanej aplikacji do rysowania

Przygotowywanie panelu oraz przycisków GUI

Programowanie przycisków Clear oraz Pause/Start

Odbijanie się od ścian dzięki wykrywaniu kolizji

Miękkie odbicie

Twarde odbicie

Dodawanie suwaka do kontrolowania prędkości animacji

Dostosowywanie suwaka

Implementowanie obsługi zdarzeń suwaka

Co już umiesz

Zadania programistyczne

Zadanie 1: bez nieruchomych bąbelków

Zadanie 2: rysowanie elastycznych kształtów

Zadanie 3: PixelDraw 2.0

11
Przekształcanie BubbleDraw w wielodotykową aplikację systemu Android

Przygotowywanie projektu BubbleDraw

Tworzenie konstruktora BubbleView

Dodawanie zmiennych animacji

Tworzenie konstruktora BubbleView()

Przygotowywanie układu do użycia widoku BubbleView

Modyfikowanie klasy Bubble

Rysowanie w systemie Android przy użyciu metody onDraw()

Testowanie aplikacji BubbleDraw przy użyciu stu bąbelków

Dodawanie metody testBubbles()

Naprawianie błędu OnTouchListener

Uruchamianie aplikacji BubbleDraw

Wykorzystywanie wątkowej animacji i wielozadaniowości w języku Java

Wykorzystywanie dotyku do rysowania palcem

Wykorzystywanie wielodotykowości do rysowania dziesięcioma palcami naraz!

Testowanie zdarzeń wielodotykowości na urządzeniu Android

Zmienianie ikony aplikacji

Tworzenie niestandardowej ikony aplikacji

Dodawanie niestandardowej ikony aplikacji

Wyświetlanie nowej ikony

Zmienianie nazwy aplikacji

Co już umiesz

Zadania programistyczne

Zadanie 1: łączenie zdarzeń dotknięcia jednym i wieloma palcami, v1.0

Zadanie 2: łączenie zdarzeń dotknięcia jednym i wieloma palcami, v2.0

Dodatek
Debugowanie i unikanie typowych błędów w języku Java

Pisownia i wielkość liter

Poprawianie literówek w programie Eclipse

Poprawianie literówek w programie Android Studio

Unikanie innych typowych literówek

Problemy z porównaniami

Symbole grupujące

Szybkie rozwiązania w programie Eclipse

Uzupełnianie kodu w Android Studio

Podsumowanie

PODZIĘKOWANIA

Ta książka nie mogłaby powstać bez ogromnego wsparcia wydawnictwa No Starch Press. Szczególne podziękowania dla: Billa Pollocka, Tylera Ortmana, Riley Hoffman, Jan Cash, Sereny Yang, Amandy Hariri oraz Julii Borden za niestrudzone redagowanie, recenzowanie i promowanie oraz za wszechstronną pomoc w ulepszaniu mojego rękopisu w dążeniu do osiągnięcia sukcesu tej książki.

Dziękuję Bryanowi Faganowi za rewelacyjną pracę włożoną w przegląd techniczny.

Dziękuję wszystkim moim studentom, byłym i obecnym, którzy inspirują mnie do tworzenia nowych, interesujących i angażujących treści, a w szczególności: Shah i Susan Rahman, Justinowi i Diane Turnerom, Jacobowi Elliottowi, Brianowi Murrayowi, Aaronowi Walkerowi, Robertowi Brownowi, Trentowi Dealowi, Sethowi Parkowi, Simonowi Singhowi, Andrew Millerowi, zespołowi robotyki Ctrl-Alt-Del, Jacksonowi Grantowi, Quintinowi Kernsowi, Grace i Jackowi Halleyom, Matthew Harpurowi oraz Davidowi Knightowi. Dziękuję również studentom ze 150 krajów, którzy uczestniczyli w moich kursach online, w szczególności Haydenowi Reddowi oraz Bobowi Watsonowi.

Podziękowania dla moich inspirujących kolegów i przyjaciół, którzy stale motywują mnie do maksymalnego wysiłku: Markusa Hitza, Chucka Robertsona, Ireny Kokkala, Tamirata Abegaza, Antonia Sanz Montemayora, Dony Watkins, Eddiego Mieniego, Rose Procter, Rona Larsona, Victora Parkera, Keitha Antonia, Billiego Wellsa, Jima Goldy’ego, Jamesa Daniela oraz Craiga Gentry’ego.

Dziękuję mojemu teściowi, Normanowi Petty’emu, którego pasję dla technologii przewyższa jedynie miłość do rodziny, oraz mojemu ojczymowi, Dalowi Carverowi, który zawsze znajduje czas na moje gadżety drukowane w 3D. Największe podziękowania należą się mojej pięknej żonie Bev oraz niesamowitym synom Alexowi i Maxowi za okazanie mi niezmiernej cierpliwości, gdy przez trzy lata zajmowałem się pisaniem dwóch książek.

Specjalne podziękowania dla Kalena Cole’a. Mając jedenaście lat, Kalen przeczytał moją pierwszą książkę, Teach Your Kids to Code, samodzielnie ucząc się programowania. Przesłał mi nawet swój pierwszy kreatywny projekt zawierający kilka napisanych przez siebie linii kodu. Tak trzymaj, Kalen! Jesteś inspiracją dla wszystkich dzieciaków, które zaczynają odkrywać, kim są i kim chcą zostać w przyszłości.

WPROWADZENIE

Język Java jest wykorzystywany na miliardach urządzeń na całym świecie. Począwszy od aplikacji mobilnych po oprogramowanie komputerowe, Java zasila największe rozwiązania korporacyjne i najmniejsze urządzenia osobiste. Studenci, profesjonaliści IT i osoby rozważające karierę w programowaniu stają przed koniecznością nauczenia się języka Java. Jako profesor informatyki, który uczy języka Java od prawie 20 lat, napisałem tę książkę, by pomóc czytelnikom w poznawaniu języka Java w taki sposób, w jaki sam nauczyłem się kodować: przez praktyczne projekty. Przekonałem się, że studenci najlepiej uczą się, budując prawdziwe aplikacje i gry, które są interesujące, wciągające i które warto pokazać znajomym. W tej książce utworzymy prostą zgadywankę Hi-Lo, aplikację Secret Messages do wymieniania sekretnych wiadomości z przyjaciółmi oraz interaktywną aplikację do rysowania o nazwie BubbleDraw. Doświadczenie w programowaniu nie jest wymagane, ale to praktyczne podejście do nauki ułatwi szybkie opanowanie języka również osobom, które znają już inny język programowania.

Dlaczego warto nauczyć się programowania?

Po pierwsze, ze względu na rynek pracy. Jak wynika z raportu amerykańskiego Biura Statystyk Pracy, siedem z dziesięciu zawodów o najszybciej rosnącym zapotrzebowaniu i najlepszej płacy związanych jest z sektorem IT. Programiści są poszukiwani przez pracodawców na całym świecie i w ciągu najbliższych kilku lat na rynku pracy zabraknie przynajmniej miliona specjalistów. Miejsce zamieszkania nie jest istotne, aby zarabiać pieniądze jako programista wystarczy mieć dostęp do internetu.

Wysokie zarobki i bezpieczeństwo zatrudnienia to nie jedyne argumenty przemawiające za nauką programowania. Kodowanie to rozwiązywanie problemów, a świat potrzebuje więcej ludzi, którzy umieją rozwiązywać problemy. Można pisać aplikacje, które łączą ludzi i pomagają im w pracy. Można wspierać nowe formy handlu, a nawet tworzyć całkiem nowe rynki zbytu. Można eliminować bariery, pomagać pojedynczym osobom, społecznościom lub całym kontynentom, a także otwierać nowe perspektywy. Dzięki ogromnemu zasięgowi internetu można napisać aplikację i udostępnić ją miliardom ludzi.

Drew Houston, założyciel Dropbox, twierdzi, że kodowanie to „najbliższy ekwiwalent supermocy”, natomiast według Gaba Newella, współzałożyciela firmy Valve Corporation produkującej gry komputerowe, umiejętność kodowania sprawia, że „wyglądamy, jakbyśmy posiadali magiczną moc wyróżniającą nas na tle innych”. Komputery są wśród nas, w każdym urządzeniu, każdym systemie i każdej sieci w naszym codziennym życiu. I to właśnie kod odpowiada za działanie wszystkich tych komputerów. Zdolność programowania to zdolność prosperowania w przyszłości high-tech.

Dlaczego warto programować w języku Java?

Java uznawana jest przez wielu za czołowy język programowania z kilku uzasadnionych przyczyn. Po pierwsze, może być wykonywana na praktycznie każdym urządzeniu, począwszy od komputerów stacjonarnych i laptopów po odbiorniki SMART TV. Ten sam kod Java może działać w systemie Windows, macOS lub Linux.

Po drugie, język Java jest wszechobecny w środowisku biznesowym i powszechnie wykorzystywany w największych systemach korporacyjnych. Java jest obiektowym językiem programowania zaprojektowanym w taki sposób, aby wspierać rozwijanie ogromnych aplikacji w różnych dziedzinach, od produkcji po sprzedaż, od zarządzania zasobami ludzkimi po księgowość.

Po trzecie, Java stanowi jeden z najpopularniejszych języków programowania w szkołach i uczelniach na całym świecie, dlatego jej znajomość pozwala od razu dołączyć do szeregu innych programistów.

Niezależnie od tego, czy kodowanie stanowi jedynie hobby, dodatkową bądź pełnoetatową działalność, język Java pozwala na łatwe rozpoczęcie pracy bez ponoszenia jakichkolwiek kosztów finansowych. Język Java stanowi doskonały pierwszy język programowania, a także wspaniały kolejny język dla osób, które mają już doświadczenie w kodowaniu.

Co można znaleźć w tej książce

Oto krótki przegląd zawartości poszczególnych rozdziałów:

W rozdziale 1 omówiony zostanie proces instalowania i przygotowywania oprogramowania Java, Eclipse oraz Android Studio. Napiszemy także pierwsze polecenia Java przy użyciu interaktywnego narzędzia JShell.

W rozdziale 2 napiszemy pierwszą aplikację, zgadywankę Hi-Lo, czyli tekstowy program wiersza poleceń, w którym użytkownicy będą zgadywać liczbę od 1 do 100. W rozdziale 3 ulepszymy naszą zgadywankę, otrzymując komputerową aplikację z graficznym interfejsem użytkownika zawierającym etykiety, pole tekstowe i klikalny przycisk.

W rozdziale 4 zbudujemy naszą pierwszą aplikację mobilną na systemy Android, korzystając z dużej części kodu zgadywanki Hi-Lo napisanego w poprzednich dwóch rozdziałach. Po ukończeniu aplikacji mobilnej w rozdziale 5 dodamy kilka ulepszeń, takich jak menu ustawień oraz tablica rekordów.

W rozdziale 6 zaczniemy pisanie nowej aplikacji Secret Messages, czyli tekstowego programu, który będzie szyfrował wiadomości przy użyciu kodu Cezara. W rozdziale 7 ulepszymy graficzny interfejs aplikacji, dodając suwak, który pozwoli na szybkie odszyfrowywanie wiadomości przez złamanie kodu Cezara. Następnie w rozdziale 8 utworzymy mobilną aplikację Secret Messages z funkcją udostępniania, która ułatwi przesyłanie sekretnych wiadomości za pośrednictwem poczty e-mail, wiadomości tekstowych lub mediów społecznościowych.

W rozdziale 9 zaczniemy tworzenie najbardziej wizualnej aplikacji w tej książce, aplikacji BubbleDraw, która umożliwi użytkownikom rysowanie kolorowych bąbelków na ekranie. W rozdziale 10 dodamy animację, aby rysowane na ekranie bąbelki latały i odbijały się od siebie. Natomiast w rozdziale 11 dodamy funkcję wielodotykowości, żeby można było rysować bąbelki w kilku miejscach jednocześnie. Pod koniec rozdziału uzyskamy profesjonalnie wyglądającą aplikację, którą warto udostępnić swoim znajomym!

Na zakończenie, w dodatku, przedstawione zostaną wskazówki dotyczące debugowania i unikania typowych błędów podczas pisania programów Java w środowiskach Eclipse oraz Android Studio.

Jakie narzędzia będę potrzebne?

Omówione w tej książce narzędzia, Eclipse oraz Android Studio, stanowią jedne z najpopularniejszych w branży narzędzi programistycznych Java, dzięki czemu po ukończeniu pracy z tą książką można od razu przystąpić do programowania prawdziwych aplikacji. A co najlepsze, narzędzia te można pobierać i wykorzystywać za darmo!

Do rozpoczęcia pracy wystarczy połączenie z Internetem oraz komputer stacjonarny lub laptop z systemem Windows, macOS bądź Linux. Nie trzeba nawet posiadać telefonu ani tabletu z systemem Android, by móc budować aplikacje mobilne, ponieważ Android Studio oferuje darmowy emulator urządzeń na Androida, którego można użyć do testowania aplikacji. Oczywiście posiadacze urządzenia z system Android będą mogli uruchamiać aplikacje mobilne bezpośrednio na swoim telefonie lub tablecie.

Zasoby online

Kod źródłowy wszystkich omawianych w tej książce aplikacji można pobrać nieodpłatnie z oficjalnej strony internetowej książki o adresie: https://www.nostarch.com/learnjava/. Osoby, które wolą instruktażowe filmy krok po kroku demonstrujące proces implementacji, może zainteresować kurs online (w języku angielskim) dostępny na stronie http://www.udemy.com/java-the-easy-way/, w którym omówiony został każdy przykład oraz każda linia kodu. Kod BOOKHALFOFF pozwala uzyskać 50-procentową zniżkę na zakup kursu. Kurs online umożliwia zadawanie pytań i przesyłanie wiadomości do autora książki.

Pora zacząć!

Podejmując naukę języka Java, nie macie nic do stracenia, a jedynie wiele do zyskania. Zacznijcie już dziś. Programowanie to klucz do nowych możliwości. Nauka języka Java może być pierwszym krokiem do nowej kariery lub nowej przyszłości. Wszyscy moi studenci, niezależnie od wieku, mają jedną cechę wspólną – zrobili ten pierwszy krok, a następnie kontynuowali naukę. Wy możecie zrobić to samo.

Jak mówi chińskie przysłowie: najlepszy moment na posadzenie drzewa był 20 lat temu, drugi najlepszy moment jest teraz. Niezależnie od tego, czy jeszcze kontynuujecie edukację, czy rozważacie zmianę zawodu, najlepszy moment na naukę programowania jest teraz.

Materiały pomocnicze

Na stronie https://www.nostarch.com/learnjava/ znaleźć można materiały pomocnicze, erratę i dodatkowe informacje.

1
PIERWSZE KROKI

Ten rozdział rozpoczniemy od zainstalowania na komputerze oprogramowania Java, Eclipse oraz Android Studio. Następnie zaznajomimy się z podstawowymi technikami programowania w języku Java, testując wybrane polecenia w interaktywnym narzędziu wiersza poleceń JShell.

Java to wieloplatformowy język programowania o ogromnych możliwościach, który można za darmo pobrać i zainstalować w systemie Windows, macOS lub Linux. Eclipse, zintegrowane środowisko programistyczne (IDE, Integrated Development Environment), to cieszący się powszechnym uznaniem zestaw narzędzi do szybkiego i łatwego budowania aplikacji Java. Natomiast Android Studio to środowisko programistyczne do rozwijania aplikacji mobilnych Android w języku Java. Umożliwia ono programowanie własnych gier oraz aplikacji mobilnych na telefony, tablety i nie tylko.

Java dla systemów Windows, macOS oraz Linux

Jedną z ogromnych zalet języka Java jest to, iż napisane w nim programy mogą działać na dowolnym komputerze, na którym zainstalowane zostało oprogramowanie Java Virtual Machine (JVM) (czasami nazywane także Java Runtime Environment lub JRE). Technologia JVM sprawia, że wystarczy raz napisać program, aby później uruchamiać ten sam kod w dowolnym systemie operacyjnym (Windows, macOS, Linux, Android i nie tylko).

Ta koncepcja wydaje się oczywista, jednak większość innych języków programowania wymaga albo napisania innego kodu dla komputerów Windows, macOS, Linux oraz smartfonów, albo skompilowania osobnej wersji dla każdego z systemów operacyjnych. Środowisko uruchomieniowe JVM eliminuje taką konieczność.

Rysunek 1.1 prezentuje tę samą aplikację graficzną Java uruchomioną w systemach Windows, macOS oraz Ubuntu Linux.

Rysunek 1.1. Ten sam kod Java uruchomiony w trzech różnych systemach operacyjnych: Windows, macOS oraz Linux!

Ta prosta, ale bardzo istotna koncepcja przyczyniła się do ogromnej popularności języka Java wśród programistów i firm na całym świecie.

Instalowanie wersji Java 8 oraz 9 dla programistów

Java Development Kit (JDK) to wersja technologii Java dla deweloperów i programistów, czyli także dla Ciebie! JDK pozwala na pisanie i kompilowanie własnych aplikacji Java, które można udostępniać znajomym, wdrażać w firmie lub uruchamiać w dowolnym miejscu na niemal dowolnym urządzeniu.

Zainstalujemy zarówno wersję 8, jak i wersję 9 JDK. Dzięki temu będziemy mogli korzystać z ogólnej dostępności wersji 8, jednocześnie zachowując dostęp do najnowszych funkcji wersji 9.

Aby zainstalować pakiet JDK 8:

1. Otwórz stronę http://jdk.java.net/8/.

2. Kliknij przycisk opcji Accept License Agreement (Zaakceptuj umowę licencyjną).

3. Na liście Downloads, w sekcji JDK, znajdź link dla swojego systemu operacyjnego i kliknij go. Jeśli korzystasz z systemu operacyjnego Windows lub Linux, wybierz wersję 64-bitową.

4. Otwórz plik JDK z folderu Downloads na swoim komputerze i zainstaluj JDK.

Aby zainstalować pakiet JDK 9, przejdź do strony http://jdk.java.net/9/, a następnie powtórz kroki 2-4 instalacji pakietu JDK 8.

Uwaga:
Bardziej szczegółowe instrukcje w postaci wideo zawiera kurs internetowy powiązany z tą książką: http://www.udemy.com/java-the-easy-way/.

To wystarczy, aby przygotować komputer do kompilowania i uruchamiania programów Java z tekstowego wiersza poleceń lub terminalu, ale my chcemy również skorzystać z możliwości tworzenia w języku Java aplikacji z graficznym interfejsem użytkownika (GUI, Graphical User Interface), jak te pokazane na rysunku 1.1. Aby móc korzystać ze wspaniałych możliwości GUI technologii Java, zainstalujemy zintegrowane środowisko programistyczne o nazwie Eclipse.

Instalowanie programu Eclipse IDE for Java Developers

Eclipse jest jednym z najpopularniejszych środowisk IDE do programowania w języku Java. Co więcej, jest to rozwiązanie typu open source, co oznacza, że można używać go za darmo, zarówno do celów prywatnych, jak i komercyjnych, oraz że istnieje aktywna społeczność open source, która wspiera i stale ulepsza rozwiązanie Eclipse. Istnieje kilka innych środowisk IDE dla języka Java, ale Eclipse słynie z łatwości programowania aplikacji Java. Dodatkowo jego instalacja jest dość prosta.

Aby zainstalować program Eclipse na własnym komputerze, należy otworzyć stronę http://www.eclipse.org/downloads/, pobrać instalator dla odpowiedniego systemu operacyjnego (patrz rys. 1.2), a następnie uruchomić go. W momencie powstawania tej książki aktualna wersja nosiła nazwę Eclipse Oxygen.

Wyświetlone zostanie menu podobne do przedstawionego na rysunku 1.3. Należy wybrać opcję Eclipse IDE for Java Developers i kliknąć Install (Zainstaluj). Ważne jest, aby wybrać opcję Eclipse IDE for Java Developers, a nie jedną z pozostałych opcji (edycja Java EE, czyli Enterprise Edition, nie oferuje wszystkich funkcji prezentowanych w tej książce).

Proces instalacji może zająć kilka minut.

Rysunek 1.2. Pobieranie instalatora programu Eclipse dla wybranego systemu operacyjnego

Rysunek 1.3. Wybieranie opcji Eclipse IDE for Java Developers z menu instalatora Eclipse

Konfigurowanie środowiska Eclipse

Skonfigurujmy naszą instalację Eclipse w taki sposób, aby wyglądała i działała jak profesjonalne środowisko programistyczne – wraz z edytorem WindowBuilder, a także systemem kolorów ułatwiającym kodowanie oraz z czytelnymi czcionkami.

Uruchamiamy program Eclipse, klikając ikonę Eclipse. Po jego uruchomieniu zazwyczaj wyświetlane jest pytanie, gdzie ma być przechowywana przestrzeń robocza (ang. workspace), w której umieszczane są wszystkie projekty Java (patrz rys. 1.4). Można użyć domyślnej lokalizacji (w systemie Windows jest nią folder C:\Users\<NazwaUżytkownika>\eclipse-workspace\, w systemie macOS /Users/<NazwaUżytkownika>/Documents/eclipse-workspace/, a w systemie Linux /home/<NazwaUżytkownika>/eclipse-workspace/). Można również określić niestandardową lokalizację folderu obszaru roboczego Java.

Rysunek 1.4. Eclipse rozpoczyna od pytania, gdzie mają być przechowywane projekty Java

Jeśli nie mamy żadnych preferencji, możemy użyć domyślnej lokalizacji eclipse-workspace. Niezależnie od wybranej opcji, należy zapamiętać lokalizację tego folderu, ponieważ będą w nim przechowywane wszystkie tworzone projekty Java. Gdy zaznaczymy pole „Use this as the default and do not ask again” (Użyj tego ustawienia jako domyślnego i nie ponawiaj pytania), okno Eclipse Launcher nie będzie wyświetlane podczas każdego uruchomienia programu Eclipse. Aby korzystać z wielu przestrzeni roboczych, można pozostawić to pole wyboru odznaczone, aby z łatwością przełączać się między przestrzeniami roboczymi w trakcie uruchamiania programu Eclipse.

PRZYGOTOWANIE PROGRAMU ECLIPSE DO UŻYCIA JAVA 9

W przypadku problemów z uruchomieniem programu Eclipse trzeba dokonać jeszcze jednej zmiany. W czasie powstawania tej książki Java 9 nadal była nowością i choć Oxygen i późniejsze wersje programu Eclipse obsługują Java 9, niektóre wydania wymagają dostosowania pliku konfiguracyjnego eclipse.ini, by mogły być uruchamiane z zainstalowaną wersją Java 9. Aby dokonać tej zmiany, należy postępować zgodnie z następującą instrukcją:

1. Znajdź plik instalacyjny programu Eclipse:

• W systemie Windows można kliknąć skrót Eclipse prawym przyciskiem myszy i wybrać opcję Otwórz lokalizację pliku. Plik eclipse.ini będzie znajdował się w tym samym folderze co plik programu eclipse.exe.

• W systemie macOS znajdź aplikację Eclipse w folderze Applications w narzędziu Finder, przytrzymując klawisz CONTROL, kliknij ikonę aplikacji Eclipse, a następnie wybierz opcję Pokaż zawartość pakietu. Po otworzeniu folderu Contents, a następnie folderu Eclipse, na liście plików wyświetlony zostanie plik eclipse.ini.

• W systemie Linux przejdź do folderu home i otwórz eclipse/java-oxygen/eclipse, aby znaleźć plik eclipse.ini.

2. Kliknij plik eclipse.ini prawym przyciskiem myszy (lub kliknij lewym, przytrzymując klawisz CONTROL). Wybierz opcję Otwórz za pomocą, a następnie wybierz opcję Notepad (Notatnik), TextEdit lub inny edytor tekstowy.

3. Dodaj następujący wiersz na końcu pliku eclipse.ini:

--add-modules=ALL-SYSTEM

4. Zapisz plik eclipse.ini, a następnie ponownie otwórz program Eclipse. Od tej pory program Eclipse powinien uruchamiać się prawidłowo.

Podczas pierwszego uruchomienia programu Eclipse wyświetlony zostanie ekran powitalny. W niektórych wersjach programu ekran ten zawiera kilka przykładowych projektów i samouczków, które mogą okazać się przydatne. Po wstępnym zapoznaniu się z przedstawionymi funkcjami można zamknąć kartę Welcome, klikając mały X znajdujący się w górnej części okna.

Instalowanie edytora WindowBuilder

Najważniejszym ulepszeniem naszego środowiska Eclipse będzie zainstalowanie edytora WindowBuilder, który umożliwi nam budowanie aplikacji okienkowych przez przeciąganie i upuszczanie elementów GUI (takich jak przyciski, etykiety czy pola tekstowe) na obszar graficznego podglądu aplikacji.

W niektórych wersjach Eclipse edytor WindowBuilder jest już zainstalowany, mimo to przeprowadzimy procedurę jego instalacji lub aktualizacji, aby upewnić się, że jesteśmy gotowi do budowania aplikacji GUI w rozdziale 3.

Zaczynamy od otworzenia strony http://www.eclipse.org/windowbuilder/ i kliknięcia przycisku Download (Pobierz). Na stronie pobierania znajdujemy wersję WindowBuilder pasującą do wersji Eclipse (w przypadku Eclipse Oxygen jest to wersja 4.7), prawym przyciskiem myszy (lub przytrzymując klawisz CONTROL) klikamy odpowiedni link i kopiujemy jego adres, jak pokazano na rysunku 1.5.

Rysunek 1.5. Znajdowanie odnośnika do pobrania najnowszego edytora WindowBuilder i kopiowanie jego adresu

Następnie wracamy do programu Eclipse i wybieramy opcję Help (Pomoc) ▶ Install New Software (Zainstaluj nowe oprogramowanie). W polu tekstowym Work with: (Korzystaj z) wklejamy adres URL edytora WindowBuilder (dla Eclipse Oxygen jest to http://download.eclipse.org/windowbuilder/WB/integration/4.7/), klikamy przycisk Add... (Dodaj…), a następnie w wyświetlonym oknie wpisujemy WB w polu Name (Nazwa), jak pokazano na rysunku 1.6.

Klikamy przycisk OK i po pojawieniu się w oknie instalacji pola wyboru WindowBuilder klikamy przycisk Select All (Zaznacz wszystko), aby zainstalować wszystkie potrzebne komponenty WindowBuilder. Klikamy przycisk Next (Następny), aż pojawi się przycisk opcji do zaakceptowania umowy licencyjnej, a następnie klikamy przycisk Finish (Zakończ).

Rysunek 1.6. Dodawanie edytora WindowBuilder przy użyciu okna Install New Software (Zainstaluj nowe oprogramowanie) programu Eclipse

Instalacja oprogramowania może zająć kilka minut. W prawym dolnym rogu okna Eclipse wyświetlony zostanie wskaźnik postępu. Po zakończeniu instalacji zostaniemy poproszeni o zrestartowanie programu Eclipse. Klikamy przycisk Restart Now (Zrestartuj teraz). Instalacja edytora WindowBuilder została zakończona. Teraz dodamy kilka opcjonalnych zmian, które ułatwią czytanie kodu w programie Eclipse przez dostosowanie tła, kolorów tekstu oraz czcionki.

Dostosowywanie wyglądu i działania programu Eclipse

Po zainstalowaniu wymaganych elementów możemy dodatkowo dostosować wygląd programu Eclipse. W systemach Windows oraz Linux można uzyskać dostęp do menu preferencji, wybierając opcje Okno ▶ Preferencje. W systemie macOS należy przejść do paska menu i wybrać opcje Eclipse ▶ Preferences (Preferencje).

Na przykład można zmienić motyw (ang. theme), czyli paletę kolorów oraz rozmiar czcionki wykorzystywanej w edytorze tekstowym. W zależności od rozmiaru monitora i środowiska, w którym programujemy, paleta kolorów oraz rozmiar czcionki mogą znacząco wpływać na czytelność, wygodę użycia, a nawet produktywność.

W menu preferencji, w sekcji General (Ogólne) ▶ Appearance (Wygląd) dostępna jest opcja Theme (Motyw). Można tu wybrać jeden z ulubionych motywów, takich jak Classic (jasne, szarawe tło z ciemnym kolorem czcionki) lub Dark (czarne tło z jaśniejszymi, bardziej kolorowymi czcionkami). Ja preferuję motyw Dark, ponieważ tekst wydaje się jaśniejszy na ciemnym tle, co ułatwia czytanie z monitora lub ekranu projekcyjnego.

Po wybraniu General (Ogólne) ▶ Appearance (Wygląd) ▶ Colors and Fonts (Kolory i Czcionki) można zmienić rozmiar czcionki. Po prawej stronie, w panelu Colors and Fonts wybieramy opcje Basic (Podstawowy) ▶ Text Font (Czcionka tekstu) i klikamy przycisk Edit (Edytuj). Wyświetlone zostanie menu Font (Czcionka). Wybieramy czcionkę łatwą w czytaniu. Ja preferuję Courier New lub Consolas. Polecam rozmiar czcionki 18 do 20 oraz styl Bold (Pogrubiona). W oknie Font zademonstrowany zostanie przykładowy wygląd wybranej czcionki, stylu i rozmiaru, jak pokazano na rysunku 1.7.

Rysunek 1.7. Menu preferencji Colors and Fonts (po lewej) oraz menu preferencji Font (po prawej)

Po dokonaniu wyboru klikamy przycisk OK i powracamy do głównej przestrzeni roboczej Eclipse. Efekty ustawionych preferencji będziemy mogli obejrzeć, gdy rozpoczniemy kodowanie w edytorze tekstowym Java w rozdziale 2.

Instalowanie Android Studio do tworzenia aplikacji mobilnych

Android Studio to oficjalne środowisko do tworzenia aplikacji mobilnych w systemie Android. Umożliwia ono projektowanie i kodowanie aplikacji mobilnych przy użyciu języka Java, który jest głównym językiem platformy Android. Podobnie jak Java i Eclipse, oprogramowanie Android Studio można pobierać, instalować i wykorzystywać za darmo. Ze względu na duży rozmiar, pobieranie oraz instalacja Android Studio mogą zająć od kilku minut do nawet kilku godzin, w zależności od jakości połączenia internetowego.

Aby pobrać Android Studio, przechodzimy do strony http://developer.android.com/studio/ i klikamy przycisk Download Android Studio (Pobierz Android Studio), jak pokazano na rysunku 1.8. Po zapoznaniu się z warunkami umowy klikamy przycisk Download Android Studio for <system operacyjny>.

Postępujemy zgodnie z instrukcjami, aby dokonać instalacji. Proces instalacji może wiązać się z pobraniem dodatkowych komponentów zestawu narzędzi dla programistów (SDK, Software Development Kit). Po pobraniu wszystkich komponentów instalacja może zająć kilka dodatkowych minut.

Rysunek 1.8. Android Studio to oficjalne środowisko do rozwijania aplikacji mobilnych Android

Poznawanie języka Java przy użyciu narzędzia JShell

Skoro skonfigurowaliśmy już nasze środowisko programistyczne, możemy przetestować jego funkcjonowanie przy użyciu JShell, interaktywnego interpretera dla języka Java. JShell stanowi doskonały sposób na rozpoczęcie nauki języka Java, ponieważ od razu reaguje na wpisywany kod. W poprzednich wersjach Javy trzeba było wpisać cały program, skompilować go i uruchomić, aby zobaczyć wynik. Obecnie, dzięki JShell, wystarczy wpisać pojedynczy wiersz kodu Javy, taki jak System.out.println("Hello, Java!"), a następnie nacisnąć klawisz ENTER, aby od razu zobaczyć wynik na ekranie (patrz rys. 1.9).

Rysunek 1.9. JShell w Java 9 pozwala na szybkie testowanie kodu w interaktywnym narzędziu wiersza poleceń

Dowolna prawidłowa instrukcja Java będzie działała w JShell, dlatego jest to doskonałe narzędzie do nauki podstaw kodowania w języku Java. Pora zabrać się do pracy!

Uruchamianie JShell

JShell można uruchamiać zarówno z wiersza poleceń, jak i przez skonfigurowanie skrótu. Przedstawimy obie możliwości na wypadek, gdyby jedna z nich nie działała prawidłowo.

Przede wszystkim na komputerze musi być zainstalowany pakiet JDK 9. Możemy sprawdzić, czy tak jest, korzystając z wiersza poleceń.

Oto, w jaki sposób można uruchomić interfejs wiersza poleceń w systemie Windows, macOS oraz Linux:

• W systemie Windows otwórz wiersz poleceń, przechodząc do menu Start i wpisując cmd w polu wyszukiwania. Naciśnij klawisz ENTER lub kliknij ikonę Command Prompt (Wiersz poleceń).

• W systemie macOS otwórz Launchpad i wpisz terminal w polu wyszukiwania. Kliknij ikonę aplikacji Terminal.

• W systemie Linux wyszukaj terminal i kliknij ikonę aplikacji Terminal.

Wyświetlone zostanie okno wiersza poleceń. Wystarczy wpisać java -version po zgłoszeniu systemu, a Java poinformuje, która wersja JDK jest zainstalowana. W systemie Windows wydruk wygląda podobnie do poniższego:

C:\Users\Payne> java -version

java version "9-ea"

Java(TM) SE Runtime Environment (build 9-ea+153)

Java HotSpot(TM) 64-Bit Server VM (build 9-ea+153, mixed mode)

Natomiast w systemach macOS oraz Linux przedstawiona zostanie następująca informacja:

Payne:~ payne$ java -version

java version «1.9.0_33»

Java(TM) SE Runtime Environment (build 1.9.0_33)...

Jeśli odpowiedź zawiera tekst „version 9” lub „version 1.9”, jak przedstawiono powyżej, można rozpocząć pracę z JShell. Aby uruchomić JShell z wiersza poleceń, należy przejść do kolejnej części rozdziału, „Uruchamianie JShell z wiersza poleceń”. Jeżeli wyświetlona została informacja o wcześniejszej wersji Java, takiej jak 1.8, trzeba wrócić do poprzedniego punktu, „Instalowanie wersji Java 8 oraz 9 dla programistów”, na stronie 2 i zainstalować JDK 9. O ile wersja 9 nie pojawia się w wierszu poleceń mimo jej zainstalowania lub jeśli wolisz skonfigurować skrót na pulpicie, przejdź prosto do punktu „Uruchamianie JShell przy użyciu skrótu” na stronie 12.

Uruchamianie JShell z wiersza poleceń

Aby uruchomić JShell z wiersza poleceń, wpisujemy jshell i naciskamy klawisz ENTER. Java zareaguje wiadomością powitalną JShell i zgłoszeniem systemu, który w systemie Windows wygląda następująco:

C:\Users\Payne> jshell

| Welcome to JShell -- Version 9-ea

| For an introduction type: /help intro

jshell>

W systemach macOS oraz Linux wiadomość oraz zgłoszenie systemu wyglądają podobnie:

Payne:~ payne$ jshell

| Welcome to JShell -- Version 9-ea

| For an introduction type: /help intro

jshell>

Jeśli pojawi się zgłoszenie systemu jshell>, można przejść do punktu „Korzystanie z wyrażeń Java w JShell” ze strony 13. Jeśli polecenie jshell nie działa na Twoim komputerze po zainstalowaniu JDK 9, spróbuj postępować zgodnie z procedurą zaprezentowaną w kolejnej części rozdziału.

Uruchamianie JShell przy użyciu skrótu

Jeśli masz problemy z uruchomieniem narzędzia JShell z wiersza poleceń lub wolisz uruchamiać je przy użyciu skrótu na pulpicie, postępuj zgodnie z podanymi instrukcjami, aby uzyskać dostęp do JShell bezpośrednio z folderu JDK 9 bin i skonfigurować skrót (nazwa folderu bin stanowi skrót od plików binarnych, czyli programów zapisanych w języku komputerowym składającym się z samych jedynek i zer).

Uwaga:
Niestety opisywana metoda nie sprawdza się w systemie Linux, ale zazwyczaj działa w nim metoda bazująca na wierszu poleceń.

JShell można znaleźć w następujących folderach:

• C:\Program Files\Java\jdk-9\bin\jshell.exe w systemie Windows,

• /Library/Java/JavaVirtualMachines/jdk9.jdk/Contents/Home/bin/jshell w systemie macOS.

Folder JDK może nosić nazwę jdk-1.9.x zamiast jdk-9, ale będzie działał w taki sam sposób. Przechodzimy do folderu JDK 9 bin na własnym komputerze i odnajdujemy plik JShell, jak pokazano na rysunku 1.10.

Możemy kliknąć dwukrotnie ikonę pliku JShell, aby uruchomić narzędzie JShell. Dla wygody możemy również utworzyć skrót, aby uruchamiać narzędzie JShell bezpośrednio z pulpitu:

• W systemie Windows kliknij prawym przyciskiem myszy jshell.exe i wybierz opcję Utwórz skrót. System Windows wyświetli komunikat „Windows can’t create a shortcut here. Do you want the shortcut to be placed on the desktop instead (System Windows nie może utworzyć skrótu w tym miejscu. Czy umieścić ten skrót na pulpicie)?” Kliknij Yes (Tak).

• W systemie macOS kliknij plik jshell, przytrzymując klawisz CONTROL i wybierz opcję Make Alias (Utwórz alias). Pojawi się plik o nazwie jshell alias. Przeciągnij go na pulpit.

Teraz wystarczy dwukrotnie kliknąć ikonę na pulpicie, aby uruchomić narzędzie JShell i rozpocząć kodowanie w języku Java.

Rysunek 1.10. Plik programu JShell w folderze bin JDK 9 w systemie Windows (po lewej) i macOS (po prawej)

Korzystanie z wyrażeń Java w JShell

Wyrażenie to dowolna kombinacja wartości (takich jak liczby czy tekst) oraz operatorów, która daje w wyniku inną wartość. Operator wykonuje działanie, takie jak dodawanie, odejmowanie, mnożenie czy dzielenie. W języku Java symbole wykorzystywane dla tych operatorów to odpowiednio: +, -, * oraz /. Przetestujmy jeden z nich przy użyciu prostego wyrażenia matematycznego. Po zgłoszeniu systemu JShell wpisujemy 2+2 i naciskamy klawisz ENTER:

jshell> 2+2

$1 ==> 4

JShell prezentuje odpowiedź: wyrażenie 2+2 ma wartość 4. $1 to zmienna tymczasowa. JShell tworzy tego typu zmienne w celu przechowania wartości. W tym przykładzie zmienna $1 tymczasowo przechowuje wartość 4, na wypadek, gdybyśmy chcieli użyć jej w przyszłości. Jeśli chcemy sprawdzić, jaka wartość znajduje się w zmiennej, wystarczy wpisać ją w JShell. Na przykład, gdy teraz wpiszemy $1, JShell poinformuje, że zmienna $1 przechowuje wartość 4:

jshell> $1

$1 ==> 4

Przetestujmy inne wyrażenie. Tym razem połączymy dwa ciągi tekstowe. Ciągi, czasami nazywane łańcuchami, to znaki umieszczone w cudzysłowie, które służą do wyświetlania słów, nazw i innych tekstów. Do łączenia ciągów można użyć operatora + w następujący sposób:

jshell> "Twoje" + "Imię"

$3 ==> "TwojeImię"

Jak widać, utworzona została inna zmienna tymczasowa, w tym przypadku $3. Liczba po $ wskazuje, w którym wierszu kodu wpisane zostało wyrażenie. Jest to nasz trzeci wpis, dlatego JShell przechowa "TwojeImię" w zmiennej $3.

Warto zauważyć, że Java łączy, czyli dodaje, dwa ciągi, nie rozdzielając ich spacją. Jeśli chcemy, aby między dwoma łączonymi ciągami znajdowała się spacja, musimy umieścić ją między nimi w cudzysłowie:

jshell> "Twoje" + " " + "Imię"

$4 ==> "Twoje Imię"

JShell może wykonać dowolne prawidłowe wyrażenie Java. Przetestuj kilka innych wyrażeń. Aby edytować wpisaną instrukcję, wystarczy nacisnąć klawisz strzałki w górę. JShell wyświetli ostatnio wpisaną instrukcję, umożliwiając jej edytowanie i ponowne uruchomienie po naciśnięciu klawisza ENTER. Naciśnięcie klawisza strzałki w górę więcej niż jeden raz pozwala na przechodzenie po historii wcześniejszych instrukcji aż do pierwszego wpisanego wiersza kodu.

Deklarowanie zmiennych Java w JShell

Wykonywanie wyrażeń na prostych wartościach czasem się przydaje, ale zazwyczaj chcemy przechować wartości w zmiennych, aby móc wykorzystywać je w przyszłości. Do tej pory JShell automatycznie tworzył dla nas zmienne tymczasowe, takie jak $1 oraz $3, jednak możemy również samodzielnie tworzyć, czyli deklarować, zmienne.

Zmienne liczbowe

Utwórzmy zmienną liczbową (liczbę całkowitą) o nazwie x i przechowajmy w niej wartość 42. Java przechowuje liczby całkowite w zmiennych typu int, dlatego po zgłoszeniu systemu JShell wpisujemy int x = 42:

jshell> int x = 42

x ==> 42

Znak równości (=) stanowi w języku Java operator przypisania, co oznacza, że służy on do przypisywania zmiennej określonej wartości. JShell reaguje, informując, iż zmienna x zawiera wartość 42. Teraz, gdy chcemy użyć tej wartości, wystarczy wywołać zmienną za pomocą jej nazwy. Sprawdźmy, ile wynosi x * 2 (x razy dwa):

jshell> x * 2

$6 ==> 84

Java wykorzystuje znak gwiazdki (*) w roli symbolu mnożenia, a JShell informuje nas, że x * 2 równa się 84. Tu jednak pojawia się pytanie: czy zmodyfikowaliśmy wartość zmiennej x, pobierając jej wartość i mnożąc tę wartość przez dwa? Przekonajmy się, wpisując x:

jshell> x

x ==> 42

Uff! Nasza zmienna x zachowała tę samą wartość, 42. To oznacza, że możemy używać wartości przechowywanej w zmiennej bez modyfikowania zmiennej.

A zatem, w jaki sposób możemy zmienić wartość przechowywaną w zmiennej? Wystarczy ponownie użyć operatora przypisania. Wpisujemy x = x + 7 po zgłoszeniu systemu JShell:

jshell> x = x + 7

x ==> 49

Zastąpiliśmy wartość przechowywaną w x, pobierając starą wartość x i dodając do niej 7. Od tej pory, gdy spytamy o wartość x, będziemy otrzymywać 49, dopóki nie dokonamy kolejnej modyfikacji. Możemy zmieniać wartość zmiennych tak często, jak to konieczne – dlatego są one nazywane zmiennymi.

Przetestujmy kilka zmiennych różnych typów. Korzystaliśmy już z liczby całkowitej, więc teraz spróbujmy użyć liczby dziesiętnej, nazywanej również zmiennoprzecinkową (ang. floating-point). W języku Java liczby dziesiętne są przechowywane w zmiennych typu double (skrót od ang. double-precision floating point, czyli liczb zmiennoprzecinkowych o podwójnej precyzji). W związku z tym utwórzmy zmienną double o nazwie metry i przechowajmy w niej liczbę dziesiętną 1.83:

jshell> double metry = 1.83

metry ==> 1.83

Java obsługuje liczby dziesiętne z taką samą łatwością jak liczby całkowite. Wykonajmy pewne operacje matematyczne i przekształćmy metry na centymetry:

jshell> double centymetry = metry * 100

centymetry ==> 183.0

Zamieniliśmy wartość w zmiennej metry na wartość w centymetrach, mnożąc ją przez 100.

Java obsługuje także inne typy liczbowe, jednak najczęściej będziemy wykorzystywać wartości typu int lub double. Za każdym razem, gdy napotkamy nowy typ zmiennej, otwieramy narzędzie JShell i przetestuj go na różnych wartościach.

Zmienne typu String

Zmienne typu String służą do przechowywania ciągów znaków tekstowych. Zdefiniujmy zmienną String o nazwie mojeImieNazwisko i przechowajmy w niej imię oraz nazwisko w następujący sposób (zamiast mojego imienia i nazwiska można oczywiście użyć swojego):

jshell> String mojeImieNazwisko = "Bryson Payne"

mojeImieNazwisko ==> "Bryson Payne"

Podobnie jak w przypadku zmiennych liczbowych, w roli operatora przypisania używamy znaku równości.

Uwaga:
W języku Java wielkość liter w nazwach zmiennych, metod i klas ma znaczenie. Składająca się wyłącznie z małych liter nazwa mojeimienazwisko różni się od nazwy zawierającej wyłącznie wielkie litery MOJEIMIENAZWISKO, a obie różnią się od nazwy mojeImieNazwisko. Konwencją, czyli powszechnie przyjętym rozwiązaniem, w języku Java jest stosowanie notacji CamelCase, w której każdy kolejny wyraz w nazwie rozpoczyna się wielką literą np. mojeImieNazwisko czy toDziwnaNazwaDemonstrującaNotacjęCamelCase. W tej notacji słowa przypominają garby na grzbiecie wielbłąda (ang. camel). Nazwy klas również powinny przestrzegać notacji CamelCase i dodatkowo rozpoczynać się wielką literą.

A teraz użyjmy wartości przechowywanej w mojeImieNazwisko. Załóżmy, że zdobyliśmy dodatkowy stopień naukowy. Możemy dodać odpowiedni tytuł do imienia i nazwiska w następujący sposób:

jshell> mojeImieNazwisko + ", doktor"

$12 ==> "Bryson Payne, doktor"

Jak widać, nie użyliśmy operatora przypisania, a zatem wartość przechowywana w mojeImieNazwisko powinna nadal składać się jedynie z imienia i nazwiska, bez dodatkowych znaków.

Tym razem zmieńmy wartość przechowywaną w zmiennej mojeImieNazwisko. Dodamy formalny tytuł do imienia oraz nazwiska, jak byśmy adresowali list lub zaproszenie:

jshell> mojeImieNazwisko = "dr " + mojeImieNazwisko

mojeImieNazwisko ==> "dr Bryson Payne"

JShell prezentuje zaktualizowaną wartość przechowywaną w mojeImieNazwisko. W kolejnej części rozdziału będziemy kontynuować pracę ze zmiennymi liczbowymi i tekstowymi oraz pokażemy, jak wyświetlać wartości na ekranie z programu Java.

Drukowanie danych wyjściowych w języku Java

Do tej pory zajmowaliśmy się jedynie wyznaczaniem wartości wyrażeń, wpisując je w narzędziu JShell w celu sprawdzenia ich wartości. Jednak sytuacja zmieni się, gdy zaczniemy pisać prawdziwe programy. Podczas wpisywania kolejnych wierszy programu Java nie zobaczymy żadnych danych wyjściowych na ekranie.

Gdy chcemy wydrukować coś na ekranie, korzystamy z funkcji drukowania, takiej jak System.out.println(), która wyświetla wiersz danych wyjściowych w konsoli systemu lub na ekranie. Jeśli nadal korzystasz z tego samego okna JShell, można zobaczyć wartość przechowaną w zmiennej x w następujący sposób:

jshell> System.out.println(x)

49

W przypadku pojawienia się informacji o błędzie trzeba zadeklarować nową zmienną int x = 49, a następnie ponownie uruchomić instrukcję print.

Jak widać, tym razem JShell nie zareagował, wyświetlając x ==> 49, ponieważ nie prosiliśmy o wyznaczenie wartości wyrażenia. Instrukcja println() każe narzędziu JShell wydrukować jedynie to, co zostało umieszczone w nawiasie, czyli zmienną x. W efekcie JShell wyświetla po prostu 49.

Przetestujmy drukowanie ciągów tekstowych. Wpisujemy następującą instrukcję:

jshell> System.out.println("Cześć, " + mojeImieNazwisko)

Cześć, dr Bryson Payne

O ile nadal istnieje zmienna mojeImieNazwisko utworzona we wcześniejszej części rozdziału, Java powita nas po imieniu.

Gdy chcemy wyświetlić na ekranie informacje dla użytkownika, możemy to zrobić za pomocą instrukcji System.out.println().

Polecenia JShell

Narzędzie JShell jest tak łatwe w użyciu, iż może pojawić się pokusa, aby nigdy z niego nie wychodzić. Jednak w końcu musimy zająć się innymi zadaniami, takimi jak budowanie ekscytujących aplikacji komputerowych i mobilnych w języku Java. Przyjrzyjmy się poleceniom dostępnym w JShell wraz z poleceniem służącym do wyjścia z programu.