{"id":3004,"date":"2022-07-08T11:25:57","date_gmt":"2022-07-08T11:25:57","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/9-mistakes-to-avoid-while-programming-in-java\/"},"modified":"2026-03-09T13:13:14","modified_gmt":"2026-03-09T13:13:14","slug":"9-bledow-ktorych-nalezy-unikac-podczas-programowania-w-jezyku-java","status":"publish","type":"post","link":"https:\/\/thecodest.co\/pl\/blog\/9-mistakes-to-avoid-while-programming-in-java\/","title":{"rendered":"9 b\u0142\u0119d\u00f3w, kt\u00f3rych nale\u017cy unika\u0107 podczas programowania w Javie"},"content":{"rendered":"<p><strong><a href=\"https:\/\/thecodest.co\/pl\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a><\/strong> to popularny j\u0119zyk o ugruntowanej pozycji w \u015bwiecie <strong><a href=\"https:\/\/thecodest.co\/pl\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">rozw\u00f3j oprogramowania<\/a><\/strong>. Jest to silny i wszechstronny j\u0119zyk programowania. Oko\u0142o 3 miliardy urz\u0105dze\u0144 na ca\u0142ym \u015bwiecie dzia\u0142a na <strong>Java<\/strong> i dlatego pope\u0142niono co najmniej 3 miliardy b\u0142\u0119d\u00f3w podczas korzystania z niego. W tym artykule skupimy si\u0119 na tym, jak nie pope\u0142nia\u0107 ich wi\u0119cej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Uzyskiwanie wyj\u0105tku jednoczesnej modyfikacji<\/h2>\n\n\n\n<p>To zdecydowanie najcz\u0119stszy b\u0142\u0105d, z jakim si\u0119 spotykam. Na pocz\u0105tku mojej kariery r\u00f3wnie\u017c pope\u0142nia\u0142em go wiele razy. Ten b\u0142\u0105d pojawia si\u0119, gdy pr\u00f3bujesz zmodyfikowa\u0107 kolekcj\u0119 podczas jej iteracji. The <code>Wyj\u0105tek ConcurrentModificationException<\/code> mo\u017ce r\u00f3wnie\u017c zosta\u0107 podniesiona podczas pracy z wieloma w\u0105tkami, ale na razie skupmy si\u0119 na podstawowym scenariuszu.<\/p>\n\n\n\n<p>Za\u0142\u00f3\u017cmy, \u017ce masz <code>Kolekcja<\/code> u\u017cytkownik\u00f3w, z kt\u00f3rych cz\u0119\u015b\u0107 jest doros\u0142a, a cz\u0119\u015b\u0107 nie. Twoim zadaniem jest odfiltrowanie dzieci.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">for (User : users) {\n\n   if (!user.isAdult()) {\n\n       users.remove(user);\n\n   }\n\n}\n<\/code><\/pre>\n\n\n\n<p>Uruchomienie wspomnianego wcze\u015bniej <a href=\"https:\/\/thecodest.co\/pl\/dictionary\/what-is-code-refactoring\/\">kod<\/a> ko\u0144czy si\u0119 uzyskaniem <code>Wyj\u0105tek ConcurrentModificationException<\/code>. Gdzie pope\u0142nili\u015bmy b\u0142\u0105d? Przed zako\u0144czeniem iteracji pr\u00f3bowali\u015bmy usun\u0105\u0107 niekt\u00f3re elementy. To w\u0142a\u015bnie spowodowa\u0142o wyj\u0105tek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Istnieje kilka podej\u015b\u0107, kt\u00f3re mog\u0105 pom\u00f3c w takim przypadku. Po pierwsze i najwa\u017cniejsze, skorzystaj z <strong>Java<\/strong> 8's goodness - <code>Strumie\u0144<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">List adults = users.stream()\n\n       .filter(User::isAdult)\n\n       .toList();\n<\/code><\/pre>\n\n\n\n<p>Korzystanie z <code>Predykat<\/code> filter, wykonali\u015bmy odwrotno\u015b\u0107 poprzedniego warunku - teraz okre\u015blamy elementy do uwzgl\u0119dnienia. Zalet\u0105 takiego podej\u015bcia jest \u0142atwo\u015b\u0107 \u0142\u0105czenia innych funkcji po usuni\u0119ciu, np. <code>mapa<\/code>. Ale na lito\u015b\u0107 bosk\u0105, nie pr\u00f3buj robi\u0107 czego\u015b takiego jak poni\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">users.stream()\n\n       .filter(v -&gt; !.v.isAdult())\n\n       .forEach(users::remove);\n<\/code><\/pre>\n\n\n\n<p>Mo\u017ce r\u00f3wnie\u017c trafi\u0107 do <code>Wyj\u0105tek ConcurrentModificationException<\/code> poniewa\u017c modyfikujesz \u017ar\u00f3d\u0142o strumienia. Mo\u017ce to r\u00f3wnie\u017c powodowa\u0107 dodatkowe wyj\u0105tki, kt\u00f3re nie b\u0119d\u0105 \u0142atwe do debugowania.<\/p>\n\n\n\n<p>Aby rozwi\u0105za\u0107 <code>Wyj\u0105tek ConcurrentModificationException<\/code> w scenariuszu jednow\u0105tkowym. mo\u017cna r\u00f3wnie\u017c prze\u0142\u0105czy\u0107 si\u0119 na u\u017cywanie bezpo\u015brednio <code>Iterator<\/code> i jego <code>remove()<\/code> lub po prostu nie usuwa\u0107 element\u00f3w podczas iteracji. Moim zaleceniem jest jednak u\u017cycie <code>Strumienie<\/code> - jest rok 2022.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Przechowywanie hase\u0142 jako ci\u0105g\u00f3w znak\u00f3w<\/h2>\n\n\n\n<p>Poniewa\u017c coraz bardziej anga\u017cuj\u0119 si\u0119 w cyberbezpiecze\u0144stwo, nie by\u0142bym szczery, gdybym nie wspomnia\u0142 o co najmniej jednym z nich. <strong>B\u0142\u0105d Javy<\/strong> co mo\u017ce prowadzi\u0107 do naruszenia bezpiecze\u0144stwa. Przechowywanie hase\u0142 otrzymanych od u\u017cytkownik\u00f3w w pliku <code>String<\/code> Obiekt jest dok\u0142adnie tym, czego powiniene\u015b si\u0119 obawia\u0107.<\/p>\n\n\n\n<p>Problem (a mo\u017ce zaleta) <code>String<\/code> jest to, \u017ce jest niezmienna. W cybernetycznym \u015bwiecie stwarza to potencjalne zagro\u017cenie, poniewa\u017c nie mo\u017cna wyczy\u015bci\u0107 warto\u015bci raz utworzonego obiektu <code>String<\/code> obiekt. Atakuj\u0105cy, kt\u00f3ry uzyska dost\u0119p do pami\u0119ci komputera, mo\u017ce znale\u017a\u0107 tam has\u0142a w postaci zwyk\u0142ego tekstu.<\/p>\n\n\n\n<p>Po drugie, ci\u0105gi znak\u00f3w w <strong>Java<\/strong> s\u0105 internowane przez maszyn\u0119 JVM i przechowywane w przestrzeni PermGen lub w przestrzeni sterty. Po utworzeniu pliku <code>String<\/code> obiekt, jest buforowany i usuwany dopiero, gdy Garbage Collector zacznie wykonywa\u0107 swoj\u0105 prac\u0119. Nie mo\u017cna mie\u0107 pewno\u015bci, kiedy has\u0142o zostanie usuni\u0119te z puli String, poniewa\u017c Garbage Collector dzia\u0142a w spos\u00f3b niedeterministyczny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Zalecanym podej\u015bciem jest u\u017cycie <code>char[]<\/code> lub, jeszcze lepiej, biblioteka obs\u0142uguj\u0105ca przechowywanie hase\u0142 jako <code>char[]<\/code>np.<a href=\"https:\/\/github.com\/Password4j\/password4j\">Password4j<\/a>. The <code>char[]<\/code> jest zmienna i mo\u017ce by\u0107 modyfikowana po jej zainicjowaniu. Po przetworzeniu has\u0142a mo\u017cna po prostu usun\u0105\u0107 tablic\u0119 <code>char[]<\/code> zapisuj\u0105c w niej losowe znaki. W przypadku, gdy atakuj\u0105cy uzyskaj\u0105 dost\u0119p do pami\u0119ci komputera, zobacz\u0105 tylko losowe warto\u015bci, kt\u00f3re nie maj\u0105 nic wsp\u00f3lnego z has\u0142ami u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. (Nie)obs\u0142uga wyj\u0105tk\u00f3w<\/h2>\n\n\n\n<p>Zar\u00f3wno pocz\u0105tkuj\u0105cy, jak i bardziej zaawansowani programi\u015bci nie wiedz\u0105, jak poprawnie obs\u0142ugiwa\u0107 wyj\u0105tki. Ich g\u0142\u00f3wnym grzechem w tej kwestii jest ich ignorowanie. TO NIGDY NIE JEST DOBRE PODEJ\u015aCIE.<\/p>\n\n\n\n<p>Niestety, nie mo\u017cemy zaoferowa\u0107 rozwi\u0105zania, kt\u00f3re b\u0119dzie pasowa\u0107 do ka\u017cdej sytuacji. <code>Wyj\u0105tek<\/code>scenariusz, z kt\u00f3rym si\u0119 zetkniesz. Ka\u017cdy przypadek nale\u017cy rozpatrywa\u0107 osobno. Mo\u017cemy jednak da\u0107 ci kilka wskaz\u00f3wek, jak zacz\u0105\u0107 ten temat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<p>Ignorowanie <code>Wyj\u0105tek<\/code>nigdy nie jest dobr\u0105 praktyk\u0105. <code>Wyj\u0105tek<\/code>s\u0105 dodawane z jakiego\u015b powodu, wi\u0119c nie nale\u017cy ich ignorowa\u0107.<\/p>\n<\/li>\n\n\n\n<li>\n<p><code>try {...} catch(Exception e) { log(e); }<\/code> rzadko jest w\u0142a\u015bciwym podej\u015bciem do <code>Wyj\u0105tek<\/code> obs\u0142uga.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Rzut <code>Wyj\u0105tek<\/code>, wy\u015bwietli\u0107 u\u017cytkownikowi okno dialogowe b\u0142\u0119du lub przynajmniej doda\u0107 obszerny komunikat do dziennika.<\/p>\n<\/li>\n\n\n\n<li>\n<p>Je\u015bli nie obs\u0142u\u017cy\u0142e\u015b wyj\u0105tk\u00f3w (czego nie powiniene\u015b robi\u0107), przynajmniej wyja\u015bnij to w komentarzu.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">4. U\u017cywanie warto\u015bci null<\/h2>\n\n\n\n<p>Niestety, do\u015b\u0107 cz\u0119sto mo\u017cna znale\u017a\u0107 funkcj\u0119 Java, kt\u00f3ra w niekt\u00f3rych przypadkach zwraca warto\u015b\u0107 <code>null<\/code>. Problem polega na tym, \u017ce taka funkcja wymusza na swoim kliencie sprawdzenie wyniku pod k\u0105tem warto\u015bci null. Bez tego, funkcja <code>Wyj\u0105tek NullPointerException<\/code> jest rzucany.<\/p>\n\n\n\n<p>Inn\u0105 rzecz\u0105 jest przekazanie <code>null<\/code> warto\u015b\u0107. Dlaczego w og\u00f3le o tym pomy\u015bla\u0142e\u015b? W takim przypadku funkcja musi wykona\u0107 sprawdzenie warto\u015bci null. Kiedy korzystasz z bibliotek innych firm, nie mo\u017cesz zmieni\u0107 wn\u0119trza funkcji. Co wtedy?<\/p>\n\n\n\n<p>Co wa\u017cniejsze, inni programi\u015bci, kt\u00f3rzy czytaj\u0105 tw\u00f3j kod i widz\u0105, \u017ce przekazujesz <code>null<\/code> prawdopodobnie b\u0119dzie zdezorientowany, dlaczego wybra\u0142e\u015b tak dziwaczny spos\u00f3b implementacji swojej funkcji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Nie zwracaj warto\u015bci <code>null<\/code> warto\u015b\u0107! Nigdy! Je\u015bli twoja funkcja zwraca jaki\u015b typ <code>Kolekcja<\/code>mo\u017cna po prostu zwr\u00f3ci\u0107 pusty <code>Kolekcja<\/code>. Je\u015bli masz do czynienia z pojedynczymi obiektami, mo\u017cesz skorzysta\u0107 z wzorca projektowego obiektu zerowego. Poniewa\u017c <strong>Java<\/strong> 8, jest zaimplementowany jako <code>Opcjonalnie<\/code>. Poza tym, najmniej zalecanym podej\u015bciem jest podniesienie <code>Wyj\u0105tek<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Ci\u0119\u017ckie \u0142\u0105czenie ci\u0105g\u00f3w<\/h2>\n\n\n\n<p>Miejmy nadziej\u0119, \u017ce nie pope\u0142nisz tego b\u0142\u0119du, poniewa\u017c jest to najpopularniejsze (a mo\u017ce drugie po FizzBuzz) pytanie na rozmowie kwalifikacyjnej. Jak powiniene\u015b ju\u017c wiedzie\u0107, a <code>String<\/code> jest niezmienny w <strong>Java<\/strong> - raz utworzony, nie mo\u017ce by\u0107 modyfikowany. Tak wi\u0119c konkatenacja <code>String<\/code> litera\u0142\u00f3w oznacza du\u017co niepotrzebnej alokacji pami\u0119ci. \u0141\u0105czenie <code>String<\/code> obiekt\u00f3w za ka\u017cdym razem wymaga utworzenia tymczasowego <code>StringBuilder<\/code> i zmieniaj\u0105c go z powrotem na ci\u0105g znak\u00f3w. Z tego powodu rozwi\u0105zanie to absolutnie nie nadaje si\u0119 do \u0142\u0105czenia du\u017cej liczby znak\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Aby rozwi\u0105za\u0107 ten problem, u\u017cyj <code>StringBuilder<\/code>. Tworzy to zmienny obiekt, kt\u00f3rym mo\u017cna \u0142atwo manipulowa\u0107. Oczywi\u015bcie zawsze mo\u017cna u\u017cy\u0107 <code>StringBuffer<\/code> je\u015bli <a href=\"https:\/\/thecodest.co\/pl\/dictionary\/why-do-projects-fail\/\">projekt<\/a> jest u\u017cywana w kontek\u015bcie wsp\u00f3\u0142bie\u017cnym.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Nieu\u017cywanie istniej\u0105cych rozwi\u0105za\u0144<\/h2>\n\n\n\n<p>Podczas tworzenia oprogramowania poznanie podstaw j\u0119zyka, w kt\u00f3rym piszemy, jest konieczno\u015bci\u0105, ale nie jest wystarczaj\u0105ce. Wiele problem\u00f3w algorytmicznych, na kt\u00f3re natkn\u0105\u0142e\u015b si\u0119 podczas implementacji nowej funkcji, zosta\u0142o ju\u017c rozwi\u0105zanych przez kogo\u015b innego. Zbyt wiele razy widzia\u0142em, jak kto\u015b implementowa\u0142 algorytm bezpiecze\u0144stwa od zera. Takie podej\u015bcie jest podatne na b\u0142\u0119dy. Jedna osoba nie jest w stanie dok\u0142adnie przetestowa\u0107 tak z\u0142o\u017conego rozwi\u0105zania. Zbiorowa wiedza ca\u0142ego zespo\u0142u <a href=\"https:\/\/thecodest.co\/pl\/dictionary\/how-to-lead-software-development-team\/\">zesp\u00f3\u0142<\/a> kt\u00f3ra sk\u0142ada si\u0119 z \u015brednio zaawansowanych programist\u00f3w jest prawie zawsze lepsza ni\u017c wielko\u015b\u0107 jednego cudownego dziecka <strong><a href=\"https:\/\/thecodest.co\/pl\/dictionary\/java-developer\/\">Programista Java<\/a><\/strong>. Nie ma potrzeby wymy\u015blania ko\u0142a na nowo - wystarczy dostosowa\u0107 istniej\u0105ce rozwi\u0105zanie do swoich potrzeb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Spr\u00f3buj wyszuka\u0107 biblioteki, kt\u00f3re zajmuj\u0105 si\u0119 problemem, nad kt\u00f3rym pracujesz. Spr\u00f3buj znale\u017a\u0107 podobne rozwi\u0105zania. Wiele bibliotek dost\u0119pnych na stronie <a href=\"https:\/\/thecodest.co\/pl\/blog\/find-your-ideal-stack-for-web-development\/\">sie\u0107<\/a> s\u0105 darmowe i zosta\u0142y dopracowane i przetestowane przez do\u015bwiadczonych programist\u00f3w i ca\u0142\u0105 spo\u0142eczno\u015b\u0107 Java. Nie b\u00f3j si\u0119 z nich korzysta\u0107.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Brak czasu na pisanie test\u00f3w<\/h2>\n\n\n\n<p>Kusz\u0105ce jest przekonanie, \u017ce nasz kod zawsze b\u0119dzie dzia\u0142a\u0142 idealnie. Niepisanie test\u00f3w dla kodu jest najgorszym grzechem <strong>Java <a href=\"https:\/\/thecodest.co\/pl\/blog\/hire-software-developers\/\">programi\u015bci<\/a><\/strong>. Wiele z <a href=\"https:\/\/thecodest.co\/pl\/blog\/why-us-companies-are-opting-for-polish-developers\/\">my<\/a> preferuj\u0105 testy manualne i eksploracyjne zamiast test\u00f3w jednostkowych, co jest szalone.  Po co marnowa\u0107 czas na pisanie test\u00f3w, skoro mo\u017cna skupi\u0107 si\u0119 na dostarczaniu najlepszego na \u015bwiecie kodu dla swojego projektu, kt\u00f3ry DEFINITYWNIE nie zawiera b\u0142\u0119d\u00f3w? Okazuje si\u0119, \u017ce rzeczywisto\u015b\u0107 jest brutalna i nie mo\u017cemy dostarczy\u0107 wysokiej jako\u015bci kodu bez pisania test\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Powiniene\u015b zawsze przygotowywa\u0107 testy dla swojego kodu. Wiem, \u017ce podej\u015bcie TDD nie jest \u0142atwe w utrzymaniu, ale powiniene\u015b przynajmniej zapewni\u0107 testy, kt\u00f3re obejmuj\u0105 wszystkie warunki, w kt\u00f3rych tw\u00f3j kod mo\u017ce zosta\u0107 uruchomiony. Obejmuje to testowanie wyj\u0105tkowych sytuacji. Testy jednostkowe s\u0105 niezb\u0119dne. Musisz zapewni\u0107 je dla ka\u017cdej funkcji twojego projektu, je\u015bli chcesz mie\u0107 pewno\u015b\u0107, \u017ce tw\u00f3j kod jest \u0142atwy do refaktoryzacji i rozszerzenia w dalszym rozwoju.&nbsp;<\/p>\n\n\n\n<p>Jeszcze jedno. Utrzymuj wysoki standard kodu testowego - b\u0119dzie warto. To rada wujka Boba i ca\u0142kowicie si\u0119 z ni\u0105 zgadzam.<\/p>\n\n\n\n<p>Co wi\u0119cej, nie nale\u017cy zapomina\u0107 o innych rodzajach test\u00f3w. Testy integracyjne to rzecz, kt\u00f3r\u0105 nale\u017cy rozwa\u017cy\u0107 w ka\u017cdym projekcie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Zapominanie o modyfikatorach dost\u0119pu<\/h2>\n\n\n\n<p>Prywatne i publiczne, prawda? Jak mo\u017cemy o nich zapomnie\u0107. Okazuje si\u0119, \u017ce jest ich wi\u0119cej. Kiedy po raz pierwszy zacz\u0105\u0142e\u015b si\u0119 uczy\u0107 <strong>Java<\/strong>na pewno dowiedzia\u0142e\u015b si\u0119 o modyfikatorach dost\u0119pu chronionego. Mog\u0105 one by\u0107 przydatne w niekt\u00f3rych przypadkach, wi\u0119c warto wiedzie\u0107 o ich istnieniu.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/pl\/blog\/the-right-way-to-find-top-java-developers\/\">Programi\u015bci Java<\/a><\/strong> cz\u0119sto zdaj\u0105 si\u0119 zapomina\u0107 o zakresie pakietu. \u0141atwo jest nie pami\u0119ta\u0107 o korzystaniu z niego, poniewa\u017c jest on niejawny i nie wymaga \u017cadnego <strong>Java<\/strong> s\u0142owa kluczowe. Zakres pakietu jest wa\u017cny. Umo\u017cliwia on testowanie metod chronionych. Elementy chronione s\u0105 dost\u0119pne ze \u015bcie\u017cki klasy testowej, o ile pakiet jest taki sam.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>Pami\u0119taj o modyfikatorze protected i o tym, \u017ce zakres pakietu pozwala na jego testowanie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. U\u017cywanie czystej JavaEE zamiast Spring<\/h2>\n\n\n\n<p>Nast\u0119pny krok po nauce <strong>Java<\/strong> SE ma nauczy\u0107 si\u0119 dzia\u0142a\u0107 <strong>Java<\/strong> na serwerach, jak stworzy\u0107 aplikacj\u0119 klasy korporacyjnej.<\/p>\n\n\n\n<p>Nowicjusze cz\u0119sto wpadaj\u0105 w pu\u0142apk\u0119 nauki JavaEE, poniewa\u017c istnieje ogromna liczba samouczk\u00f3w na ten temat. Nawet \"Thinking in Java\", ksi\u0105\u017cka <strong>Programi\u015bci Java<\/strong>', wspomina o JavaEE i nie m\u00f3wi nic o innych opcjach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak mog\u0119 tego unikn\u0105\u0107?<\/h3>\n\n\n\n<p>JavaEE to pie\u015b\u0144 przesz\u0142o\u015bci. W dzisiejszych czasach Spring jest czym\u015b oczywistym, a Java EE po prostu mi\u0142o jest mie\u0107. Ka\u017cda nowoczesna aplikacja na poziomie przedsi\u0119biorstwa korzysta ze Springa, wi\u0119c powiniene\u015b zdecydowanie rozwa\u017cy\u0107 nauk\u0119 <a href=\"https:\/\/spring.io\/guides\">tutaj<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/calendly.com\/the-codest-java-consulting\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/meeting_java_expert.png\" alt=\"Poznaj eksperta Java\"\/><\/a><\/figure>\n\n\n\n<p><strong>Czytaj wi\u0119cej:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/the-right-way-to-find-top-java-developers\">W\u0142a\u015bciwy spos\u00f3b na znalezienie najlepszych programist\u00f3w Java<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/the-best-type-of-projects-for-java\">Najlepsze rodzaje projekt\u00f3w dla Javy<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/top-programming-languages-for-fintech-companies\">Najlepsze j\u0119zyki programowania dla firm Fintech<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Jakich b\u0142\u0119d\u00f3w nale\u017cy unika\u0107 podczas programowania w Javie? W poni\u017cszym artykule odpowiemy na to pytanie.<\/p>","protected":false},"author":2,"featured_media":3005,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[15,8],"tags":[],"class_list":["post-3004","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fintech","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>9 Mistakes to Avoid While Programming in Java - The Codest<\/title>\n<meta name=\"description\" content=\"Explore 9 Java coding mistakes developers should avoid to improve code quality, security, and performance in modern Java applications.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/pl\/blog\/9-bledow-ktorych-nalezy-unikac-podczas-programowania-w-jezyku-java\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"9 Mistakes to Avoid While Programming in Java\" \/>\n<meta property=\"og:description\" content=\"Explore 9 Java coding mistakes developers should avoid to improve code quality, security, and performance in modern Java applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/pl\/blog\/9-bledow-ktorych-nalezy-unikac-podczas-programowania-w-jezyku-java\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-08T11:25:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-09T13:13:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"9 Mistakes to Avoid While Programming in Java\",\"datePublished\":\"2022-07-08T11:25:57+00:00\",\"dateModified\":\"2026-03-09T13:13:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/\"},\"wordCount\":1643,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/9_mistakes_to_avoid_while_programming_in_java.png\",\"articleSection\":[\"Fintech\",\"Software Development\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/\",\"name\":\"9 Mistakes to Avoid While Programming in Java - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/9_mistakes_to_avoid_while_programming_in_java.png\",\"datePublished\":\"2022-07-08T11:25:57+00:00\",\"dateModified\":\"2026-03-09T13:13:14+00:00\",\"description\":\"Explore 9 Java coding mistakes developers should avoid to improve code quality, security, and performance in modern Java applications.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/9_mistakes_to_avoid_while_programming_in_java.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/9_mistakes_to_avoid_while_programming_in_java.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/9-mistakes-to-avoid-while-programming-in-java\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"9 Mistakes to Avoid While Programming in Java\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/pl\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"9 b\u0142\u0119d\u00f3w, kt\u00f3rych nale\u017cy unika\u0107 podczas programowania w Javie - The Codest","description":"Poznaj 9 b\u0142\u0119d\u00f3w w kodowaniu Java, kt\u00f3rych programi\u015bci powinni unika\u0107, aby poprawi\u0107 jako\u015b\u0107 kodu, bezpiecze\u0144stwo i wydajno\u015b\u0107 nowoczesnych aplikacji Java.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/pl\/blog\/9-bledow-ktorych-nalezy-unikac-podczas-programowania-w-jezyku-java\/","og_locale":"pl_PL","og_type":"article","og_title":"9 Mistakes to Avoid While Programming in Java","og_description":"Explore 9 Java coding mistakes developers should avoid to improve code quality, security, and performance in modern Java applications.","og_url":"https:\/\/thecodest.co\/pl\/blog\/9-bledow-ktorych-nalezy-unikac-podczas-programowania-w-jezyku-java\/","og_site_name":"The Codest","article_published_time":"2022-07-08T11:25:57+00:00","article_modified_time":"2026-03-09T13:13:14+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"8 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"9 Mistakes to Avoid While Programming in Java","datePublished":"2022-07-08T11:25:57+00:00","dateModified":"2026-03-09T13:13:14+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/"},"wordCount":1643,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png","articleSection":["Fintech","Software Development"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/","url":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/","name":"9 b\u0142\u0119d\u00f3w, kt\u00f3rych nale\u017cy unika\u0107 podczas programowania w Javie - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png","datePublished":"2022-07-08T11:25:57+00:00","dateModified":"2026-03-09T13:13:14+00:00","description":"Poznaj 9 b\u0142\u0119d\u00f3w w kodowaniu Java, kt\u00f3rych programi\u015bci powinni unika\u0107, aby poprawi\u0107 jako\u015b\u0107 kodu, bezpiecze\u0144stwo i wydajno\u015b\u0107 nowoczesnych aplikacji Java.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/9_mistakes_to_avoid_while_programming_in_java.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/9-mistakes-to-avoid-while-programming-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"9 Mistakes to Avoid While Programming in Java"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/pl\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/comments?post=3004"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3004\/revisions"}],"predecessor-version":[{"id":7701,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/posts\/3004\/revisions\/7701"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/media\/3005"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/media?parent=3004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/categories?post=3004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/pl\/wp-json\/wp\/v2\/tags?post=3004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}