Debugowanie w IntelliJ #3 Więcej możliwości przy pracy z breakpointami.

W poprzednich odcinkach cyklu poznaliśmy podstawy debugowania oraz poruszania się po kodzie w trakcie sesji debugowania. W tym wpisie poświęcimy więcej uwagi breakpointom.

Czytaj dalej Debugowanie w IntelliJ #3 Więcej możliwości przy pracy z breakpointami.

Debugowanie w IntelliJ #2 Poruszanie się po kodzie w trybie debug

W poprzednim odcinku serii poznaliśmy podstawy debugowania, a tym odcinku serii przyjrzymy się stosowi wywołań (call stack) i poznamy jak poruszać się o nim podczas sesji debug.

Czytaj dalej Debugowanie w IntelliJ #2 Poruszanie się po kodzie w trybie debug

Debugowanie w IntelliJ #1

W pierwszej części krótkiego cyklu o debugowaniu w IDE IntelliJ Community przyjrzymy się zupełnym podstawom.

Czym jest debugowanie?

Zacznijmy od tego, czym jest debugowanie. Przede wszystkim jest to proces, podczas którego szukamy błędów w kodzie i je naprawiamy. Oczywiście nie jest to tak, że manager rzuca hasłem “a teraz debugujemy” i każdy szuka błędów w ciemno.

O wiele bardziej przypomina to “zabawę” w detektywa – zawsze znamy kontekst danego błędu. To znaczy wiemy, co tester (albo użytkownik) zrobił, jakie były dane wejściowe, jak miał być efekt, a co stało się faktycznie.

Czytaj dalej Debugowanie w IntelliJ #1

Szkolenie “Kompletna aplikacja w języku Java” wystartowało!

Oto jest! Mój pierwszy kurs płatny na mojej platformie 🙂

Szkolenie “Kompletna aplikacja w języku Java – od zera do installera” zostało rozpoczęte. Zapisywać się można na https://java.clockworkjava.pl.

  • Jeden program rozwijany krok po kroku przez 22 godziny materiału
  • Architektura aplikacji
  • Najlepsze praktyki i testy jednostkowe
  • Integracja z bazą danych
  • Graficzny interfejs użytkownika

Wszystko to w kontekście jednej, dużej aplikacji. Szczegółowa agenda programu na https://java.clockworkjava.pl/#course-index. Zapisy zamykam 23.X.2020.

Java 15 – Text Block

W Javie 15 dotarł do nas feature o nazwie Text Block, choć w fazie preview był już od bodaj wersji 13.

Mam dla niego nawet doskonały, praktyczny przykład wprost z mojego kursu Kompletna aplikacja w języku Java – od zera do installera ;). Do tej pory, gdy chcieliśmy sformatować wizualnie np. zapytanie do bazy danych

ResultSet resultSet = statement
                    .executeQuery("SELECT R.ID, R.ROOM_NUMBER, B.BED FROM ROOMS AS R LEFT JOIN BEDS AS B ON R.ID=B.ROOM_ID");

Kończyliśmy z czyś takim

Statement statement = SystemUtils.connection.createStatement();
ResultSet resultSet = statement.executeQuery("" +
                            "SELECT " +
                                "R.ID, " +
                                "R.ROOM_NUMBER," +
                                "B.BED " +
                            "FROM " +
                                "ROOMS AS R " +
                            "LEFT JOIN " +
                                "BEDS AS B " +
                            "ON" +
                                " R.ID=B.ROOM_ID");

Używając “bloku tekstu” możemy zapisać to w o wiele przyjemniejszy dla oka sposób:

Statement statement = SystemUtils.connection.createStatement();
ResultSet resultSet = statement.executeQuery("""
                            SELECT 
                              R.ID,
                              R.ROOM_NUMBER,
                              B.BED 
                           FROM
                              ROOMS AS R
                           LEFT JOIN 
                              BEDS AS B 
                           ON
                              R.ID=B.ROOM_ID
                            """);

Odpada nam więc ciągłe otwieranie ” i używanie plusów do łączenia. Blok tekstu zaczynamy i kończymy potrójnym cudzysłowiem """

Dodatkowo wewnątrz bloku możemy do woli korzystać z bez konieczności ciągłego używania \” np.

"""
 Przykład "użycia"
"""

Text block jest traktowany jak zwyczajny String, więc możemy spokojnie zastosowań String.format bądź .replace, by wstrzyknąć tam dane.

int id = 2;

String query  ="""
                    SELECT 
                       ID,
                       ROOM_NUMBER
                    FROM 
                       ROOM
                    WHERE
                       ID = %d 
""";

String finalQuery = String.format(query, id);

Dodano nawet specjalną funkcję do klasy String, by ułatwić powyższe

            int id = 2;

            String finalQuery  ="""
                    SELECT 
                       ID,
                       ROOM_NUMBER
                    FROM 
                       ROOM
                    WHERE
                       ID = %d 
                    """.formatted(id);

By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.

Java 14 – Więcej informacji przy NullPointerException

Java w wersji 14 daje możliwość uruchomienia rozszerzonych informacji o znanym i lubianym NullPointerException.

Standardowo, gdy odpalimy taki kawałek kodu:

    public static void main(String[] args) {
        howLong(null);
    }
    
    private static int howLong(String s) {
        return s.length();
    }

Dostaniemy taki oto wyjątek:

Exception in thread "main" java.lang.NullPointerException
	at NPEEx.howLong(NPEEx.java:12)
	at NPEEx.main(NPEEx.java:5)

Natomiast, gdy uruchomimy naszą aplikację z dodatkowym argumentem dla Virtual Machine

-XX:+ShowCodeDetailsInExceptionMessages

Dostaniemy już nieco więcej informacji

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "s" is null
	at NPEEx.howLong(NPEEx.java:8)
	at NPEEx.main(NPEEx.java:4)

I o ile w powyższym, prymitywnym przykładzie to nie potrzebujemy pomocy to, gdy mamy do czynienia z typowym anty-patternem “train wreck”:

person.getContactInfo().getAddress().getStreet()

To już dobrze wiedzieć co konkretnie się popsuło. Wówczas dostaniemy taką informację:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Address.getStreet()" because the return value of "ContactInfo.getAddress()" is null
	at NPEEx.main(NPEEx.java:5)

W IntelliJ możemy dodać argument do wirtualnej maszyny w menu Run -> Edit Configurations -> VM Options.

By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.

Pragmatyczny plan nauki dla ekosystemu Java – v1.2

Jakiś czas temu zapytałem na swojej mailiście o pytania, do nagrania godzinnego i technicznego Q&A z ekosystemu Javy. Jedno spośród pytań było nietechniczne, ale na tyle ciekawe, że postanowiłem przysiąść nad nim poza konkursem. Dodatkowo na tyle popularne, że stwierdziłem, żeby od razu stworzyć wpis na blogu na ten temat.

Chodziło o pokazanie jasnej roadmapy, planu nauki, jak i czego w roku 2020 się uczyć “na juniora”.

No to zaczynamy (i od razu – planuję rozbudowę tego wpisu, ale do tego potrzebuję Twojego feedbacku – po przeczytaniu daj znać na pawel@clockworkjava.pl)

Poziom ZERO

Czytaj dalej Pragmatyczny plan nauki dla ekosystemu Java – v1.2