Viden vs. færdigheder
College lærte os, at der ikke er nogen stor forskel mellem teori og praksis. Nå, du forstår sikkert, at det ikke er det samme. Men du kan ikke se kerneforskellen. Alligevel er der en. De fleste mennesker sætter lighedstegnet mellem "jeg ved" og "jeg kan". Gør du? Hvad med et par eksempler?- Jeg ved godt, at rygning er dårligt for mig, men jeg ryger.
- Jeg ved godt, at fastfood er dårligt for mig, men jeg spiser det.
- Jeg kender færdselsreglerne, men jeg kan ikke køre.
- Jeg ved, at jogging er godt for mig, men jeg jogger ikke om morgenen.
Du har nået et nyt niveau
Niveau 9
1 Risha, Stakspor
- Hej! I dag vil jeg fortælle dig, hvad staksporet er. Men lad mig først forklare dig, hvad stakken er. - Forestil dig en stak papirer - opgaver til en bestemt ekspedient. En ny opgave kan lægges på toppen af stakken, og han vil tage en opgave fra toppen af en stak. Opgaverne udføres således ikke efter først-til-mølle. Hver gang ekspedienten tager den opgave, der kommer sidst. En sådan opsamlingsstruktur kaldes en stak . - I Java er der en særlig samling - Stack. Denne samling har metoderne «tilføj et element» og «tag(få/tag væk) et element». Som du allerede ved, tages det sidst tilføjede element først. - Hum. Det er vel ikke svært. - Bøde. Så lad mig forklare, hvad et stakspor erer. - Forestil dig, at funktionen i Java kalder funktion B , og sidstnævnte kalder funktionen C , som igen kalder funktion D . Så for at afslutte funktion B , skal du først afslutte funktion C , og for at gøre det skal du afslutte funktion D. Dette minder meget om en stak. - Og hvad er ligheden? - I stakken, for at komme til en bestemt opgave, skal du også udføre alle de opgaver, der er lagt ovenpå. - Nå, det er lidt en analogi, men jeg er ikke sikker på, om jeg forstår alt rigtigt. - Se her. I Java er en stak et sæt elementer. Det er som ark papir i en stak. For at tage det tredje fra toppen skal du tage det andet ark, men før det skal du tage det første. Du kan altid lægge og tage ark, men du kan kun lægge dem på toppen og kun tage dem fra toppen. Det samme gælder for funktionskaldet. Funktion А kalder funktion B , sidstnævnte kalder funktion C. For at afslutte А skal du først afslutte B , og for at gøre dette skal du afslutte C. - Vent et øjeblik. Hvis jeg fik det rigtigt, viser hele stakken sig i «kun det sidste ark, der blev lagt på stakken, kan tages» og «først skal den sidst kaldte funktion afsluttes». Er det rigtigt? - Ja. Så rækkefølgen af funktionsopkald er «funktionsopkaldsstakken» eller blot «opkaldsstakken». Funktionen kaldet sidst skal afsluttes først. Lad os se på eksemplet: - OK. Alt er klart med funktionskaldet, tror jeg. Men hvad er dette StackTraceElement ? - Java virtual machine logger alle funktionskaldene. Til dette formål har den en speciel samling - stak. Når en funktion kalder en anden, placerer JVM et nyt element StackTraceElement i denne stak. Når funktionen slutter, slettes elementet fra stakken. Denne stak gemmer således altid opdateret information om den aktuelle tilstand af «funktionsopkaldsstakken». - Hvert StackTraceElementindeholder information om kaldet metode. Så du kan få navnet på denne metode ved at bruge getMethodName . - Eksemplet ovenfor viser det:- Hent «opkaldsstakken»:
- Gentag arrayet ved hjælp af loop for-each . Jeg håber ikke du har glemt det.
- Udskriv metodenavne til System.out .
2 Diego, Task on stack trace display
- Hej, Amigo! Her er en lille opgave til at vise et stakspor på skærmen.Opgaver | |
---|---|
1 | Hver metode skal returnere sin StackTrace Write fem metoder, der kalder hinanden. Hver metode skal returnere sin StackTrace. |
2 | StackTrace igen Skriv fem metoder, der kalder hinanden. Hver metode skal returnere navnet på dens opkaldsmetode. Du kan få opkaldsmetoden ved hjælp af StackTrace. |
3 | Metoden skal returnere linjenummeret på den kode, denne metode blev kaldt fra. Skriv fem metoder, der kalder hinanden. Hver metode skal returnere linjenummeret på den kode, som denne metode blev kaldt fra. Brug funktionen element.getLineNumber() . |
4 | Stakspor på 10 opkald Skriv kode for at få et stakspor på 10 opkald. |
5 | Metoden skal returnere et resultat - dens staksporingsdybde Skriv en metode, der viser og returnerer dens staksporingsdybde. Staksporingsdybde er antallet af dets metoder (antallet af elementer på listen). |
3 Elly, fejl og undtagelser
- Hej, Amigo! I dag har vi en meget interessant lektion. Jeg vil fortælle dig om undtagelser. Undtagelse er en særlig mekanisme til at kontrollere fejl i programmet. Her er nogle eksempler på fejl, der kan opstå i programmet:- Programmet forsøger at skrive en fil til den fulde disk.
- Programmet forsøger at kalde en metode for en variabel, der gemmer nul-referencen.
- Programmet forsøger at dividere et tal med 0.
- Når der opstår en fejl, opretter Java Virtual Machine et særligt objekt – en undtagelse – der indeholder alle oplysninger om fejlen. For forskellige fejl er der forskellige undtagelser.
- Så tvinger denne undtagelse programmet til at afbryde den aktuelle funktion med det samme, og den næste funktion, indtil den afslutter hovedmetoden. Herefter afsluttes programmet. Java-udviklere kalder denne proces «ruller opkaldsstakken tilbage».
- Hvis der opstår en undtagelse inde i try- blokken, udføres koden i denne blok ikke længere, men udførelsen af blok- fangsten starter.
- Hvis der ikke er nogen undtagelse, udføres try-blokken til slutningen , og catch udføres aldrig .
4 Elly, RuntimeException, kaster
- Jeg besluttede at tage et andet emne op i dag. I Java er alle undtagelser opdelt i to typer – kontrolleret/kontrolleret og ukontrolleret/ikke markeret . Markerede undtagelser skal fanges, umarkerede kan fanges, men det er ikke påkrævet . - Er det muligt at smide undtagelser i en kode med vilje? - I din kode kan du selv smide undtagelser. Du kan endda skrive dine egne undtagelser. Men vi kommer dybt ned i dette hul senere. Lad os nu lære, hvordan man arbejder med undtagelserne fra den virtuelle Java-maskine. - OKAY. - Hvis undtagelser ClassNotFoundException og FileNotFoundExceptionkastes (vises) i en metode, skal programmøren angive dem i signaturen af en metode (metodehoved). Sådanne undtagelser kontrolleres. Sådan ser det normalt ud: - Så vi skriver bare kast og lister undtagelser adskilt af kommaer. Højre? Er det rigtigt? - Ja. Men der er en anden interessant ting. For at eksemplet nedenfor er blevet kompileret, skal metoden, der kalder metode1() , enten fange disse undtagelser eller kaste dem frem. Hvis du ønsker at sende markeret undtagelse frem, skal du angive det i metodens header . - Endnu en gang, hvis du er i hovedmetoden , vil du kalde en metode, der har i sin overskriftssætning kaster FileNotFoundException, ...så skal du gøre en af disse to ting:- for at fange undtagelser FileNotFoundException, …
Du bliver nødt til at indpakke koden, hvor du kalder en farlig metode med en try-catch- blok - ikke at fange undtagelser FileNotFoundException, ...
5 Risha, Rulning af opkaldsstakken, hvordan man gør det i undtagelser
- Jeg vil gerne fortælle lidt mere om, hvordan undtagelser fungerer. Eksemplet nedenfor forklarer, at: - Jeg forstår det ikke. - Okay. Jeg vil forklare, hvad der foregår. - I eksemplet til venstre kalder vi flere metoder i kædeorden. I metode2() opretter og kaster vi specifikt en undtagelse (for at starte en fejl). - Eksemplet til højre viser, hvad der sker. Se på metode2() . Det er, hvad oprettelse af en undtagelse forvandles til: vi opretter et objekt af typen RuntimeException , gemmer det i en speciel variabel undtagelse og afslutter straks metoden – return . - I metode1 , efter kaldet af metode2 er der en kontrol,hvis der er en undtagelse eller ej; hvis der er en undtagelse, afsluttes metode1 øjeblikkeligt. Denne kontrol udføres implicit efter at have kaldt hver (!) Java-metode. - Wow! - Nemlig. - I kolonnen til højre i hovedmetoden skrev jeg, hvad der sker, når en undtagelse fanges af try-catch- blokken. Hvis der ikke var nogen undtagelse, fortsætter koden med at køre som planlagt. Hvis der var en undtagelse af typen angivet i catch , så håndterer vi det. - Og hvad betyder throw og instanceof ? - Se på den sidste linje til venstre smid nye RuntimeException(s). På denne måde skaber og kaster vi en undtagelse. Dette er blot et eksempel. Vi vil ikke gøre det indtil videre. - Ved at bruge kommandoen « а instans af B » i højre blok kontrollerer vi, om objektet a har typen B. Det vil sige, om objektet, der er gemt i variablen undtagelse, har typen RuntimeException . Det er et logisk udtryk. - Nå, det bliver lidt klarere.6 Diego, Undtagelsesfangstopgave
- Se her! Onkel Diego kom med få opgaver til at fange til dig. Held og lykke. Jeg tror, du får brug for det. Heh. - Hej, Amigo! Her er nogle interessante undtagelsesfangstopgaver.Fangstopgaver | |
---|---|
1 | 1. Undtagelse ved drift med tal Fang den undtagelse, der opstår, når koden køres: int a = 42 / 0; Vis undtagelsen på skærmen, og angiv dens type |
2 | 2. Undtagelse ved drift med strenge Fang den undtagelse, der opstår, når koden køres: String s = null; String m = s.toLowerCase(); Vis undtagelsen på skærmen, og angiv dens type. |
3 | 3. Undtagelse ved drift med arrays Fang den undtagelse, der opstår, når koden køres: int[] m = new int[2]; m[8] = 5; Vis undtagelsen på skærmen, og angiv dens type. |
4 | 4. Undtagelse ved drift med List-samlinger Fang den undtagelse, der opstår, når koden køres: ArrayList<String> list = new ArrayList<String>(); String s = liste.get(18); Vis undtagelsen på skærmen, og angiv dens type. |
5 | 5. Undtagelse ved drift med kortsamlinger Fang den undtagelse, der opstår, når koden køres: HashMap<String, String> map = new HashMap<String, String>(null); map.put(nul, null); map.remove(nul); Vis undtagelsen på skærmen, og angiv dens type. |
7 Risha, hvordan multiple catch fungerer
- Nu nogle mere interessante foredrag. Jeg holder så meget af at undervise. - Jeg vil gerne fortælle dig, hvordan en multiple catch fungerer. Faktisk er det meget enkelt: Når der opstår en undtagelse i blokforsøget , overføres programafviklingen til den første catch . - Hvis typen, der er angivet i parentes af blokfanget, er den samme som typen af undtagelsesobjektet, starter kodeudførelsen inde i {}. Ellers går vi til næste fangst . Kontrollen gentages der. - Hvis der ikke er flere fangblokke , men undtagelsen ikke er fanget, kastes den frem, og den aktuelle metode afbrydes. - Jeg ser. Denne fangst vil blive udført, hvis type matcher typen af undtagelse. - Ja højre. Egentlig er det lidt mere kompliceret: Pointen er, at klasserne kan arves fra hinanden. Hvis klassen «Ko» er nedarvet fra klassen «Dyr», kan objektet af typen «Ko» ikke kun lagres i en variabel af typen «Ko», men også i en variabel af typen «Dyr» . - Og hvad så? - Da alle undtagelserne er nedarvet fra klasserne Exception eller RuntimeException (som også er nedarvet fra Exception ), kan de alle blive fanget ved hjælp af kommandoerne catch (Exception e) eller catch (RuntimeException e) . - Og hvad så? - Det betyder at,For det første kan du fange enhver undtagelse ved at bruge kommandoen catch(Exception e) . For det andet betyder rækkefølgen af fangblokkene noget . Eksempler: - ArithmeticException , der er resultatet af division med 0, fanges i den anden catch. - I eksemplet nedenfor er ArithmeticException fanget i den første catch , fordi klasser af alle undtagelserne er nedarvet fra Exception. Så Undtagelse fanger enhver undtagelse . - I eksemplet nedenfor er undtagelsen ArithmeticException ikke fanget, men kastet videre til kaldemetoden. - Nå, det bliver mere klart nu. Disse undtagelser er ikke så lette. - Det ser kun sådan ud. Faktisk er det en af de enkleste ting i Java. - Jeg er i tvivl om jeg skal være glad eller ked af det...8 Diego, Flere undtagelsesfangstopgaver
- Hej, Amigo! I går blev jeg fuld og overkomplicerede dine opgaver, men jeg håber, at der ikke er nogle hårde følelser fra din side, og at du vil løse dem alle? Det er for dit eget bedste. Her:Opgaver | |
---|---|
1 | 1. Undtagelser Der er en metode, der kaster to undtagelser nedarvet fra Exception , og de to andre arvet fra RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException og URISyntaxException . Du skal fange NullPointerException og FileNotFoundException , men ikke for at fange ArithmeticException og URISyntaxException . Hvordan gør man det? |
2 | 2. Fange undtagelser Der er tre undtagelser arvet sekventielt fra Undtagelse : klasse Undtagelse1 udvider Undtagelsesklasse Undtagelse2 udvider Undtagelse1 klasse Undtagelse3 udvider Undtagelse2 Der er en metode, som beskrives som følger: offentlig statisk void metode1() kaster Undtagelse1, Undtagelse2, Undtagelse3 Skriv en fangst blok for at fange alle de tre Undtagelse1 , Undtagelse2 og Undtagelse3 |
3 | 3. Indfangning af selektive undtagelser 1. Find ud af, hvilke undtagelser der fremkommer af metoden BEAN.methodThrowExceptions . 2. Metoden processExceptions() skal kalde metoden BEAN.methodThrowExceptions og håndtere undtagelser: 2.1. hvis en undtagelse FileSystemException opstår, så log den ved at kalde metoden BEAN.log og smid frem 2.2. hvis der opstår en undtagelse CharConversionException eller en anden IOException , skal du blot logge den ved at kalde metoden BEAN.log 3. Tilføj klassen/typen for den undtagelse, du videresender i 2.1. til processExceptions()metode signatur. 4. Håndter den resterende undtagelse i metoden main() og log den. Brug try..catch Tip: Hvis du fangede undtagelsen MyException , som du ikke ville fange, kan du smide den frem ved hjælp af følgende kode: catch (MyException e) { throw e; } |
4 | 4. Indfangning af kontrollerede undtagelser Håndter alle de kontrollerede undtagelser i metoden processExceptions() . Du skal vise hver kontrolleret undtagelse, der er opstået, på skærmen. Du må kun bruge ét blokforsøg . |
5 | 5. Indfangning af umarkerede undtagelser Håndter alle umarkerede undtagelser i metoden processExceptions() . Du skal vise et stakspor på skærmen af hver opstået undtagelse ved hjælp af metoden printStack() . Du må kun bruge ét blokforsøg . |
9 Professor, Foredrag om undtagelser
- I dag har vi et superinteressant emne - undtagelser. På det tidspunkt, hvor unge videnskabsmænd og programmører var dybt begejstrede for dette emne... - Undskyld, jeg må gå til laboratoriet. Her er forelæsningsnotater. Jeg tror, du vil finde ud af det selv. Her: Java Exceptions (Oracle Documentation) Exception Handling i Java (Java T point) Java - Exceptions Handling (tutorials point) Basic Java Exception Handling10 Julio
- Amigo, hvad synes du om dagens lektion? Har din positron hjerne ikke fungeret endnu? Diegos opgaver er nok til at slide enhver. Lad os få en ølstund og slappe af. Står du stadig?11 kaptajn egern
- Hej, soldat! - Godmorgen hr! - Jeg har nogle fantastiske nyheder til dig. Her er et hurtigt tjek for at styrke dine færdigheder. Gør det hver dag, og du vil hurtigt forbedre dine færdigheder. Opgaver er specielt designet til at udføre i Intellij IDEA.Yderligere opgaver at udføre i Intellij Idea | |
---|---|
1 | 1. Division med nul Opret en metode public static void divisionByZero() , hvor du skal dividere et hvilket som helst tal med nul, og vise resultatet af divisionen på skærmen. Pak divisionByZero() -metodekaldet ind i et try..catch . Vis undtagelsesstacksporingen på skærmen ved hjælp af metoden exception.printStackTrace() . |
2 | 2. Nedtælling fra 10 til 0 Skriv en løkke til nedtælling fra 10 til 0. Brug Thread.sleep(100) til at lave en forsinkelse; Pak søvnopkaldet ind i et forsøg..fangst . |
3 | 3. Pak en metode ind i en try..catch Læs tal fra tastaturet. Skriv en kode til at læse tal fra tastaturet til en separat metode readData() . Pak hele denne metodes krop (hele koden inde i readData()- metoden, undtagen erklæringen af listen, hvor tallene vil blive gemt) i en try..catch . Hvis brugeren indtaster noget tekst i stedet for at indtaste et tal, skal metoden fange undtagelsen og vise alle de tal, der er indtastet før, på skærmen. Vis tal på skærmen. Hvert tal skal stå på en ny linje. Rækkefølgen af numre skal være ligesom den var i input. |
4 | 4. Datokonverter Læs fra tastaturet en dato i formatet «18/08/2013» Vis den dato på skærmen i form af «18. AUG 2013». Brug objekterne Dato og SimpleDateFormat . |
5 | 5. Vokaler og konsonanter Skriv et program, der læser linje fra tastaturet. Programmet skal vise to strenge på skærmen: 1) den første streng skal indeholde vokaler 2) den anden streng skal indeholde konsonanter og tegnsætningstegn fra den indtastede tekst. Adskil tegn med mellemrum. Eksempel input: Stop look listen Eksempel output: oooie stplklstn |
6 | 6. Fortællingen om Den Lille Rødhætte 1. Der er fem klasser: Rødhætte, bedstemor, patty, skovhugger, ulv. 2. Hver klasse har to felter af typen ArrayList : dræbt og spist. 3. Nødvendige genstande er allerede skabt (hætte, bedstemor, ...). 4. Skab det korrekte forhold (hvem spiste og dræbte hvem) for at få logikken bag «Rødhætten». |
7 | 7. Flyt statiske modificerer Flyt statiske modifikatorer, så koden kompileres. |
8 | 8. Liste over arrays af tal Opret en liste, hvis elementer er arrays af tal. Tilføj til listen fem objektarrays med længden henholdsvis 5, 2, 4, 7, 0. Fyld arrays med alle data og vis dem på skærmen. |
9 | 9. Ti katte Opret en klassekat med et felt Strengnavn . Opret en ordbog Kort<String, Cat> , tilføj 10 katte på modellen «Navn» - «Kat». Få et sæt navne fra kortet , og vis sættet på skærmen. |
Bonus opgaver | |
---|---|
1 | 1. Programmet kompilerer og kører ikke. Lav det. Opgave: Programmet skal læse to filnavne fra tastaturet og kopiere den første fil til den placering, der er angivet med det andet navn. |
2 | 2. Tilføj ny funktionalitet til programmet. Gammel opgave: Programmet skal læse to filnavne fra tastaturet og kopiere den første fil til den placering, der er angivet med det andet navn. Ny opgave: Programmet skal læse to filnavne fra tastaturet og kopiere den første fil til den placering, der er angivet med det andet navn. Hvis filen (der skal kopieres) med det angivne navn ikke eksisterer, skal programmet vise meddelelsen «Filen findes ikke» på skærmen og prøve at læse filnavnet fra konsollen igen, før du læser filen navnet på den anden (destination) fil. |
3 | 3. At lære og praktisere algoritme. Læs listen over ord og tal fra tastaturet. Vis på skærmen ord i stigende rækkefølge og tallene i faldende rækkefølge. Eksempel på input: Kirsebær 1 Bønne 3 Æble 2 0 Vandmelon Eksempel på output: Æble 3 Bønne 2 Kirsebær 1 0 Vandmelon |
GO TO FULL VERSION