Kunskap vs. färdigheter
College lärde oss att det inte är någon stor skillnad mellan teori och praktik. Tja, du förstår säkert att det inte är samma sak. Men du ser inte kärnskillnaden. Ändå finns det en. De flesta sätter jämställdhetstecknet mellan "jag vet" och "jag kan". Gör du? Vad sägs om några exempel?- Jag vet att rökning är dåligt för mig, men jag röker.
- Jag vet att snabbmat är dåligt för mig, men jag äter det.
- Jag kan trafikregler men jag kan inte köra.
- Jag vet att jogging är bra för mig men jag joggar inte på morgonen.
Du har nått en ny nivå
Nivå 9
1 Risha, Stack trace
- Hallå! Idag ska jag berätta vad stackspåret är. Men låt mig först förklara dig vad stacken är. – Tänk dig en bunt papper – uppdrag till en viss tjänsteman. En ny uppgift kan läggas överst i högen, och han kommer att ta en uppgift från toppen av en hög. Således kommer uppdrag inte att utföras efter först till kvarn. Varje gång tar expediten det uppdrag som kommer sist. En sådan insamlingsstruktur kallas en stack . - I Java finns det en speciell samling - Stack. Den här samlingen har metoderna «lägg till ett element» och «ta (få/ta bort) ett element». Som du redan vet kommer det sista elementet som läggs till att tas först. - Brum. Det är inte svårt, antar jag. - Bra. Låt mig sedan förklara vad en stack traceär. - Föreställ dig att i Java anropar funktionen А funktion B och den senare anropar funktionen C , som i sin tur anropar funktionen D . Så för att avsluta funktion B måste du först avsluta funktion C och för att göra det måste du avsluta funktion D . Detta är mycket likt en stack. – Och vad är likheten? – I stacken, för att komma till ett visst uppdrag, måste du också slutföra alla uppdrag som lagts överst. - Tja, det är en liknelse, men jag är inte säker på om jag förstår allt rätt. - Titta här. I Java är en stack en uppsättning element. Det är som pappersark i en hög. För att ta det tredje från toppen måste du ta det andra arket, men innan dess måste du ta det första. Du kan alltid lägga och ta lakan, men du kan bara lägga dem på toppen och ta bara från toppen. Detsamma gäller funktionsanropet. Funktion А anropar funktion B , den senare anropar funktion C. För att avsluta А måste du först avsluta B och för att göra detta måste du avsluta C. - Vänta en minut. Om jag fattade det rätt, blir hela stapeln i «bara det sista arket som lades på stapeln kan tas» och «först ska den senast anropade funktionen avslutas». Är det så? - Ja. Så, sekvensen av funktionsanrop är «funktionsanropsstacken», eller helt enkelt «anropsstacken». Funktionen som kallas sist måste avslutas först. Låt oss titta på exemplet: - OK. Allt är klart med funktionsanropet, antar jag. Men vad är detta StackTraceElement ? - Java virtuell maskin loggar alla funktionsanrop. För detta ändamål har den en speciell samling - stack. När en funktion anropar en annan, placerar JVM ett nytt element StackTraceElement i denna stack. När funktionen avslutas raderas elementet från stacken. Således lagrar denna stack alltid aktuell information om det aktuella tillståndet för «funktionsanropsstacken». - Varje StackTraceElementinnehåller information om anropad metod. Så du kan få namnet på denna metod med hjälp av getMethodName . - Exemplet ovan visar det:- Hämta «samtalsstacken»:
- Iterera arrayen med loopen för varje . Jag hoppas att du inte har glömt det.
- Skriv ut metodnamn till System.out .
2 Diego, Task on stack trace display
- Hej, Amigo! Här är en liten uppgift för att visa en stackspårning på skärmen.Uppgifter | |
---|---|
1 | Varje metod ska returnera sin StackTrace Write fem metoder som anropar varandra. Varje metod bör returnera sin StackTrace. |
2 | StackTrace igen Skriv fem metoder som anropar varandra. Varje metod bör returnera namnet på sin anropsmetod. Du kan få anropsmetoden med StackTrace. |
3 | Metoden ska returnera radnumret för koden som denna metod anropades från Skriv fem metoder som anropar varandra. Varje metod ska returnera radnumret för koden som denna metod anropades från. Använd funktionen element.getLineNumber() . |
4 | Stackspårning av 10 samtal Skriv kod för att få en stackspårning av 10 samtal. |
5 | Metoden ska returnera ett resultat - dess stackspårdjup Skriv en metod som visar och returnerar dess stackspårdjup. Stackspårdjup är antalet av dess metoder (antalet element i listan). |
3 Elly, fel och undantag
- Hej, Amigo! Idag har vi en mycket intressant lektion. Jag ska berätta om undantag. Undantag är en speciell mekanism för att kontrollera fel i programmet. Här är några exempel på fel som kan uppstå i programmet:- Programmet försöker skriva en fil till hela disken.
- Programmet försöker anropa en metod för en variabel som lagrar nollreferensen.
- Programmet försöker dividera ett tal med 0.
- När ett fel uppstår skapar Java Virtual Machine ett speciellt objekt – ett undantag – som innehåller all information om felet. För olika fel finns det olika undantag.
- Sedan tvingar detta undantag programmet att omedelbart avbryta den aktuella funktionen och nästa funktion tills den avslutar huvudmetoden. Därefter avslutas programmet. Java-utvecklare kallar denna process "rullar tillbaka samtalsstacken".
- Om ett undantag inträffar inuti försöksblocket exekveras inte koden i detta block längre, utan exekveringen av blockfångsten startar .
- Om inget undantag inträffade, exekveras försöksblocket till slutet, och catch exekveras aldrig .
4 Elly, RuntimeException, kastar
– Jag bestämde mig för att ta upp ett annat ämne idag. I Java är alla undantag uppdelade i två typer – kontrollerade/kontrollerade och okontrollerade/okontrollerade . Markerade undantag måste fångas, omarkerade kan fångas men det krävs inte . - Är det möjligt att kasta undantag i en kod med flit? – I din kod kan du själv slänga undantag. Du kan till och med skriva dina egna undantag. Men vi kommer djupt ner i det här hålet senare. Låt oss nu lära oss hur man arbetar med undantagen från Java Virtual Machine. - Okej. - Om undantag ClassNotFoundException och FileNotFoundExceptionkastas (visas) i en metod, måste programmeraren specificera dem i signaturen för en metod (metodhuvud). Sådana undantag kontrolleras. Så brukar det se ut: – Så, vi skriver bara kast och listar undantag separerade med kommatecken. Höger? Är det så? - Ja. Men det finns en annan intressant sak. För att exemplet nedan har kompilerats måste metoden som anropar method1() antingen fånga dessa undantag eller kasta dem framåt. Om du vill skicka ett markerat undantag framåt måste du ange det i metodhuvudet . - Återigen, om du i huvudmetoden vill anropa en metod som har i sin huvudfras kastar FileNotFoundException, ...då måste du göra en av dessa två saker:- för att fånga undantag FileNotFoundException, …
Du måste slå in koden där du anropar en farlig metod med ett försök-fångst- block - att inte fånga undantag FileNotFoundException, ...
5 Risha, Rolling the call stack, hur man gör det i undantagsfall
– Jag skulle vilja berätta lite mer om hur undantag fungerar. Exemplet nedan förklarar att: - Jag fattar inte. - Okej. Jag ska förklara vad som händer. – I exemplet till vänster kallar vi flera metoder i kedjeordning. I metod2() skapar vi specifikt och kastar ett undantag (för att initiera ett fel). – Exemplet till höger visar vad som händer. Titta på metod2() . Det är vad skapandet av ett undantag förvandlas till: vi skapar ett objekt av typen RuntimeException , lagrar det i ett speciellt variabelundantag och avslutar omedelbart metoden – return . - I metod1 , efter anropet av metod2 finns en kontroll,om det finns ett undantag eller inte; om det finns ett undantag, avslutas metod1 omedelbart. Denna kontroll görs implicit efter anrop av varje (!) Java-metod. - Wow! - Exakt. - I kolumnen till höger i metodhuvudet skrev jag vad som händer när ett undantag fångas upp av try-catch- blocket. Om det inte fanns något undantag, fortsätter koden att köras precis som planerat. Om det fanns ett undantag av den typ som anges i catch , så hanterar vi det. - Och vad betyder kast och instans av ? - Titta på den sista raden till vänster kasta nya RuntimeException(s). På så sätt skapar vi ett undantag. Detta är bara ett exempel. Vi kommer inte att göra det än så länge. - Med hjälp av kommandot « а instans av B » i det högra blocket kontrollerar vi om objektet a har typen B . Det vill säga om objektet som är lagrat i variabelundantaget har typen RuntimeException . Det är ett logiskt uttryck. – Tja, det blir lite tydligare.6 Diego, Exception catch task
- Titta här! Farbror Diego kom med få uppgifter om att fånga åt dig. Önskar dig lycka till. Jag tror att du kommer att behöva det. Heh. - Hej, Amigo! Här är några intressanta undantagsfångstuppgifter.Fånga uppgifter | |
---|---|
1 | 1. Undantag vid arbete med siffror Fånga undantaget som inträffar när koden körs: int a = 42 / 0; Visa undantaget på skärmen och ange dess typ |
2 | 2. Undantag vid drift med strängar Fånga undantaget som uppstår när koden körs: String s = null; String m = s.toLowerCase(); Visa undantaget på skärmen och ange dess typ. |
3 | 3. Undantag vid drift med arrayer Fånga undantaget som uppstår när koden körs: int[] m = new int[2]; m[8] = 5; Visa undantaget på skärmen och ange dess typ. |
4 | 4. Undantag när du arbetar med listsamlingar Fånga undantaget som uppstår när koden körs: ArrayList<String> list = new ArrayList<String>(); String s = list.get(18); Visa undantaget på skärmen och ange dess typ. |
5 | 5. Undantag när du arbetar med kartsamlingar Fånga undantaget som inträffar när du kör koden: HashMap<String, String> map = new HashMap<String, String>(null); map.put(null, noll); map.remove(null); Visa undantaget på skärmen och ange dess typ. |
7 Risha, Hur flera fångster fungerar
– Nu några mer intressanta föreläsningar. Jag gillar att lära ut så mycket. – Jag vill berätta hur en multipelfångst fungerar . Egentligen är det väldigt enkelt: när ett undantag inträffar i blocket try överförs programexekveringen till den första catchen . - Om typen som anges inom parentes av blockfångsten är densamma som typen av undantagsobjektet, startar kodexekveringen inuti {}. Annars går vi till nästa fångst . Kontrollen upprepas där. - Om det inte finns fler fångstblock , men undantaget inte har fångats, kastas det framåt och den aktuella metoden avbryts. - Jag förstår. Den fångsten kommer att exekveras, vars typ matchar typen av undantag. - Ja exakt. Egentligen är det lite mer komplicerat: Poängen är att klasserna kan ärvas från varandra. Om klassen «Ko» ärvs från klassen «Djur», får objektet av typen «Ko» lagras inte bara i en variabel av typen «Ko», utan även i en variabel av typen «Djur» . - Än sen då? - Eftersom alla undantag ärvs från klasserna Exception eller RuntimeException (som också ärvs från Exception ), kan de alla fångas med kommandon catch (Exception e) eller catch (RuntimeException e) . - Än sen då? - Detta innebär att,först kan du fånga vilket undantag som helst med kommandot catch(Exception e) . För det andra spelar ordningen på fångstblocken någon roll. Exempel: - Aritmetiskt Undantag från division med 0 fångas i den andra fångsten. - I exemplet nedan fångas ArithmeticException i första catch , eftersom klasser av alla undantag ärvs från Exception. Så, Exception fångar alla undantag . - I exemplet nedan fångas inte undantaget ArithmeticException , utan kastas vidare till anropsmetoden. – Nåväl, det blir tydligare nu. Dessa undantag är inte så lätta. – Det verkar bara så. Faktum är att det är något av det enklaste i Java. – Jag är osäker på om jag ska vara nöjd eller upprörd över det...8 Diego, Flera undantagsfångstuppgifter
- Hej, Amigo! Igår blev jag full och överkomplicerade dina uppgifter, men jag hoppas att det inte finns några hårda känslor från din sida och att du kommer att lösa alla? Det är för ditt eget bästa. Här:Uppgifter | |
---|---|
1 | 1. Undantag Det finns en metod som kastar två undantag som ärvs från Exception , och de andra två ärvda från RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException och URISyntaxException . Du måste fånga NullPointerException och FileNotFoundException , men inte för att fånga ArithmeticException och URISyntaxException . Hur man gör det? |
2 | 2. Fånga undantag Det finns tre undantag som ärvs sekventiellt från Undantag : klass Undantag1 utökar Undantagsklassen Undantag2 utökar Undantag1 klass Undantag3 utökar Undantag2 Det finns en metod som beskrivs enligt följande: public static void method1() kastar Undantag1, Undantag2, Undantag3 Skriv en fångst blockera för att fånga alla tre Exception1 , Exception2 och Exception3 |
3 | 3. Fånga selektiva undantag 1. Ta reda på vilka undantag som skapas av metoden BEAN.methodThrowExceptions . 2. Metoden processExceptions() ska anropa metoden BEAN.methodThrowExceptions och hantera undantag: 2.1. om ett undantag FileSystemException inträffar, logga det genom att anropa metoden BEAN.log och kasta framåt 2.2. om ett undantag CharConversionException eller något annat IOException inträffar, logga det bara genom att anropa metoden BEAN.log 3. Lägg till klassen/typen för undantaget du vidarebefordrar i 2.1. till processExceptions()metodsignatur. 4. Hantera det återstående undantaget i metoden main() och logga det. Använd try..catch Tips: Om du fångade undantaget MyException , som du inte ville fånga, kan du kasta det framåt med följande kod: catch (MyException e) { throw e; } |
4 | 4. Fånga kontrollerade undantag Hantera alla markerade undantag i metoden processExceptions() . Du måste visa varje markerat undantag som har inträffat på skärmen. Du får bara använda ett blockförsök . |
5 | 5. Fånga omarkerade undantag Hantera alla omarkerade undantag i metoden processExceptions() . Du måste visa ett stackspår på skärmen för varje inträffat undantag med metoden printStack() . Du får bara använda ett blockförsök . |
9 Professor, Föreläsning om undantag
– Idag har vi ett superintressant ämne – undantag. På den tiden, när unga vetenskapsmän och programmerare var djupt entusiastiska över detta ämne... - Förlåt, jag måste gå till labbet. Här är föreläsningsanteckningar. Jag tror att du kommer att reda ut det själv. Här: Java Exceptions (Oracle Documentation) Exception Hantering i Java (Java T-punkt) Java - Exceptions Hantering (handledningspunkt) Grundläggande Java Exception Handling10 Julio
- Amigo, vad tycker du om dagens lektion? Har din positronhjärna inte fungerat ännu? Diegos uppgifter räcker för att slita ut vem som helst. Låt oss ta en ölstund och koppla av. Står du fortfarande?11 kapten ekorrar
- Hej, soldat! - God morgon herrn! - Jag har fantastiska nyheter till dig. Här är en snabb kontroll för att stärka dina färdigheter. Gör det varje dag, och du kommer att förbättra dina färdigheter riktigt snabbt. Uppgifter är speciellt utformade för att göra i Intellij IDEA.Ytterligare uppgifter att göra i Intellij Idea | |
---|---|
1 | 1. Division med noll Skapa en metod public static void divisionByZero() , där du måste dividera valfritt tal med noll och visa resultatet av divisionen på skärmen. Slå in divisionByZero() -metodanropet till ett try..catch . Visa undantagsstackspårningen på skärmen med metoden exception.printStackTrace() . |
2 | 2. Nedräkning från 10 till 0 Skriv en loop till nedräkning från 10 till 0. Använd Thread.sleep(100) för att göra en fördröjning; Slå in sömnsamtalet till ett försök..fångst . |
3 | 3. Slå in en metod till ett försök..fångst Läs siffror från tangentbordet. Skriv en kod för att läsa siffror från tangentbordet till en separat metod readData() . Slå in hela den här metoden (hela koden inuti metoden readData() , förutom deklarationen av listan där siffrorna kommer att lagras) i en try..catch . Om användaren skriver in text istället för att ange ett nummer, måste metoden fånga undantaget och visa alla siffror som skrivits in tidigare på skärmen. Visa siffror på skärmen. Varje nummer ska finnas på en ny rad. Siffrornas ordning ska vara precis som den var i inmatningen. |
4 | 4. Datumomvandlare Läs från tangentbordet ett datum i formatet «08/18/2013» Visa på skärmen detta datum i form av «18 AUGUSTI 2013». Använd objekten Date och SimpleDateFormat . |
5 | 5. Vokaler och konsonanter Skriv ett program som läser rad från tangentbordet. Programmet ska visa två strängar på skärmen: 1) den första strängen ska innehålla vokaler 2) den andra strängen ska innehålla konsonanter och skiljetecken från den inmatade texten. Separera tecken med mellanslag. Exempelinmatning: Stop look listen Exempelutgång: oooie stplklstn |
6 | 6. Sagan om Rödluvan 1. Det finns fem klasser: Rödluvan, mormor, patty, vedhuggare, varg. 2. Varje klass har två fält av typen ArrayList : dödade och åt. 3. Nödvändiga föremål är redan skapade (huva, mormor, ...). 4. Skapa den korrekta relationen (vem åt och dödade vem) för att få logiken i «Rödluvan». |
7 | 7. Flytta statiska modifieringar Flytta statiska modifierare så att koden kompileras. |
8 | 8. Lista med arrayer av nummer Skapa en lista vars element är arrayer av siffror. Lägg till fem objektmatriser med längden 5, 2, 4, 7, 0 respektive. Fyll matriser med alla data och visa dem på skärmen. |
9 | 9. Tio katter Skapa en klasskatt med ett fält Strängnamn . Skapa en ordbok Karta<String, Cat> , lägg till 10 katter på modellen «Name» - «Cat». Få en uppsättning namn från kartan och visa uppsättningen på skärmen. |
Bonusuppgifter | |
---|---|
1 | 1. Programmet kompilerar och körs inte. Fixa det. Uppgift: Programmet ska läsa två filnamn från tangentbordet och kopiera den första filen till den plats som anges av det andra namnet. |
2 | 2. Lägg till ny funktionalitet i programmet. Gammal uppgift: Programmet ska läsa två filnamn från tangentbordet och kopiera den första filen till den plats som anges av det andra namnet. Ny uppgift: Programmet ska läsa två filnamn från tangentbordet och kopiera den första filen till den plats som anges av det andra namnet. Om filen (som kommer att kopieras) med det angivna namnet inte existerar, bör programmet visa meddelandet «Filen finns inte» på skärmen och försöka läsa filnamnet från konsolen igen innan du läser filen namnet på den andra (mål)filen. |
3 | 3. Att lära sig och öva på algoritm. Läs listan med ord och siffror från tangentbordet. Visa på skärmen ord i stigande ordning och siffrorna i fallande ordning. Exempelinmatning: Körsbär 1 Böna 3 Äpple 2 0 Vattenmelon Exempelutgång: Äpple 3 Böna 2 Körsbär 1 0 Vattenmelon |
GO TO FULL VERSION