Java witaj świecie

Przyjęło się, że na początku każdego kursu programowania prezentuje się jako bonus fragment kodu. Jednak aby nie przestraszyć czytelnika, jest to bardzo prosty fragment. Ja zmienię trochę tę tradycję i zamieszczę dwie aplikację, Java Witaj świecie. Pierwsza bardzo prosta i druga trochę trudniejsza. Zrobię to w ten sposób, ponieważ chcę już w pierwszym artykule, tej serii zaprezentować jak wygląda programowanie. Nie chodzi o przestraszenie nikogo, ale raczej pokazanie, w czym tkwi sedno programowania.

Przykład „Java witaj świecie” – najprostsza wersja

Java jest językiem obiektowym, dzięki czemu każdy kod jest tworzony wewnątrz klasy. Klasa jest tak naprawdę przepisem na obiekt, który jest uruchomiony w systemie.

public class Start {
    public static void main(String[] args) {
        System.out.println("Java witaj świecie");
    }
}

W tym przykładzie mamy klasę, która praktycznie nic nie robi. Posiada ona tylko jedną metodę main, której zadaniem jest wyświetlenia w konsoli tekstu „Java witaj świecie”.

Przykład „Java witaj świecie” – trudniejsza wersja

Jednak zanim przejdę dalej, stworzę coś bardziej ambitnego i wytłumaczę, jak to działa.

import java.util.ArrayList;
import java.util.List;

public class Dog {
    private String name;
    private String race;
    private String color;

    public Dog(String name, String race, String color) {
        this.name = name;
        this.race = race;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public static void main(String[] args) {
        List<Dog> dogs = new ArrayList<>();
        dogs.add(new Dog("Pikuś","Jamnik","Szary"));
        dogs.add(new Dog("Ares","Owczarek niemiecki","czarny"));
        for (Dog dog:dogs) {
            System.out.println("Pies: imię: "+dog.name+", rasa: "+dog.race+", kolor: "+dog.color);
        }
    }
}

Straszne co. Taki jest efekt na początku, ale po wytłumaczeniu wszystko powinno się wyjaśnić.

Budowa klasy

Dlatego podzielmy nasz kod na fragmenty i zacznijmy pracę.

import java.util.ArrayList;
import java.util.List;

Pierwsze dwie linijki to deklaracje użytych obiektów, którymi na tym etapie nie musisz się zajmować. Jednak muszą być dodane na początku, aby aplikacja działała i dała się skompilować.

public class Dog {
    private String name;
    private String race;
    private String color;

Następna jest deklaracja klasy Dog (pies) oraz pola. Interpretujemy to tak nazwa klasy to pies, ale każdy pies ma pewne cechy (pola). Pierwszą cechą psa jest, name (imię). Drugą cechą jest race (rasa) a trzecią color (kolor). Te cechy w klasach to pola, w których przechowujemy odpowiednie wartości. W naszym przypadku wszystkie pola przed nazwą mają String, czyli są polami tekstowymi. Jest również zapis private (prywatny), czyli nie mamy bezpośredniego dostępu do pól. Musimy do tego celu użyć odpowiedniej metody.

Kolej na metody. W metodach wykonujemy operacje. Najciekawsza jest metoda main, która jest metodą startową dla aplikacji. Metoda main musi być jedną metodą dla całej aplikacji, więc gdy mamy pięć klas, to zawsze jest tylko jedna metoda main. Metodą main zajmiemy się w dalszej części artykułu.

Pozostałe metody, mają takie same nazwy jak pola. Różnią się przedrostkami get i set na początku. Jest to spowodowane tym, że nasze pola były zadeklarowane jako private (prywatne) i teraz musimy mieć możliwość ich ustawiania i odczytu. Do tego służą właśnie te metody. Metody get służą do odczytu danych z pól, a metody set służą do ustawiania danych pól.

Pewnie się zastanawiasz, dlaczego nie omówiliśmy tego fragmentu kodu, już go wyjaśniam. Jest to konstruktor klasy.

public Dog(String name, String race, String color) {
        this.name = name;
        this.race = race;
        this.color = color;
    }

Są dwa sposoby na ustawienie wartości pól. Poznaliśmy już metody set, dzięki którym możemy ustawiać wartości. Można to zrobić również przy tworzeniu obiektu w konstruktorze, na starcie obiektu. Dlatego w niektórych przypadkach możemy w ogóle nie używać metod set a wartości ustawiać jedynie w konstruktorze. Jest to dobre rozwiązanie, gdy nie chcemy zmieniać wartości pól w utworzonym obiekcie.

Tworzenie obiektu, metoda Main

Wróćmy do metody main. Jej zadaniem jest uruchamianie naszej aplikacji napisanej w Javie. W każdej aplikacji musimy mieć jedną taką metodę. W naszym przypadku mamy tylko jedną klasę więc metoda main jest umieszczona właśnie w niej. Jak widzimy, jest ona dużo trudniejsza od wcześniejszych metod.

List<Dog> dogs = new ArrayList<>();
dogs.add(new Dog("Pikuś","Jamnik","Szary"));
dogs.add(new Dog("Ares","Owczarek niemiecki","czarny"));
for (Dog dog:dogs) {
  System.out.println("Pies: imię: "+dog.name+", rasa: "+dog.race+", kolor: "+dog.color);
}

Aby wyjaśnić, co się dzieje, muszę wykonać pewne założenie. Zakładam, że moja aplikacja utworzy dwa obiekty Dog, a następnie wyświetli ich zawartość.

W pierwszej linii tworzymy listę obiektów Dog. Lista pozwala na przechowywanie więcej niż jeden obiekt danego typu.

Kolejne dwie linie to dodanie do naszej listy dwóch obiektów Dog. Realizujemy to przez metodę „add” i wykorzystujemy konstruktor do utworzenia obiektu i ustawienia danych początkowych jednocześnie. Jednak możemy nie używać konstruktora i zapisać to w taki sposób:

Dog dog = new Dog();
dog.setName("Pikuś");
dog.setRace("Jamnik");
dog.setColor("czarny");
dogs.add(dog);

Jak widać, zapis jest dużo dłuższy. Osiągamy dokładnie ten sam efekt. Dlatego w takich przypadkach lepiej korzystać z konstruktora.

Pętle

Zostało nam jeszcze wyświetlenie tych danych w konsoli.

for (Dog dog:dogs) {
      System.out.println("Pies: imię: "+dog.name+", rasa: "+dog.race+", kolor: "+dog.color);
}

Pętle pozwalają na przeglądanie elementów listy jeden po drugim. W naszym przypadku wykonujemy dwie operacje. Pierwsza odczytuje dany obiekt z listy. Drugi wyświetla zawartość dla każdego pola w konsoli.

Kompilacja i uruchamianie

Mamy już gotową aplikację czas sprawdzić, czy działa. Jednak w przypadku Java nie jest to pełna kompilacja to kodu wykonywalnego, czyli do exe dla Windows. Tworzony jest element pośredni, który później można uruchamiać na wielu systemach operacyjnych. Do kompilacji i uruchomienia jest niezbędna zainstalowana Java w odpowiedniej wersji w naszym systemie.

Java jest dostępna dla wielu systemów operacyjnych. Systemy te różnią się miedzy sobą i właśnie te różnice niwelują wersje instalacyjne dla danego systemu operacyjnego. Dzięki temu my programiści tworzymy jeden kod, który uruchamiamy w różnych systemach.

Proces kompilacji odbywa się przy użyciu polecenia:

javac dog.java

Aby skompilować naszą aplikację, musimy wykonać następujące polecenie. Jednak najpierw musimy mieć zainstalowaną Javę zgodną z naszym systemem operacyjnym.

Jeżeli wcześniejszy krok się powiódł, możemy teraz uruchomić naszą aplikację.

java dog

W tym przypadku wykorzystuje zwykły edytor i uruchomiam wynik mojej pracy w konsoli. Jest to w tym przypadku możliwe, jednak gdy będziemy tworzyć prawdziwe aplikacje warto zaopatrzyć się którychś z IDE obsługujących Javę. W tych aplikacjach cała kompilacja i uruchamianie to naciśniecie jednego przycisku.

Wynik działania

I teraz otrzymujemy taki wynik w konsoli:

Pies: imię: Pikuś, rasa: Jamnik, kolor: Szary
Pies: imię: Ares, rasa: Owczarek niemiecki, kolor: czarny

I to już wszystko w tym artykule. Zapraszam do kolejnych moich artykułów z serii Java.