Kunnskap vs. ferdigheter
College lærte oss at det ikke er noen stor forskjell mellom teori og praksis. Vel, du forstår sikkert at det ikke er det samme. Men du ser ikke kjerneforskjellen. Likevel er det en. De fleste setter likhetstegnet mellom "jeg vet" og "jeg kan". Gjør du? Hva med noen få eksempler?- Jeg vet at røyking er dårlig for meg, men jeg røyker.
- Jeg vet at hurtigmat er dårlig for meg, men jeg spiser det.
- Jeg kjenner trafikkreglene, men jeg kan ikke kjøre.
- Jeg vet jogging er bra for meg, men jeg jogger ikke om morgenen.
Du har nådd et nytt nivå
Nivå 9
1 Risha, Stack trace
- Hei! I dag skal jeg fortelle deg hva stabelsporet er. Men la meg først forklare deg hva stakken er. - Se for deg en bunke med papirer - oppgaver til en bestemt kontorist. En ny oppgave kan legges på toppen av stabelen, og han vil ta en oppgave fra toppen av stabelen. Dermed vil ikke oppdrag gjøres etter førstemann til mølla. Hver gang ekspeditøren tar oppdraget som kommer sist. En slik samlingsstruktur kalles en stack . - I Java er det en spesiell samling - Stack. Denne samlingen har metoder «legg til et element» og «take(få/ta bort) et element». Som du allerede vet, blir det siste elementet lagt til først. - Nynne. Det er ikke vanskelig, antar jeg. - Fint. Så la meg forklare hva en stabelsporinger. - Tenk deg at i Java kaller funksjon А funksjon B , og sistnevnte kaller funksjon C , som i sin tur kaller funksjon D . Så, for å avslutte funksjon B , må du først avslutte funksjon C , og for å gjøre det må du avslutte funksjon D. Dette ligner veldig på en stabel. – Og hva er likheten? – I stabelen, for å komme til en bestemt oppgave, må du også fullføre alle oppgavene som er lagt på toppen. - Vel, det er litt av en analogi, men jeg er ikke sikker på om jeg forstår alt rett. - Se her. I Java er en stabel et sett med elementer. Det er som ark i en stabel. For å ta det tredje fra toppen må du ta det andre arket, men før det må du ta det første. Du kan alltid legge og ta ark, men du kan bare legge dem på toppen og ta bare fra toppen. Det samme gjelder funksjonsanropet. Funksjon А kaller funksjon B , sistnevnte kaller funksjon C. For å gå ut av А , må du først gå ut av B , og for å gjøre dette må du gå ut av C. - Vent litt. Hvis jeg fikk det riktig, blir hele bunken i «bare det siste arket som ble lagt på stabelen kan tas» og «først skal den sist kalte funksjonen avsluttes». Er det slik? - Ja. Så, sekvensen av funksjonsanrop er «funksjonsanropsstabelen», eller ganske enkelt «anropsstabelen». Funksjonen som kalles sist må avsluttes først. La oss se på eksemplet: - OK. Alt er klart med funksjonskallet, antar jeg. Men hva er dette StackTraceElement ? - Java virtuell maskin logger alle funksjonsanropene. For dette formålet har den en spesiell samling - stabel. Når en funksjon kaller en annen, plasserer JVM et nytt element StackTraceElement i denne stabelen. Når funksjonen avsluttes, slettes elementet fra stabelen. Dermed lagrer denne stabelen alltid oppdatert informasjon om den nåværende tilstanden til «funksjonsanropsstakken». - Hvert StackTraceElementinneholder informasjon om kalt metode. Så du kan få navnet på denne metoden ved å bruke getMethodName . - Eksemplet ovenfor viser det:- Få «anropsstabelen»:
- Iterer matrisen ved å bruke løkken for hver . Jeg håper du ikke har glemt det.
- Skriv ut metodenavn til System.out .
2 Diego, Task on stack trace display
- Hei, Amigo! Her er en liten oppgave for å vise en stabelsporing på skjermen.Oppgaver | |
---|---|
1 | Hver metode skal returnere sin StackTrace Write fem metoder som kaller hverandre. Hver metode skal returnere sin StackTrace. |
2 | StackTrace igjen Skriv fem metoder som kaller hverandre. Hver metode skal returnere navnet på den som ringer metoden. Du kan få anropsmetoden ved å bruke StackTrace. |
3 | Metoden skal returnere linjenummeret til koden denne metoden ble kalt fra Skriv fem metoder som kaller hverandre. Hver metode skal returnere linjenummeret til koden denne metoden ble kalt fra. Bruk funksjonen element.getLineNumber() . |
4 | Stabelsporing av 10 anrop Skriv kode for å få stabelsporing av 10 anrop. |
5 | Metoden skal returnere et resultat - stabelsporingsdybden Skriv en metode som viser og returnerer stabelsporingsdybden. Stabelsporingsdybde er antallet av metodene (antall elementer i listen). |
3 Elly, feil og unntak
- Hei, Amigo! I dag har vi en veldig interessant leksjon. Jeg skal fortelle deg om unntak. Unntak er en spesiell mekanisme for å kontrollere feil i programmet. Her er noen eksempler på feil som kan oppstå i programmet:- Programmet prøver å skrive en fil til hele disken.
- Programmet prøver å kalle en metode for en variabel som lagrer nullreferansen.
- Programmet prøver å dele et tall med 0.
- Når det oppstår en feil, oppretter Java Virtual Machine et spesielt objekt – et unntak – som inneholder all informasjon om feilen. For forskjellige feil er det forskjellige unntak.
- Så tvinger dette unntaket programmet til å avbryte gjeldende funksjon umiddelbart, og neste funksjon, til den avslutter hovedmetoden. Etter det avsluttes programmet. Java-utviklere kaller denne prosessen «ruller tilbake samtalestakken».
- Hvis det oppstår et unntak inne i try- blokken, kjøres ikke koden i denne blokken lenger, men utførelsen av blokkfangsten starter .
- Hvis det ikke skjedde noe unntak, kjøres try-blokken til slutten , og catch blir aldri utført .
4 Elly, RuntimeException, kaster
– Jeg bestemte meg for å ta opp et annet tema i dag. I Java er alle unntak delt inn i to typer – kontrollert/kontrollert og ukontrollert/ukontrollert . Avmerkede unntak må fanges opp, uavmerket kan fanges opp, men det er ikke nødvendig . – Er det mulig å kaste unntak i en kode med vilje? – I koden din kan du selv kaste unntak. Du kan til og med skrive dine egne unntak. Men vi kommer dypt ned i dette hullet senere. La oss nå lære hvordan du arbeider med unntakene fra Java Virtual Machine. - OK. - Hvis unntak ClassNotFoundException og FileNotFoundExceptionblir kastet (vises) i en metode, må programmereren spesifisere dem i signaturen til en metode (metodeoverskrift). Slike unntak kontrolleres. Det er slik det vanligvis ser ut: - Så, vi skriver bare kast og lister opp unntak atskilt med komma. Ikke sant? Er det slik? - Ja. Men det er en annen interessant ting. For at eksemplet nedenfor har blitt kompilert, må metoden som kaller metode1() enten fange opp disse unntakene eller kaste dem videre. Hvis du vil sende sjekket unntak fremover, må du spesifisere det i metodens overskrift . - Nok en gang, hvis du er i hovedmetoden , vil du kalle en metode som har i overskriftsfrasen kaster FileNotFoundException, ...da må du gjøre en av disse to tingene:- for å fange unntak FileNotFoundException, …
Du må pakke inn koden der du kaller en farlig metode med en try-catch- blokk - for ikke å fange unntak FileNotFoundException, ...
5 Risha, Rolling the call stack, hvordan gjøre det i unntak
– Jeg vil gjerne fortelle litt mer om hvordan unntak fungerer. Eksemplet nedenfor forklarer at: - Jeg skjønner det ikke. - Ok. Jeg skal forklare hva som skjer. – I eksempelet til venstre kaller vi flere metoder i kjedeordre. I metode2() oppretter og kaster vi spesifikt et unntak (for å starte en feil). – Eksempelet til høyre viser hva som skjer. Se på metode2() . Det er det opprettelse av et unntak forvandles til: vi lager et objekt av typen RuntimeException , lagrer det i et spesielt variabelunntak og avslutter umiddelbart metoden – return . - I metode1 , etter kallet til metode2, er det en sjekk,om det er et unntak eller ikke; hvis det er et unntak, avsluttes metode1 umiddelbart. Denne kontrollen gjøres implisitt etter å ha kalt hver (!) Java-metode. - Wow! - Nøyaktig. - I kolonnen til høyre i hovedmetoden skrev jeg hva som skjer når et unntak fanges opp av try-catch- blokken. Hvis det ikke var noe unntak, fortsetter koden å kjøre akkurat som planlagt. Hvis det var et unntak av typen spesifisert i catch , så håndterer vi det. - Og hva betyr kast og forekomst av ? - Se på den siste linjen til venstre, kast nye RuntimeException(s). På denne måten skaper og kaster vi et unntak. Dette er bare et eksempel. Vi vil ikke gjøre det så langt. - Ved å bruke kommandoen « а instans av B » i høyre blokk sjekker vi om objektet a har typen B . Det vil si om objektet som er lagret i variabelunntaket, har typen RuntimeException . Det er et logisk uttrykk. - Vel, det blir litt klarere.6 Diego, Unntaksfangstoppgave
- Se her! Onkel Diego tok med noen få oppgaver med å fange for deg. Ønsker deg lykke til. Jeg tror du trenger det. Heh. - Hei, Amigo! Her er noen interessante unntaksfangstoppgaver.Fangst opp oppgaver | |
---|---|
1 | 1. Unntak når du opererer med tall Fang unntaket som oppstår når du kjører koden: int a = 42 / 0; Vis unntaket på skjermen, spesifiser typen |
2 | 2. Unntak når du opererer med strenger Fang unntaket som oppstår når du kjører koden: String s = null; String m = s.toLowerCase(); Vis unntaket på skjermen, spesifiser typen. |
3 | 3. Unntak ved drift med arrays Fang unntaket som oppstår når koden kjøres: int[] m = new int[2]; m[8] = 5; Vis unntaket på skjermen, spesifiser typen. |
4 | 4. Unntak når du opererer med List-samlinger. Fang opp unntaket som oppstår når du kjører koden: ArrayList<String> list = new ArrayList<String>(); String s = liste.get(18); Vis unntaket på skjermen, spesifiser typen. |
5 | 5. Unntak ved bruk av kartsamlinger. Fang opp unntaket som oppstår når koden kjøres: HashMap<String, String> map = new HashMap<String, String>(null); map.put(null, null); map.remove(null); Vis unntaket på skjermen, spesifiser typen. |
7 Risha, Hvordan multiple catch fungerer
- Nå, noen flere interessante forelesninger. Jeg liker å undervise så mye. – Jeg vil fortelle deg hvordan en multippelfangst fungerer . Egentlig er det veldig enkelt: når et unntak oppstår i blokken try , overføres programkjøringen til den første catch . - Hvis typen spesifisert i parentes til blokkfangsten er den samme som typen unntaksobjekt, starter kjøringen av koden inne i {}. Ellers går vi til neste fangst . Kontrollen gjentas der. - Hvis det ikke er flere fangstblokker , men unntaket ikke er fanget, blir det kastet frem, og den gjeldende metoden avbrytes. - Jeg skjønner. Den fangsten vil bli utført, hvis type samsvarer med typen unntak. - Ja, riktig. Egentlig er det litt mer komplisert: Poenget er at klassene kan arves fra hverandre. Hvis klassen «Ku» er arvet fra klassen «Dyr», kan objektet av typen «Ku» lagres ikke bare i en variabel av typen «Ku», men også i en variabel av typen «Dyr» . - Hva så? - Siden alle unntakene er arvet fra klassene Exception eller RuntimeException (som også er arvet fra Exception ), kan de alle fanges opp ved hjelp av kommandoene catch (Exception e) eller catch (RuntimeException e) . - Hva så? - Dette betyr at,For det første kan du fange ethvert unntak ved å bruke kommandoen catch(Exception e) . For det andre betyr rekkefølgen på fangblokkene . Eksempler: - Aritmetisk unntak som følge av divisjon med 0 fanges opp i den andre fangsten. - I eksemplet nedenfor er ArithmeticException fanget i den første catch , fordi klasser av alle unntakene er arvet fra Exception. Så, Exception fanger opp ethvert unntak . - I eksemplet nedenfor er unntaket ArithmeticException ikke fanget opp, men kastet videre til kallemetoden. – Vel, det blir klarere nå. Disse unntakene er ikke så enkle. – Det virker bare slik. Faktisk er det noe av det enkleste i Java. - Jeg er i tvil om jeg skal være fornøyd eller opprørt over det...8 Diego, flere unntaksfangstoppgaver
- Hei, Amigo! I går ble jeg full og overkompliserte oppgavene dine, men jeg håper det ikke er noen harde følelser fra din side, og at du vil løse dem alle? Det er for ditt eget beste. Her:Oppgaver | |
---|---|
1 | 1. Unntak Det er en metode som kaster to unntak som er arvet fra Exception , og de to andre arvet fra RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException og URISyntaxException . Du må fange NullPointerException og FileNotFoundException , men ikke fange ArithmeticException og URISyntaxException . Hvordan gjøre det? |
2 | 2. Fange unntak Det er tre unntak arvet sekvensielt fra Unntak : klasse Unntak1 utvider Exception class Exception2 utvider Exception1 klasse Exception3 utvider Exception2 Det er en metode som beskrives som følger: public static void method1() kaster Exception1, Exception2, Exception3 Skriv en catch blokk for å fange opp alle de tre Unntak1 , Unntak2 og Unntak3 |
3 | 3. Å fange selektive unntak 1. Finn ut hvilke unntak som blir kastet av metoden BEAN.methodThrowExceptions . 2. Metoden processExceptions() skal kalle metoden BEAN.methodThrowExceptions og håndtere unntak: 2.1. hvis et unntak FileSystemException oppstår, logg det ved å kalle metoden BEAN.log og kast frem 2.2. hvis et unntak CharConversionException eller et annet IOException oppstår, bare logg det ved å kalle metoden BEAN.log 3. Legg til klassen/typen av unntaket du videresender i 2.1. til processExceptions()metodesignatur. 4. Håndter det gjenværende unntaket i metoden main() og logg det. Bruk try..catch Tips: Hvis du fanget unntaket MyException , som du ikke ville fange, kan du kaste det frem ved å bruke følgende kode: catch (MyException e) { throw e; } |
4 | 4. Fange sjekkede unntak Håndter alle de sjekkede unntakene i metoden processExceptions() . Du må vise på skjermen hvert avmerkede unntak som har skjedd. Du kan bare bruke ett blokkforsøk . |
5 | 5. Fange ukontrollerte unntak Håndter alle ukontrollerte unntak i metoden processExceptions() . Du må vise til skjermen et stabelspor av hvert oppstått unntak ved å bruke metoden printStack() . Du kan bare bruke ett blokkforsøk . |
9 Professor, Forelesning om unntak
– I dag har vi et superinteressant tema – unntak. På den tiden, da unge forskere og programmerere var dypt begeistret for dette emnet... - Beklager, jeg må gå til laboratoriet. Her er forelesningsnotater. Jeg tror du vil finne ut av 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, hva synes du om dagens leksjon? Har ikke positronhjernen din fungert ennå? Diegos oppgaver er nok til å slite ut hvem som helst. La oss ta en ølstund og slappe av. Står du fortsatt?11 Kaptein Ekorn
- Hei, soldat! - God morgen, sir! - Jeg har noen fantastiske nyheter til deg. Her er en rask sjekk for å styrke ferdighetene dine. Gjør det hver dag, og du vil forbedre ferdighetene dine raskt. Oppgaver er spesielt designet for å gjøre i Intellij IDEA.Ytterligere oppgaver å gjøre i Intellij Idea | |
---|---|
1 | 1. Divisjon med null Lag en metode offentlig statisk void divisionByZero() , hvor du må dele et hvilket som helst tall med null, og vise resultatet av delingen på skjermen. Pakk divisionByZero() -metodekallet inn i en try..catch . Vis unntaksstabelsporingen på skjermen ved å bruke metoden exception.printStackTrace() . |
2 | 2. Nedtelling fra 10 til 0 Skriv en løkke til nedtelling fra 10 til 0. Bruk Thread.sleep(100) for å lage en forsinkelse; Pakk søvnsamtalen inn i et forsøk..fangst . |
3 | 3. Pakk en metode inn i en try..catch Les tall fra tastaturet. Skriv en kode for å lese tall fra tastaturet til en egen metode readData() . Pakk inn hele denne metoden (hele koden inne i readData() -metoden, bortsett fra erklæringen av listen der tallene skal lagres) i en try..catch . Hvis brukeren skriver inn litt tekst i stedet for å skrive inn et tall, må metoden fange opp unntaket og vise alle tall som er skrevet inn på skjermen. Vis tall på skjermen. Hvert tall skal stå på en ny linje. Rekkefølgen på tallene skal være akkurat som den var i inndata. |
4 | 4. Datokonverterer Les fra tastaturet en dato i formatet «18.08.2013» Vis til skjermen den datoen i form av «18.AUG, 2013». Bruk objektene Date og SimpleDateFormat . |
5 | 5. Vokaler og konsonanter Skriv et program som leser linje fra tastaturet. Programmet skal vise to strenger på skjermen: 1) den første strengen skal inneholde vokaler 2) den andre strengen skal inneholde konsonanter og tegnsettingstegn fra den angitte teksten. Skille tegn med mellomrom. Eksempelinngang: Stopp se lytt Eksempelutgang: oooie stplklstn |
6 | 6. Historien om Rødhette 1. Det er fem klasser: Rødhette, bestemor, patty, vedhogger, ulv. 2. Hver klasse har to felt av typen ArrayList : drept og spist. 3. Nødvendige gjenstander er allerede opprettet (hette, bestemor, ...). 4. Skap det riktige forholdet (hvem spiste og drepte hvem) for å få logikken til «Rødhetten». |
7 | 7. Flytt statiske modifikasjoner Flytt statiske modifikatorer slik at koden kompileres. |
8 | 8. Liste over matriser med tall Lag en liste hvis elementer er matriser med tall. Legg til fem objektmatriser med lengde 5, 2, 4, 7, 0, henholdsvis. Fyll matriser med data og vis dem på skjermen. |
9 | 9. Ti katter Lag en klassekatt med et felt Strengnavn . Lag en ordbok Kart<String, Cat> , legg til 10 katter på modellen «Name» - «Cat». Få et sett med navn fra kartet og vis settet på skjermen. |
Bonusoppgaver | |
---|---|
1 | 1. Programmet kompilerer og kjører ikke. Fiks det. Oppgave: Programmet skal lese to filnavn fra tastaturet og kopiere den første filen til plasseringen spesifisert av det andre navnet. |
2 | 2. Legg til ny funksjonalitet til programmet. Gammel oppgave: Programmet skal lese to filnavn fra tastaturet og kopiere den første filen til plasseringen spesifisert av det andre navnet. Ny oppgave: Programmet skal lese to filnavn fra tastaturet og kopiere den første filen til plasseringen spesifisert av det andre navnet. Hvis filen (som skal kopieres) med det angitte navnet ikke eksisterer, bør programmet vise meldingen «File exists not not» på skjermen og prøve å lese filnavnet fra konsollen igjen før du leser filen navnet på den andre (mål)filen. |
3 | 3. Lære og praktisere algoritme. Les listen over ord og tall fra tastaturet. Vis på skjermen ord i stigende rekkefølge og tallene i synkende rekkefølge. Eksempel på input: Kirsebær 1 bønne 3 eple 2 0 vannmelon Eksempel på utdata: eple 3 bønne 2 kirsebær 1 0 vannmelon |