The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2022-07-08
Vývoj softwaru

9 chyb, kterých se vyvarujte při programování v jazyce Java

The Codest

Rafal Sawicki

Vývojář v jazyce Java

Jakých chyb byste se měli vyvarovat při programování v jazyce Java? V následujícím díle na tuto otázku odpovíme.

Java je oblíbený jazyk s pevnou pozicí ve světě. vývoj softwaru. Je to silný a všestranný programovací jazyk. Přibližně 3 miliardy zařízení po celém světě běží na Java a proto se při jeho používání udělaly nejméně 3 miliardy chyb. V tomto článku se zaměříme na to, jak nedělat další.

1. Získání výjimky pro souběžnou modifikaci

To je zdaleka nejčastější chyba, se kterou jsem se setkal. V počátcích své kariéry jsem ji udělal také mnohokrát. K této chybě dochází, když se snažíte upravit kolekci v průběhu iterace. Na adrese ConcurrentModificationException může být také vyvolán při práci s více vlákny, ale nyní se zaměříme na základní scénář.

Předpokládejme, že máte Sbírka uživatelů, z nichž někteří jsou dospělí a někteří ne. Vaším úkolem je odfiltrovat děti.

for (User : users) {

   if (!user.isAdult()) {

       users.remove(uživatel);

   }

}

Spuštění výše uvedeného kód končí získáním ConcurrentModificationException. Kde jsme udělali chybu? Před dokončením iterace jsme se pokusili odstranit některé prvky. To vyvolalo výjimku.

Jak se tomu mohu vyhnout?

V takovém případě může pomoci několik přístupů. V první řadě využijte Java 8's goodness - Stream.

List adults = users.stream()

       .filter(User::isAdult)

       .toList();

Použití Predikát filtru jsme provedli obrácenou funkci než u předchozí podmínky - nyní určujeme prvky, které mají být zahrnuty. Výhodou takového přístupu je, že po odstranění lze snadno řetězit další funkce, např. mapa. Ale proboha. prosím, nepokoušejte se dělat něco podobného jako níže:

users.stream()

       .filter(v -> !v.isAdult())

       .forEach(users::remove);

Mohl by také skončit v ConcurrentModificationException protože upravujete zdroj proudu. Může to také způsobit další výjimky, které nebude snadné odladit.

Vyřešit ConcurrentModificationException v jednovláknovém scénáři. můžete také přejít na přímé použití Iterátor a jeho remove() nebo můžete jednoduše prvky během iterace neodstraňovat. Doporučuji však použít Proudy - je rok 2022.

2. Ukládání hesel jako řetězců

Protože se stále více zabývám kybernetickou bezpečností, nebyl bych k sobě upřímný, kdybych se nezmínil alespoň o jedné z nich. Chyba v jazyce Java což může vést k problému se zabezpečením. Ukládání hesel přijatých od uživatelů do Řetězec objekt je přesně to, čeho byste se měli bát.

Problém (nebo možná výhoda) Řetězec je, že je neměnný. V kybernetickém světě to představuje potenciální hrozbu, protože nelze vymazat hodnotu jednou vytvořeného souboru. Řetězec objekt. Útočník, který získá přístup do paměti počítače, v ní může najít hesla v prostém textu.

Za druhé, řetězce v Java jsou internetizovány JVM a uloženy v prostoru PermGen nebo v prostoru haldy. Při vytváření Řetězec objekt se uloží do mezipaměti a odstraní se teprve tehdy, když Garbage Collector začne vykonávat svou práci. Nemůžete si být jisti, kdy bude heslo z fondu řetězců odstraněno, protože Garbage Collector pracuje nedeterministicky.

Jak se tomu vyhnout?

Doporučený postup je použít char[] nebo ještě lépe knihovnu, která podporuje ukládání hesel jako char[], např.Password4j. Na stránkách . char[] pole je proměnlivé a lze jej po inicializaci upravovat. Po zpracování hesla stačí vymazat pole char[] pole hesel tím, že do něj zapíše náhodné znaky. V případě, že útočníci získají přístup do paměti počítače, uvidí pouze některé náhodné hodnoty, které nemají s hesly uživatelů nic společného.

3. (Ne)zpracování výjimek

Nováčci, ale i pokročilejší programátoři nevědí, jak správně zacházet s výjimkami. Jejich hlavním prohřeškem je, že je prostě ignorují. TO NIKDY NENÍ DOBRÝ PŘÍSTUP.

Bohužel vám nemůžeme nabídnout stříbrné řešení, které by se hodilo pro každého. Výjimkas' scénář, na který narazíte. Musíte se zamyslet nad každým případem zvlášť. Můžeme vám však poradit, jak s tímto tématem začít.

Jak se tomu mohu vyhnout?

  1. Ignorování Výjimkas není nikdy dobrý postup. Výjimkajsou zde z nějakého důvodu, takže byste je neměli ignorovat.

  2. try {...} catch(Výjimka e) { log(e); } je zřídkakdy správný přístup k Výjimka manipulace.

  3. Rethrow Výjimka, zobrazit uživateli dialogové okno s chybou nebo alespoň přidat vyčerpávající zprávu do protokolu.

  4. Pokud jste nechali výjimky neošetřené (což byste neměli), vysvětlete to alespoň v komentáři.

4. Používání nulových hodnot

Bohužel je poměrně běžné, že funkce Javy v některých případech vrací hodnotu null. Problém spočívá v tom, že taková funkce nutí svého klienta, aby u výsledku provedl kontrolu null. Bez ní by NullPointerException se vyhodí.

Další věcí je předání null hodnotu. Proč tě to vůbec napadlo? V takovém případě musí funkce provést kontrolu null. Když používáte knihovny třetích stran, nemůžete měnit vnitřek funkcí. Co tedy?

Ještě důležitější je, že ostatní vývojáři, kteří si přečtou váš kód a uvidí, že předáváte null budou pravděpodobně zmateni, proč jste zvolili tak bizarní způsob implementace funkce.

Jak se tomu mohu vyhnout?

Nevracejte null hodnotu! Nikdy! V případě, že vaše funkce vrací nějaký typ Sbírka, můžete prostě vrátit prázdný Sbírka. Pokud pracujete s jednotlivými objekty, můžete využít návrhový vzor null object. Vzhledem k tomu, že Java 8, je implementován jako Volitelně. Jinak je nejméně doporučovaným přístupem vznesení Výjimka.

5. Těžké spojování řetězců

Doufejme, že to není chyba, kterou děláte, protože je to nejoblíbenější (nebo možná druhá nejoblíbenější po FizzBuzz) otázka při pohovoru. Jak už byste měli vědět, a Řetězec objekt je neměnný v Java - jakmile je jednou vytvořen, nelze jej upravit. Takže spojování Řetězec literálů znamená spoustu zbytečné alokace paměti. Spojování Řetězec objektů pokaždé vyžaduje vytvoření dočasného StringBuilder a změnit jej zpět na řetězec. Proto je toto řešení naprosto nevhodné, pokud chceme kombinovat velké množství znaků.

Jak se tomu mohu vyhnout?

Chcete-li tento problém vyřešit, použijte StringBuilder. Vytváří proměnlivý objekt, se kterým lze snadno manipulovat. Samozřejmě můžete vždy použít StringBuffer pokud váš projekt se používá v souběžném kontextu.

6. Nepoužívání stávajících řešení

Při vývoji softwaru je znalost základů jazyka, ve kterém píšete, nutností, ale nestačí. Mnoho algoritmických problémů, na které jste narazili při implementaci nové funkce, už vyřešil někdo jiný. Příliš často jsem viděl, jak někdo implementuje bezpečnostní algoritmus od nuly. Takový přístup je náchylný k chybám. Jeden člověk nemůže takové složité řešení důkladně otestovat. Kolektivní znalosti tým která se skládá ze středně pokročilých programátorů, je téměř vždy lepší než velikost jednoho zázračného dítěte. Vývojář v jazyce Java. Není třeba znovu vynalézat kolo - stačí přizpůsobit stávající řešení svým potřebám.

Jak se tomu mohu vyhnout?

Zkuste vyhledat knihovny, které se zabývají problémem, na kterém pracujete. Pokuste se najít podobná řešení. Mnoho knihoven, které jsou k dispozici na webu, je zdarma a byly vypilovány a otestovány zkušenými vývojáři a celou komunitou Javy. Nebojte se je využít.

7. Nedostatek času na psaní testů

Je lákavé věřit, že náš kód bude vždy fungovat perfektně. Nenapsání testů pro kód je nejhorší hřích. Java vývojáři softwaru. Mnoho z nich nás upřednostňují manuální a průzkumné testy před jednotkovými testy, což je nesmysl. Proč ztrácet čas psaním testů, když se můžete soustředit na to, aby váš projekt obsahoval ten nejlepší kód na světě, který ROZHODNĚ neobsahuje žádné chyby?&ltjoke>. Ukazuje se, že realita je krutá a bez psaní testů nemůžeme poskytovat kvalitní kód.

Jak se tomu mohu vyhnout?

Pro svůj kód byste měli vždy připravit testy. Vím, že přístup TDD není tak snadný na údržbu, ale měli byste alespoň zajistit testy, které pokryjí všechny podmínky, za kterých může být váš kód spuštěn. To zahrnuje i testování výjimečných situací. Jednotkové testy jsou nezbytné. Musíte je poskytnout pro každou funkci svého projektu, pokud chcete mít jistotu, že váš kód bude snadno refaktorovatelný a rozšiřitelný při dalším vývoji. 

Ještě jedna věc. Udržujte vysoký standard testovacího kódu - vyplatí se to. To je rada strýčka Boba a já s ní naprosto souhlasím.

Kromě toho nezapomínejte na další typy testů. Integrační testy jsou věcí, kterou byste měli zvážit v každém projektu.

8. Zapomínání na modifikátory přístupu

Soukromé a veřejné, že? Jak na ně můžeme zapomenout. Ukázalo se, že jich je víc. Když jste se poprvé začali učit Java, jste se určitě dozvěděli o chráněných modifikátorech přístupu. V některých případech mohou být užitečné, proto se vyplatí o jejich existenci vědět.

Vývojáři v jazyce Java často zapomínají na rozsah balíčku. Je snadné si na jeho použití nevzpomenout, protože je implicitní a nevyžaduje žádný Java klíčová slova. Důležitý je rozsah balíčku. Umožňuje testovat chráněnou metodu. Chráněné položky jsou přístupné z cesty k testovací třídě, pokud je balíček stejný.

Jak se tomu mohu vyhnout?

Nezapomeňte na chráněný modifikátor a na to, že obor balíčku umožňuje jeho testování.

9. Použití čistého JavaEE namísto jara

Další krok po učení Java SE je naučit se provozovat Java na serverech, jak vytvořit aplikaci podnikové úrovně.

Nováčci se často dostávají do pasti, když se učí JavaEE, protože o ní existuje obrovské množství výukových programů. Dokonce i "Myšlení v Javě Programátoři v jazyce Java', zmiňuje JavaEE a neříká nic o jiných možnostech.

Jak se tomu mohu vyhnout?

JavaEE je písní minulosti. V dnešní době se používá Spring a Java EE je jen příjemná věc. Každá moderní aplikace na podnikové úrovni používá Spring, takže byste měli důrazně zvážit, zda se naučit zde.

Seznamte se s odborníkem na Javu

Přečtěte si více:

Správný způsob, jak najít špičkové vývojáře Java

Nejlepší typy projektů pro Javu

Nejlepší programovací jazyky pro fintech společnosti

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech