16 września 2025 roku została wydana Java 25 — pierwszy release Long-Term Support po Java 21. Po 15 latach pracy z Javą przeszkoliłem dziesiątki ludzi na programistów, a teraz razem z moim zespołem tworzę kursy dla milionów studentów. Przeanalizowałem nowości Java 25 — są interesujące rzeczy, które uproszczą życie developerów.

Podczas gdy inne platformy czekają na oficjalny release, my już uruchomiliśmy nasz kurs. Nie czekamy, aż wszyscy przedyskutują nową Javę — od razu tworzymy kurs 💪

Gdy uruchomiliśmy CodeGym w 2014 roku, nasz cel był prosty — dać ludziom praktyczne umiejętności programowania, a nie piękne prezentacje o tym, "jak ważne jest uczenie się podstaw". Przez ponad 10 lat ponad 2 miliony ludzi przeszło nasze kursy. Teraz stworzyliśmy pierwszy na świecie kurs Java 25 i chcę opowiedzieć, co tam ciekawego.

Compact Source Files — Java dla początkujących

Najbardziej zauważalna zmiana w Java 25 to uproszczona składnia dla nowicjuszy. Teraz możesz pisać programy bez jawnego deklarowania klas:

Java

// Wcześniej było potrzebne to
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

// Teraz wystarczy to
void main() {
    IO.println("Hello, World!");
}

Jeśli plik .java ma metody lub pola poza jawną deklaracją klasy, kompilator automatycznie tworzy ukrytą klasę top-level. Dla tych, którzy uczą się programowania, znacznie obniża to próg wejścia.

Instance Main Methods — bez static i String[]

Java 25 pozwala używać metod instancyjnych jako punktów wejścia programu. Nie trzeba już tłumaczyć początkującym, co to jest static:

Java

void main() {
    // Zwykła metoda instancyjna
    processData();
}

void processData() {
    IO.println("Przetwarzanie danych...");
}

Jeśli klasa nie ma odpowiedniej statycznej metody main, launcher Java szuka metody main instancyjnej i automatycznie tworzy instancję klasy.

java.lang.IO — Proste wejście/wyjście

Nowa klasa java.lang.IO upraszcza pracę z konsolą. Nie trzeba już pamiętać System.out.println:

Java

void main() {
    String name = IO.readln("Podaj swoje imię: ");
    IO.println("Cześć, " + name + "!");
}

Klasa znajduje się w pakiecie java.lang, więc jest dostępna bez importu. Są metody do wyświetlania, wczytywania i czytania stringów z promptem.

Flexible Constructor Bodies — Elastyczne konstruktory

W Java 25 możesz wykonywać operacje przed wywołaniem super() lub this():

Java

public class User {
    private final String email;
    private final String domain;
    
    public User(String email) {
        // Operacje przed wywołaniem super()
        this.domain = extractDomain(email);
        validateDomain(domain);
        
        super(); // Wywołanie konstruktora Object
        
        this.email = email;
    }
    
    private String extractDomain(String email) {
        return email.substring(email.indexOf('@') + 1);
    }
}

To pozwala na inicjalizację pól i wykonanie walidacji przed utworzeniem obiektu, czyniąc konstruktory bardziej naturalnymi.

Module Import Declarations — Uproszczone importy

JEP 511 wprowadza możliwość importowania wszystkich pakietów modułu jedną linią:

Java

import module java.base;

// Teraz wszystkie klasy z java.base są dostępne bez jawnych importów
void main() {
    var list = new ArrayList<String>();
    var file = new File("data.txt");
    var decimal = new BigDecimal("123.45");
}

Jest to szczególnie przydatne przy pracy z dużymi modułami, gdzie potrzebujesz wielu klas.

Stable Values — Zoptymalizowane stałe

Nowe API do pracy z niezmiennymi wartościami, które mogą być zainicjalizowane później:

Java

class Configuration {
    static final StableValue<String> DATABASE_URL = 
        StableValue.of(() -> loadFromConfig("db.url"));
        
    void connectToDatabase() {
        String url = DATABASE_URL.get(); // Leniwa inicjalizacja
        // Połączenie z bazą danych
    }
}

Stable Values pomagają zoptymalizować czas uruchamiania aplikacji i zapewniają bezpieczeństwo wątków dla odroczonej inicjalizacji.

Primitive Types in Patterns — Rozszerzone Pattern Matching

Java 25 rozszerza Pattern Matching na wszystkie typy prymitywne:

Java

static String classify(Number n) {
    return switch (n) {
        case int i -> "Integer: " + i;
        case long l -> "Long: " + l;
        case double d -> "Double: " + d;
        case float f -> "Float: " + f;
        default -> "Nieznany typ liczby";
    };
}

Teraz możesz używać pattern matching z int, long, double, float i innymi prymitywami w wyrażeniach switch i instanceof.

Compact Object Headers — Oszczędność pamięci

W Java 25 rozmiary nagłówków obiektów zostały zmniejszone z 96-128 bitów do 64 bitów na architekturach 64-bitowych:

Java

// Każdy obiekt zajmuje teraz mniej pamięci
List<String> list = new ArrayList<>(); // Mniejszy narzut
Map<String, User> users = new HashMap<>(); // Oszczędności na każdym wpisie

Jest to szczególnie zauważalne w aplikacjach z dużą liczbą obiektów — mikrousługach i aplikacjach z dużymi stertami.

To szczególnie widoczne w aplikacjach z wielką liczbą obiektów — mikrousługach i aplikacjach z dużymi heap'ami.

Scoped Values — Bezpieczny kontekst

Finalna wersja Scoped Values pozwala przekazywać niezmienne dane między metodami i wątkami:

Java

private static final ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();

public void handleRequest(User user) {
    ScopedValue.where(CURRENT_USER, user)
        .run(() -> {
            processOrder();  // Wewnątrz dostęp do user przez CURRENT_USER.get()
            sendNotification();
            logActivity();
        });
}

W przeciwieństwie do ThreadLocal, Scoped Values są łatwiejsze w użyciu, mają mniejszy narzut i lepiej współpracują z wirtualnymi wątkami.

Ulepszenia JFR — Lepsze profilowanie

Java 25 ulepsza Java Flight Recorder trzema nowymi możliwościami:

JFR Cooperative Sampling — bezpieczniejsze zbieranie stack trace bez bias'u i ze wsparciem dla współbieżnego stack walking.

JFR Method Timing & Tracing — śledzenie czasu wykonania konkretnych metod bez zmian w kodzie:

Bash

java -XX:StartFlightRecording:jdk.MethodTiming#methods=com.myapp.Service.* MyApp

CPU-Time Profiling on Linux — precyzyjne profilowanie czasu CPU z wykorzystaniem możliwości jądra Linux.

Key Derivation Functions API

Nowe API do pracy z funkcjami wyprowadzania kluczy (KDF):

Java

// Przykład użycia KDF do generowania kluczy pochodnych
KeyDerivationFunction kdf = KeyDerivationFunction.getInstance("PBKDF2WithHmacSHA256");
SecretKey derivedKey = kdf.deriveKey(password, salt, iterations, keyLength);

To krytycznie ważne dla aplikacji kryptograficznych i implementacji bezpiecznego przechowywania haseł.

Po co uczyć się Java 25

Java rozwija się szybko — nowe wersje LTS wychodzą co 3 lata. Ci, którzy opanowują nowości jako pierwsi, zyskują przewagę na rynku pracy.

Java 25 to release LTS z 5 latami wsparcia od Oracle. Firmy będą migrować na tę wersję i szukać programistów, którzy znają nowe możliwości języka.

Pierwszy kurs Java 25

Gdy Oracle ogłosił datę wydania Java 25, postanowiliśmy nie czekać. CodeGym zawsze był na przodzie — jako pierwsi stworzyliśmy zgamifikowaną naukę programowania, jako pierwsi stworzyliśmy interaktywne zadania z automatycznym sprawdzaniem.

Teraz jesteśmy pierwszymi, którzy dają możliwość praktycznej nauki Java 25. Kurs zawiera zarówno nowości Java 25, jak i ważne funkcje z poprzednich wersji — lambdy i Stream API z Java 8, moduły z Java 9, var z Java 10, Text Blocks z Java 13, Records z Java 14, Pattern Matching z Java 17, Virtual Threads z Java 21.

Co jest w kursie:

  • 325+ wykładów wyjaśniających każdą nowość Java 25
  • 880+ zadań od prostych po poziom enterprise
  • Mentor AI, który analizuje kod i daje rekomendacje
  • Integracja z IntelliJ IDEA — ucz się na profesjonalnych narzędziach
  • Duże projekty — twórz prawdziwe aplikacje z nowymi technologiami

Praktyka — Podstawa nauki

Po latach nauczania zrozumiałem prostą prawdę: teoria bez praktyki to marnowanie czasu. Możesz przeczytać całą dokumentację o Compact Source Files, ale dopóki nie napiszesz kilku programów z nową składnią, nie poczujesz wygody.

W kursie każda nowość Java 25 jest od razu utrwalana praktyką. Naucz się Flexible Constructor Bodies — napisz bezpieczny system inicjalizacji obiektów. Opanuj Scoped Values — stwórz wielowątkową aplikację z przekazywaniem kontekstu. Zrozum Module Import Declarations — uprość strukturę dużych projektów.

AI Mentor w kursie

Najciekawszą cechą naszego kursu jest AI, który analizuje kod studentów. To nie są ogólne rady od ChatGPT, lecz wyspecjalizowany system, który:

  • Zna kontekst każdego zadania kursu
  • Analizuje styl programowania
  • Daje spersonalizowane rekomendacje

Zgamifikowana nauka

Programowanie może być nudne, jeśli uczysz się go źle. Dlatego w CodeGym nauka jest zbudowana jak gra: poziomy, osiągnięcia, rankingi.

W kursie Java 25:

  • Osiągnięcia za rozwiązywanie zadań różnej trudności
  • Ogólny ranking studentów
  • Poziomy jak w grze

Od zera do gotowości do pracy

Kurs jest zbudowany tak, że nawet początkujący po 65 poziomach będzie miał wiedzę wystarczającą do pracy w poważnej firmie. Pełny program kursu obejmuje naukę nowoczesnej Java 25, ale także pokrywa:

  • Nowoczesną składnię i nowe operatory
  • OOP z nowymi możliwościami języka
  • Kolekcje i Stream API
  • Pracę z plikami przez nowoczesne API
  • Wielowątkowość i zarządzanie wątkami

Plugin do IntelliJ IDEA

Jedną z cech CodeGym jest plugin do IntelliJ IDEA. Studenci rozwiązują zadania bezpośrednio w profesjonalnym środowisku deweloperskim, z podświetlaniem składni, autouzupełnianiem i debuggerem.

Natychmiastowe sprawdzanie rozwiązań

W CodeGym możesz rozwiązać zadanie i poznać wynik w kilka sekund. System automatycznie sprawdza kod, uruchamia testy i daje feedback.

Dla Java 25 system sprawdzania rozumie:

  • Nową składnię Compact Source Files
  • Instance Main Methods
  • Flexible Constructor Bodies
  • Module Import Declarations

Dlaczego CodeGym do nauki Java 25

Przez ponad 10 lat pracy zrozumieliśmy, jak skutecznie uczyć programowania. Rekruterzy w firmach IT znają CodeGym i często pytają na rozmowach: "Jaki masz poziom na CodeGym?" Nie dlatego, że im za to płacimy, ale dlatego, że wiedzą — jeśli ktoś doszedł do 40 poziomu, umie programować, a nie tylko zakuć składnię.

Kurs Java 25 to ewolucja naszej metodologii. Ta sama praktyczna orientacja, ale z najnowocześniejszymi technologiami.

Zacznij naukę teraz

Java 25 już wyszła i możesz ją uczyć się teraz — podczas gdy konkurencja czyta release notes. Nasz kurs zawiera wszystkie innowacje z praktycznymi przykładami.

65 poziomów praktycznych zadań, AI mentor, integracja z profesjonalnymi narzędziami — wszystko, żebyś opanował nowoczesną Javę szybko i skutecznie.

Zostań programistą Java gotowym na 2025 rok.

Gotowy na naukę Java 25? Zacznij w CodeGym — jedynej platformie z kompletnym praktycznym kursem najnowszej wersji Java.

65 poziomów | 880+ zadań | AI mentor | Integracja z IDEA

Rozpocznij naukę Java 25 →