Objektorienteeritud programmeerimine 9. loeng 2. aprill Eno Tõnisson 1
Kasutatud H. Heina loengumaterjalid J. Kiho Väike Java leksikon J. Kiho Java Programmeerimise aabits Y. D. Liang Introduction to Java Programming 2
Eelmisel nädalal loeng juhuslik arv konstruktorid graafiline kasutajaliides praktikum graafika lõppes rahvaloendus 3
Umbes mitu tundi tegelesite eelmisel nädalal selle ainega (loeng+praktikum+iseseisvalt)? 1. paariline 1. 0-2 tundi 2. 2-4 tundi 3. 4-6 tundi 4. 6-8 tundi 5. 8-10 tundi 6. 10-12 tundi 7. 12-14 tundi 8. üle 14 tunni 0% 0% 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 7. 8. 4
Kuivõrd olete selle ainega graafikus? 1. Isegi ees 2. Täiesti graafikus 1. paariline 3. Veidi maas, aga saan ise hakkama 4. Kõvasti maas, vajan abi 5. Ei oska öelda 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 5
Umbes mitu tundi tegelesite eelmisel nädalal selle ainega (loeng+praktikum+iseseisvalt)? 2. paariline 1. 0-2 tundi 2. 2-4 tundi 3. 4-6 tundi 4. 6-8 tundi 5. 8-10 tundi 6. 10-12 tundi 7. 12-14 tundi 8. üle 14 tunni 0% 0% 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 7. 8. 6
Kuivõrd olete selle ainega graafikus? 1. Isegi ees 2. Täiesti graafikus 2. paariline 3. Veidi maas, aga saan ise hakkama 4. Kõvasti maas, vajan abi 5. Ei oska öelda 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 7
Kes need on? Helena Charlotte Lindberg Generaldirektör, Myndigheten för samhällsskydd och beredskap Балога, Віктор Іванович Міністр надзвичайних ситуацій України Шойгу, Сергей Кужугетович министр по делам гражданской обороны, чрезвычайным ситуациям и ликвидации последствий стихийных бедствий William Craig Fugate Administrator of the Federal Emergency Management Agency 8
Hädaolukorra seadus 1. Seaduse reguleerimisala (1)... Käesolev seadus reguleerib ka eriolukorra väljakuulutamist, lahendamist ja lõpetamist 18. Eriolukorra juht (1) Eriolukorra väljakuulutamisel määrab Vabariigi Valitsus ühe ministri juhtima ja koordineerima eriolukorra väljakuulutamise põhjuseks oleva hädaolukorra lahendamist (edaspidi eriolukorra juht). 9
Erind? 1. Linn Albaania lõunaosas 2. India poliitik, parlamendi alamkoja liige 3. Programmi töö käigus tekkida võiv selline eriolukord, mis ei pruugi tingimata olla saatuslik programmi edasisele täitmisele 0% 0% 0% 1. 2. 3. 10
Erind sün. erandolukord ingl. k. exception Programmi töö käigus tekkida võiv selline eriolukord, mis ei pruugi tingimata olla saatuslik programmi edasisele täitmisele Tüüpilisematele juhtudele on olemas vastavad süsteemsed erindiklassid Erindi tekkimisel luuakse vastava erindiklassi isend, mis on abiks eriolukorda analüüsivas programmiosas 11
Milleks? Kõike ei õnnestu täpselt ette näha Ebaootuspärane käitumine ootuspäraselt ebaootuspärane!? Kui õnnestub nö. kohapeal lahendada, on tore ei saa pole mõtet Ohtlike kohtade analüüsimiseks peab infot koguma Selleks, et paremini tagada süsteemi kestev töö hoida andmeid riknemise eest 12
Javas Tõrked (java.lang.throwable) vead (java.lang.error) erindid (java.lang.exception) mittekontrollitavad (java.lang.runtimeexception) kontrollitavad 13
Erindi tekkimise mõned näited Faili ei leita Järjendil pole nii palju elemente Jagamine nulliga 14
Praktikum 4 Püüame nüüd sinna faili midagi kirjutada. Selleks loome klassi java.io.printwriter isendi. java.io.printwriter pw = new java.io.printwriter(fail); Selle rea lisamisel tekib aga veateade, mis räägib käsitlemata erindist (unhandled exception). Erinditest tuleb hiljem eraldi praktikum, siinkohal lahendame olukorra lihtsalt peameetodi päisele kahe sõna lisamisega. public static void main(string[] args) throws Exception 15
Võimalikud lahendused 16
Erindi suunamine 17
Erindi töötlemine Katsendidirektiiv Põhiblokk try { java.io.printwriter pw = new java.io.printwriter(fail); catch (FileNotFoundException e) { e.printstacktrace(); Püünis 18
Erindi töötlemine import java.io.filenotfoundexception; public class ErindiTest { public static void main(string[] args) { try { java.io.printwriter pw = new java.io.printwriter(fail); catch (FileNotFoundException e) { e.printstacktrace(); 19
Kas kompileerub? import java.io.filenotfoundexception; public class ErindiTest { public static void main(string[] args) { System.out.println(1/0); 1. Jah 2. Ei 0% 0% 1. 2. 20
Kompileerub, aga tööle ei hakka import java.io.filenotfoundexception; public class ErindiTest { public static void main(string[] args) { System.out.println(1/0); 21
Kas kompileerub? import java.io.filenotfoundexception; public class ErindiTest { public static void main(string[] args) { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); 1. Jah 2. Ei 0% 0% 1. 2. 22
Kompileerub, aga tööle ei hakka import java.io.filenotfoundexception; public class ErindiTest { public static void main(string[] args) { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); 23
Kontrollitav ja mittekontrollitav erind Faili mitteleidmise võimaluse puhul pidi kindlasti midagi ette võtma, et kompileeruks deklareerida, et meetodi töö käigus võib tekkida ja jääda püüdmata erind püüda ja töödelda Nulliga jagamise või järjendi indeksi puhul aga mitte Miks üks kord nii, teine kord naa? kontrollitavad erindid mittekontrollitavad erindid RuntimeException alamklassi (otsese või mitte) alamklassi isend 24
Throwable Error Exception LinkageError VirtualMachineError IOException MingiErind RuntimeException FileNotFoundException ArithmeticException NullPointerException IndexOutOfBoundsExceptionException mittekontrollitavad kontrollitavad 25
RuntimeException ArithmeticException Viga aritmeetikas, nt katse jagada nulliga IndexOutOfBoundsException Katse kasutada massiivi indeksit väljaspool massiivi kehtivuspiirkonda. NegativeArraySizeException Katse defineerida negatiivse suurusega massiiv. NullPointerException Katse kasutada muutujat, mis peaks viitama objektile, kuid viit puudub. ClassCastException Katse teisendada muutuja tüüpi selliseks, mis pole võimalik. IllegalArgumentException Katse edastada meetodile mittesobivaid argumente. 26
Kus? public class ErindiTestMeetodid { public static void main(string[] args) { meetod1(); public static void meetod1(){ meetod2(); public static void meetod2(){ int[] arvud = {3, 7, 8; System.out.println(arvud[3]); 27
Mida erindi kohta teada saame? Kui kuskil programmis ei püüta, siis Java käituskeskkond ikka püüab ja rakendab isendimeetodit printstacktrace() Veel meetodeid getmessage() getlocalizedmessage() tostring() 28
Proovime püüda? public class ErindiTestMeetodid { public static void main(string[] args) { try { meetod1(); catch (ArrayIndexOutOfBoundsException e) { e.printstacktrace(); public static void meetod1(){ meetod2(); public static void meetod2(){ int[] arvud = {3, 7, 8; System.out.println(arvud[3]); 29
Kas Pärast ohtu ilmub ekraanile? public static void main(string[] args) { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); System.out.println("Pärast ohtu"); 1. Jah 2. Ei 0% 0% 1. 2. 30
Kas Pärast ohtu ilmub ekraanile? public static void main(string[] args) { try { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); catch (ArrayIndexOutOfBoundsException e) { //e.printstacktrace(); System.out.println("Pärast ohtu"); 1. Jah 2. Ei 0% 0% 1. 2. 31
Teated faili FileNotFoundException! public static void main(string[] args) { try{ int[] arvud = {3, 7, 8; System.out.println(arvud[3]); catch (ArrayIndexOutOfBoundsException e) { FileOutputStream fos = new FileOutputStream("c:/temp/teated.txt", true); PrintStream ps = new PrintStream(fos); e.printstacktrace(ps); System.out.println("Pärast ohtu"); Voogudest järgmisel loengul 32
Teated faili public static void main(string[] args) throws FileNotFoundException { try { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); catch (ArrayIndexOutOfBoundsException e) { FileOutputStream fos = new FileOutputStream("c:/temp/teated.txt", true); PrintStream ps = new PrintStream(fos); e.printstacktrace(ps); System.out.println("Pärast ohtu"); 33
Throwable Error Exception LinkageError VirtualMachineError IOException MingiErind RuntimeException FileNotFoundException ArithmeticException NullPointerException IndexOutOfBoundsExceptionException mittekontrollitavad kontrollitavad 34
Mis ilmub ekraanile? public static void main(string[] args) { try { System.out.println(1/0); int[] arvud = {3, 7, 8; System.out.println(arvud[3]); catch (ArrayIndexOutOfBoundsException e) { System.out.println("Indeks"); catch (ArithmeticException e) { System.out.println("Aritmeetika"); 1. Indeks 2. Aritmeetika 3. Indeks Aritmeetika 4. Aritmeetika Indeks 5. Midagi muud 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 35
Mis ilmub ekraanile? public static void main(string[] args) { try { System.out.println(1/0); int[] arvud = {3, 7, 8; System.out.println(arvud[3]); catch (RuntimeException e) { System.out.println("Käitusaegne"); catch (ArithmeticException e) { System.out.println("Aritmeetika"); 1. Käitusaegne 2. Aritmeetika 3. Käitusaegne Aritmeetika 4. Aritmeetika Käitusaegne 5. Midagi muud 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 36
Mis ilmub ekraanile? public static void main(string[] args) { try { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); System.out.println(1/0); catch (ArithmeticException e) { System.out.println("Aritmeetika"); catch (RuntimeException e) { System.out.println("Käitusaegne"); 1. Käitusaegne 2. Aritmeetika 3. Käitusaegne Aritmeetika 4. Aritmeetika Käitusaegne 5. Midagi muud 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 37
Epiloog try { //põhiblokk catch { //püünis catch { //püünis finally { //epiloog Epiloog sooritatakse alati 38
Epiloog public class ErindEpiloog { public static void main(string[] args) { try { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); System.out.println("Vahel"); System.out.println(1/0); catch (ArithmeticException e) { System.out.println("Aritmeetika"); finally { System.out.println("Epiloog"); 39
Epiloog on, püünist pole public class ErindEpiloog { public static void main(string[] args) { try { int[] arvud = {3, 7, 8; System.out.println(arvud[3]); System.out.println("Vahel"); System.out.println(1/0); finally { System.out.println("Epiloog"); 40
Milline on täitmise järjekord, kui erindeid ei teki? try { // 1 kood, mis võib tekitada erindi // 2 catch (IOException e) { // 3 kood, mis võib tekitada erindi // 4 finally { // 5 // 6 1. 1, 2, 3, 4, 5, 6 2. 1, 3, 4, 5, 6 3. 1, 2, 5, 6 4. 1, 3, 5 5. 1, 5 6. Mingi muu 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 41
Milline on täitmise järjekord, kui põhiplokis tekib erind, mida ei püüta? try { // 1 kood, mis võib tekitada erindi // 2 catch (IOException e) { // 3 kood, mis võib tekitada erindi // 4 finally { // 5 // 6 1. 1, 2, 3, 4, 5, 6 2. 1, 3, 4, 5, 6 3. 1, 2, 5, 6 4. 1, 3, 5 5. 1, 5 6. Mingi muu 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 42
Milline on täitmise järjekord, kui põhiplokis tekib erind, mis püütakse ja püünis ei tekita erindit? try { // 1 kood, mis võib tekitada erindi // 2 catch (IOException e) { // 3 kood, mis võib tekitada erindi // 4 finally { // 5 // 6 1. 1, 2, 3, 4, 5, 6 2. 1, 3, 4, 5, 6 3. 1, 2, 5, 6 4. 1, 3, 5 5. 1, 5 6. Mingi muu 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 43
Milline on täitmise järjekord, kui põhiplokis tekib erind, mis püütakse ja püünises tekib ka erind? try { // 1 kood, mis võib tekitada erindi // 2 catch (IOException e) { // 3 kood, mis võib tekitada erindi // 4 finally { // 5 // 6 1. 1, 2, 3, 4, 5, 6 2. 1, 3, 4, 5, 6 3. 1, 2, 5, 6 4. 1, 3, 5 5. 1, 5 6. Mingi muu 0% 0% 0% 0% 0% 0% 1. 2. 3. 4. 5. 6. 44
Uusi võtmesõnu try catch throw throws finally assert 45
Tunnikontroll 46
1. liiga kiire 2. paras 3. liiga aeglane Loengu tempo oli 1. paariline 0% 0% 0% 1. 2. 3. 47
1. liiga lihtne 2. parajalt jõukohane 3. liiga keeruline Materjal tundus 1. paariline 0% 0% 0% 1. 2. 3. 48
1. liiga kiire 2. paras 3. liiga aeglane Loengu tempo oli 2. paariline 0% 0% 0% 1. 2. 3. 49
1. liiga lihtne 2. parajalt jõukohane 3. liiga keeruline Materjal tundus 2. paariline 0% 0% 0% 1. 2. 3. 50
Suur tänu osalemast! Kohtumiseni! 51