CodeGym/Java blog/Tilfældig/Sidder fast? De sværeste dele af at lære Java og hvordan ...
John Squirrels
Niveau
San Francisco

Sidder fast? De sværeste dele af at lære Java og hvordan man overvinder dem

Udgivet i gruppen
Som du ved, anbefaler vi at kode begyndere til at begynde at lære programmeringssprog med Java, og CodeGym har alt for at gøre processen med at lære Java fordøjelig selv for de mest uforberedte elever. Men lige så meget som gamification-elementer, afslappet historie og sjove karakterer hjælper med at lette denne proces, er det sjældent uden udfordringer for de fleste nye elever at lære det grundlæggende i Java fuldt ud. Sidder fast?  De sværeste dele af at lære Java og hvordan man overvinder dem - 1I dag skal vi tage et kig på nogle af de hårdeste områder inden for Java-programmering, og prøve at forstå, hvorfor mange mennesker finder dem vanskelige, og om der er noget for dig at gøre ved det.

1. Generiske lægemidler

Generiske i Java er typer, der har en parameter. Når du opretter en generisk type, angiver du ikke kun en type, men også den datatype, den vil arbejde med. Generiske stoffer nævnes ofte af Java-elever som en af ​​de sværeste dele af Java for dem at forstå. "Mit hovedproblem er stadig at beskæftige sig med Generics. Det er meget nemmere, når du har metoder med parametre at følge, men det bliver forvirrende, når du skal skrive dine egne,” sagde en anonym Java-lærer.

Tips og anbefalinger

Her er en mening om Generics i Java fra Ravi Reddy, en erfaren programmør og universitetsprofessor: “Java Generics gør én ting, som C++-skabeloner ikke gør – implementer typesikkerhed. Implementeringen af ​​C++-skabeloner er et simpelt pre-processor-trick og sikrer ikke typesikkerhed. Generics i Java er som C++-skabeloner, men med ekstra typesikkerhed. Og IMHO, typesikkerhed er en væsentlig del af ethvert godt udviklingsmiljø. Og ja! De kan være forvirrende på grund af vores mentale skift mellem parametrene og typerne. Men jeg tror på, at det er besværet værd at bruge tid på at mestre dem. Fordi jeg oplevede, at jeg "tænkte" meget bedre i Java, når jeg først havde forstået grænseflader og Generics."

2. Multithreading

Multithreading i Java er en proces med at udføre to eller flere tråde samtidigt for at opnå maksimal udnyttelse af CPU af applikationen. Multithreading løser meget vigtige opgaver og kan gøre vores programmer hurtigere. Ofte mange gange hurtigere. Men det anses for at være et af de emner, hvor mange friske Java-elever har en tendens til at sidde fast på. Alt sammen fordi multithreading også kan skabe problemer i stedet for at løse dem. Der er to specifikke problemer, som multithreading kan skabe: dødvande og racerforhold. Deadlock er en situation, hvor flere tråde venter på ressourcer, der holdes af hinanden, og ingen af ​​dem kan fortsætte med at køre. En race condition er en designfejl i et multithreaded system eller applikation, hvor driften af ​​systemet eller applikationen afhænger af den rækkefølge, som dele af koden udføres i.

Tips og anbefalinger

Her er en god anbefalingom, hvordan man håndterer multithreading fra S.Lott, en softwarearkitekt og aktiv bruger af StackExchange, et populært Q&A-websted: “Multi-threading er enkelt. At kode en applikation til multi-threading er meget, meget nemt. Der er et simpelt trick, og det er at bruge en veldesignet beskedkø (rull ikke din egen) til at sende data mellem tråde. Den svære del er at prøve at få flere tråde til på magisk vis at opdatere et delt objekt på en eller anden måde. Det er, når det bliver udsat for fejl, fordi folk ikke er opmærksomme på de raceforhold, der er til stede. Mange mennesker bruger ikke beskedkøer og forsøger at opdatere delte objekter og skabe problemer for sig selv. Det, der bliver svært, er at designe en algoritme, der fungerer godt, når data sendes mellem flere køer. Det er svært.

3. Klassestiproblemer

Klassestifejl anses også for at være et af de mest klagede problemer, som Java-udviklere står over for i deres daglige arbejde. "Klassestiproblemer kan være tidskrævende at fejle og har tendens til at ske på de værst tænkelige tidspunkter og steder: før udgivelser og ofte i miljøer, hvor der er ringe eller ingen adgang for udviklingsteamet. De kan også ske på IDE-niveau og blive en kilde til reduceret produktivitet,” siger Vasco Ferreira, en erfaren Java/Javascript-udvikler og forfatter til programmeringsrelaterede tutorials.

Tips og anbefalinger

"Klassestiproblemer er ikke så lavt niveau eller utilnærmelige, som de måske ser ud i starten. Det handler om, at zip-filer (jars) er til stede/ikke er til stede i bestemte mapper, hvordan man finder disse mapper, og hvordan man fejlretter klassestien i miljøer med begrænset adgang. Ved at kende et begrænset sæt begreber såsom klasselæssere, klasselæsserkæden og forældrenes første/sidste tilstande, kan disse problemer tackles effektivt,” forklarer eksperten.

4. Polymorfi og korrekt brug

Når det kommer til principper for OOP, siger mange mennesker, at de havde svært ved at forstå polymorfi. Polymorfi er et programs evne til at behandle objekter med samme grænseflade på samme måde uden information om objektets specifikke type. På trods af at polymorfi er et ganske grundlæggende emne, er det ret omfattende og udgør en god del af Javas fundament. For mange studerende er polymorfi en første vanskelighed ved at lære Java. Alt sammen fordi der er forskellige former for polymorfi brugt i forskellige sammenhænge, ​​hvilket kan være forvirrende.

Tips og anbefalinger

Der er ingen anden måde at håndtere polymorfi på end at lære det. Sådan forklarer Torben Mogensen, der underviser i programmering på Københavns Universitetdette koncept: “Simpel overbelastning: + kan betyde både heltalsaddition, flydende kommaaddition og (på nogle sprog) strengsammenkædning. Subtype polymorfi: Hvis B er en undertype af (arver fra) A, kan enhver værdi af type B bruges i en kontekst, der forventer en værdi af type A. Parametrisk polymorfi: En type kan parametriseres med type parametre, sådan at du i forskellige kontekster kan levere forskellige typeargumenter, så du instansierer den parametriserede type til forskellige konkrete typer. Dette kaldes også "skabeloner" eller "generiske" og er på OO-sprog typisk angivet ved hjælp af vinkelparenteser (såsom T<A>). Interface polymorfi. Dette er dybest set en mekanisme, hvor du begrænser subtypepolymorfi til undertyper, der implementerer en bestemt grænseflade eller parametrisk polymorfi til typeparametre, der implementerer en bestemt grænseflade."

5. Refleksion

Refleksion er en mekanisme til at udforske data om et program, mens det kører. Reflektion lader dig udforske information om felter, metoder og klassekonstruktører. Det giver dig også mulighed for at arbejde med typer, der ikke var til stede på kompileringstidspunktet, men som blev tilgængelige under kørselstiden. Refleksion og en logisk konsistent model for udstedelse af fejlinformation gør det muligt at skabe korrekt dynamisk kode. Men for mange mennesker er det ikke så let at finde ud af, hvordan man bruger Reflection.

Tips og anbefalinger

“I tilfælde af refleksion og Java tillader refleksion at Java, som er designet til at være statisk indtastet, kan skrives dynamisk. Dynamisk skrivning er ikke i sig selv ondt. Ja, det giver programmøren mulighed for at bryde visse OOP-principper, men samtidig tillader det mange kraftfulde funktioner som runtime proxying og afhængighedsinjektion. Ja, Java lader dig skyde dig selv i foden ved hjælp af refleksion. Du skal dog meget eksplicit pege pistolen mod din fod, tage sikkerheden af ​​og trykke på aftrækkeren,” forklarer Jayesh Lalwani, en erfaren Java-programmør og applikationsarkitekt.

6. Input/output streams

Streams giver dig mulighed for at arbejde med enhver datakilde: Internettet, din computers filsystem eller noget andet. Streams er et universelt værktøj. De tillader et program at modtage data fra hvor som helst (input-strømme) og sende dem hvor som helst (outputstrømme). Deres opgave er den samme: at tage data fra ét sted og sende dem til et andet. Der er to typer strømme: inputstrømme (bruges til at modtage data) og outputstrømme (til afsendelse af data). Det, der gør det svært for mange mennesker at forstå brugen af ​​streams, er det faktum, at Java har flere I/O-streamklasser.

Tips og anbefalinger

"Java har så mange I/O-streamklasser, primært på grund af to medvirkende faktorer. Først er arv. Nogle klasser er der stadig af historiske årsager, og de er ikke forældet, da de ikke anses for at være skadelige. For det andet fleksibilitet. Forskellige applikationer har forskellige krav, og du har derfor flere muligheder afhængigt af dine krav. Nyttige abstraktioner giver klarhed, når du læser det, og med få linjer kode kan du gøre meget,” siger Jonas Mellin, en Java-ekspert fra Sverige. Hvilke aspekter af Java fandt du de sværeste at forstå, eller har du siddet fast i et stykke tid? Del dine oplevelser i kommentarerne.
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu