CodeGym /Kursy /JAVA 25 SELF /Struktura programu w Javie, metoda main

Struktura programu w Javie, metoda main

JAVA 25 SELF
Poziom 8 , Lekcja 1
Dostępny

1. Wprowadzenie

Gdy dopiero zaczynasz programować, wydaje się, że można po prostu pisać kod linijka po linijce i wszystko będzie działać. Jednak gdy program staje się bardziej złożony, w głowie zaczyna się chaos: gdzie co się znajduje, po co to napisano i jeśli trzeba zmienić jedną linijkę — gdzie ona w ogóle leży?

Dlatego Java, podobnie jak większość nowoczesnych języków, oferuje sposób na „poukładanie” kodu, aby w każdej chwili można było zrozumieć, co robi program, i szybko znaleźć potrzebne miejsce.

Wyobraź sobie firmę. Jest w niej dział kadr, księgowość, dział IT, dział logistyki i tak dalej. Każdy dział — ma własny zakres odpowiedzialności, własnych pracowników i zadania.

W programie na Java każdy taki „dział” — to klasa. Jedna klasa odpowiada na przykład za pracę z użytkownikami, inna — za obliczenia, jeszcze inna — za pracę z plikami.

Oto typowa struktura prostego projektu:

  • Main.java — główne biuro: tutaj znajduje się „punkt wejścia”, od którego wszystko się zaczyna.
  • User.java — dział, w którym przechowywane i przetwarzane są dane użytkownika.
  • Calculator.java — dział obliczeń.
  • FileHelper.java — specjaliści od plików.

Nawet w zupełnie małym programie zwykle jest co najmniej jedna klasa. A duże projekty — to już cały „wieżowiec” z setek klas!

2. Klasa — to skrzynka z narzędziami

Java — to język obiektowy, i wszystko w nim jest obiektami. Typy obiektów nazywają się klasami.

Klasa — to jak pudełko lub szafka, do której wkładamy potrzebne nam rzeczy: zmienne, metody. Wyobraź sobie pudełko z napisem „Młotki”: w środku leżą tylko narzędzia związane z młotkami.

class Example 
{
    // Tutaj będą nasze narzędzia: zmienne i metody
}

Klasy zwykle zawierają zmienne i funkcje. W Java zmienne klasy nazywa się polami, a funkcje klasy — metodami. Sens pozostaje ten sam.

Pamiętasz nasz pierwszy kod?

System.out.println("Cześć wszystkim!");

W tym kodzie są zarówno klasa, jak i metody:

  • System — to klasa, która zawiera metody do pracy z systemem.
  • out — to pole, które jest obiektem klasy PrintStream.
  • println — to metoda klasy PrintStream, która wypisuje tekst na ekran.

W pewnym sensie całe programowanie sprowadza się do pisania własnych klas i metod, które wywołują metody innych klas.

3. Skrócony zapis metody main()

W istocie minimalny program na Java wygląda tak:

class Program 
{
    public static void main(String[] args) 
    {
        // Tutaj Twój kod
    }
}

Zawiera co najmniej jedną klasę, która musi zawierać metodę main o następującym nagłówku (sygnaturze):


public static void main(String[] args)
Sygnatura metody main w Javie

Jednak w Java 21 pojawiła się możliwość pisania metody main() w skróconej formie. A kompilator Javy następnie (podczas kompilacji) przekształci ją w poprawną metodę main().

Dlatego za każdym razem, gdy piszesz kod typu:

void main() 
{
    Scanner console = new Scanner(System.in);
    int age = console.nextInt();
    System.out.println("Wiek: " + age);
}

Kompilator Javy przekształci go w kod:

class Program 
{
    public static void main(String[] args) 
    {
        Scanner console = new Scanner(System.in);
        int age = console.nextInt();
        System.out.println("Wiek: " + age);
    }
}

4. Typowa klasa Javy

Typowa klasa w Javie wygląda mniej więcej tak:

public class MathUtils 
{
    // Statyczne zmienne (globalne dla klasy)
    static final double PI = 3.14159;
    static int callCounter = 0;

    // Metoda statyczna: obliczanie pola koła
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Metoda statyczna: znajdowanie maksimum z dwóch liczb
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }

    // Metoda statyczna: ile razy wywoływano metody
    public static int getCallCount() 
    {
        return callCounter;
    }

    // Odwołujemy się do pól i metod z metody main() 
    public static void main(String[] args) 
    {
        System.out.println("Pole koła: " + circleArea(5));
        System.out.println("Maksimum: " + max(10, 42));
        System.out.println("Metody były wywoływane " + getCallCount() + " razy");
    }
}

Co tu widzimy:

  • Klasa może mieć wiele metod.
  • Klasa może mieć własne zmienne.
  • Metody klasy mogą wywoływać się nawzajem.
  • Metody klasy mogą odwoływać się do wspólnych zmiennych.
  • Przed każdą metodą są takie same „magiczne słowa”, np.: public static.
  • Przed każdą metodą są różne typy: int, double, void.

Poniżej omówimy wszystkie te niuanse.

5. Pola (zmienne) klasy — to jej pamięć

Wewnątrz klasy można przechowywać zmienne, które często nazywa się polami (fields). To jak komórki pamięci, w których odkładamy pewne dane.

public class MathUtils 
{
    // Statyczne zmienne (globalne dla klasy)
    static final double PI = 3.14159;
    static int callCounter = 0;
}    

Pola pozwalają klasie coś „pamiętać” między wywołaniami różnych metod. Na przykład liczyć, ile razy naciśnięto przycisk. Albo ile razy wywołano metodę (callCounter). Pól może być dowolnie dużo.

6. Metody — działania, które może wykonywać klasa

Metody — to „umiejętności” naszej klasy. Jeśli klasa — to pracownik, to metody — to jego kompetencje: co potrafi robić.

Na przykład metoda może:

  • wyświetlić coś na ekran,
  • obliczyć sumę dwóch liczb,
  • przyjąć dane „na wejściu” i zwrócić wynik.

Budowa metody:

  1. Typ zwracanego wyniku (na przykład void — jeśli nic nie zwraca, lub int — jeśli zwraca liczbę).
  2. Nazwa metody (na przykład circleArea).
  3. Parametry w nawiasach (mogą nie występować).
  4. Nawiasy klamrowe { ... } — ciało metody.
public class MathUtils 
{
    // Metoda statyczna: obliczanie pola koła
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }

    // Metoda statyczna: znajdowanie maksimum z dwóch liczb
    public static int max(int a, int b) 
    {
        callCounter++;
        return (a > b) ? a : b;
    }
}    

Więcej o metodach i wszystkich związanych z nimi niuansach poznasz w najbliższych wykładach.

7. Modyfikatory dostępu

W Java można określić, które części klasy są dostępne z innych klas, a które pozostają tylko do użytku wewnętrznego. Służą do tego modyfikatory dostępu.

  • publicwidoczne dla wszystkich. Takie metody i pola można używać/wywoływać z dowolnego miejsca programu.
  • privatewidoczne tylko wewnątrz samej klasy. To detale wewnętrzne, które nie powinny być dostępne dla innych. Jakby ich w ogóle nie było.
public class MathUtils 
{
    // Statyczne zmienne (globalne dla klasy)
    private static final double PI = 3.14159;
    private static int callCounter = 0;

    // Metoda statyczna: obliczanie pola koła
    public static double circleArea(double radius) 
    {
        callCounter++;
        return PI * radius * radius;
    }
}    

Złota zasada: pola zazwyczaj robi się private, a na zewnątrz „wystawia” się tylko potrzebne metody z modyfikatorem public. Więcej o modyfikatorach widoczności — w najbliższych wykładach.

8. Metody i zmienne statyczne

Zwykle w Java klasa służy jako szablon do tworzenia obiektów. Piszesz własną klasę, następnie tworzysz obiekty tej klasy za pomocą słowa kluczowego new. I dopiero potem wywołujesz metody na obiektach.

Istnieje jednak i drugi sposób używania klasy — jako kontenera na globalne zmienne i metody, które można wywołać z dowolnego miejsca programu. Właśnie do tego służy słowo kluczowe static. Mówi ono kompilatorowi Javy, że metody i pola klasy są powiązane nie z obiektem klasy, lecz bezpośrednio z samą klasą. Dzięki temu można je wywoływać, w ogóle nie tworząc obiektów tej klasy.

Zresztą, ciągle korzystasz z takich metod:

Integer.parseInt();     // Statyczna metoda parseInt() w klasie Integer
String.valueOf();       // Statyczna metoda valueOf() w klasie String 
Double.isInfinite();    // Statyczna metoda isInfinite() w klasie Double 
Arrays.copy();          // Statyczna metoda copy() w klasie Arrays 

Metoda main() zawsze jest deklarowana jako statyczna, ponieważ od niej zaczyna się wykonywanie twojego programu w Javie. Zanim powstaną jakiekolwiek obiekty.

9. Lifehack w IDEA

Pełna sygnatura metody main() wygląda tak:

public static void main(String[] args) 

Aby nie pisać jej za każdym razem w IntelliJ IDEA, istnieje dla niej skrót. Wystarczy napisać psvm i nacisnąć Tab, a IntelliJ IDEA sama za ciebie wygeneruje taki kod:

public static void main(String[] args) 
{
    
}

Łatwo to zapamiętać — psvm — to pierwsze litery od public static void main.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION