1 / 50

Java pagrindai

Java pagrindai. 2 paskaita lekt. dr. Asta Slotkienė. Turinys. Situacijų valdymas Įvestis klaviatūra Įvestis/išvestis failuose. Klaidos. Programose pasitaiko klaidų ir į jas reikia reaguoti Gerai parašyta programa visada turi ir klaidų apdorojimo kodą

adonia
Download Presentation

Java pagrindai

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java pagrindai 2 paskaita lekt. dr. Asta Slotkienė

  2. Turinys • Situacijų valdymas • Įvestis klaviatūra • Įvestis/išvestis failuose

  3. Klaidos • Programose pasitaiko klaidų ir į jas reikia reaguoti • Gerai parašyta programa visada turi ir klaidų apdorojimo kodą • Situacijos – tai atvejai, kai programoje nutinka: • Netikėta klaida • Specialiai programuotojo sumodeliuota klaida 3

  4. Klasikinės klaidų tikrinimo priemonės if switch return kodas kartojimo ciklai exit goto pranešimai 4

  5. Situacijos Situacijos, kurios skirtos klaidų išvengimui, reaguoja į klaidas ir atlieka veiksmus, nurodytus programoje arba perduoda klaidų apdorojimą kitiems metodams Situacija – tai įvykis, nutraukiantis įprastą programos darbą. Tai gali būti klaida programoje arba specialiai programuotojo numatyta situacija Kiekvienai situacijai Java kalboje sukuriamas atitinkamos klasės objektas 5

  6. Klaidos šaltiniai Pavyzdys class Exc0 { public static void main(String args[]) { int d = 0; int a = 42 / d; } } Išvestis java.lang.ArithmeticException: / by zero at Exc0.main(Exc0.java:4) Exception in thread "main" 6

  7. Klaidossusidarymas public int vidurkis(int mas[], int n) { int vid = 0; for (int i = 0; i < n; i++) { vid += mas[i]; } vid = vid / n; return vid; } Klaida: ArrayIndexOutOfBoundsException

  8. Tradicinis klaidos sprendimas Kodas su galimos klaidos apdorojimu: public int vidurkis(int mas[], int n) { int vid = 0; for (int i = 0; i < n; i++) { if (i >= mas.length) { System.out.println(“KLAIDA: Neteingas n"); System.out.println(“Vidurkis gali buti netikslus"); break;// nutraukiame ciklo kartojima } vid += mas[i]; } vid = vid / n; return vid; }

  9. Sprendimas su situacijomis public int vidurkis(int mas[], int n) { int vid = 0; try { for (int i = 0; i < n; i++) { vid += mas[i]; } } catch (ArrayIndexOutOfBoundsExceptionsituacija) { System.out.println(“KLAIDA: Neteingas n"); System.out.println(“Ciklas nutrauktas. Vidurkis netikslus"); } vid = vid / n; return vid; }

  10. Pagrindinės situacijų klasės Object Trowable Exception Error ClassNotFoundException NotSuchMethodException IOException EOFException FileNotFoundException ... ... RunTimeException ArithmeticException ClassCastException NullPointerException ... StackOverflowError OutOfMemoryError UnknownError ... • Java kalboje klaidoms apdoroti skiriama klasė Object ---Trowable --- Exception

  11. Trowable klasė Error klasės situacijos susijusios su JVM darbu, todėl šios situacijos programuotojo neapdorojamos Exception klasė – klaidos privalo būti sugautos ir apdorotos RuntimeException – kompiliatoriaus nekontroliuojamos klaidos 11

  12. Java priemonės try – catch blokai sakinys throw atributas throws , kuris deklaruoja reakcija į situacijas finally blokas 12

  13. try – catch blokas try { // veiksmai, kur gali įvykti situacijos //veiksmai, kurie turi būti kontroliuojami } catch (ExceptionType1 s) { // veiksmai įvykus situacijai 1 } catch (ExceptionType2 s) { // veiksmai įvykus situacijai 2 } 13

  14. try – catch blokai try blokas privalo turėti arba nors vieną catch (arba finally) catch be try būti negali try blokai gali turėti vidinius try blokus su savo catch Įvykus try bloke situacijai, tolimesni sakiniai šiame bloke nebevykdomi - ieškomas atitinkamas catch blokas Įvykdžius catch bloką, likusieji catch blokai ignoruojami ir vykdomi sakiniai, esantys už paskutinio to lygio catch bloko 14

  15. Vidiniai try-catch try { // veiksmai try { // veiksmai } catch (ExceptionType1 s) { // veiksmai } } catch (ExceptionType2 s) { // veiksmai }

  16. try – catch pavyzdys try { String sk=ob.readLine(); //IOException x=Integer.parseInt(sk); // NumberFormatException sum=sum+x; } catch (NumberFormatException e){ System.out.println("Klaida. Įvedėte ne skaičių"); } catch (IOException e){ System.out.println(“Ivedimo klaida"); } Jei įvesime raidę, tuomet bus “sugauta” klaida ir vykdomi catch bloke nurodyti sakiniai 16

  17. Kartoti ar ne? try { while (true) { //amzinasis ciklas System.out.print("Iveskite skaiciu: "); String s = klaviatura.readLine(); int x = Integer.parseInt(s); if (x < 0) { System.out.println("X neigiamas, iveskite teigiama verte"); } else { System.out.println("Teigiamas x ir lygus: " + x); break; //nutrauks ciklo vykdyma } } } catch (NumberFormatException e) { System.out.println("Ivedete ne skaiciu"); } catch (IOException e) { System.out.println("Klaida"); }

  18. Kartoti ar ne? int bandymuSkaicius = 0; while (true) {// amžinas ciklas try { // skaičiavimai, galintys iššaukti situaciją } catch (ExceptionType e) { bandymuSkaicius ++; if (bandymuSkaicius < maxKiekis) { // veiksmai pakartotinai situacijai išvengti } else { System.exit(); // gali buti ir break arba return } } } // while pabaiga 18

  19. Paveldėjimas 19

  20. Pavyzdys Teisinga try { //veiksmai }catch (EOFException e){ //veiksmai } catch (IOException e){ //veiksmai } Klaidinga try { //veiksmai } catch (IOException e){ //veiksmai } catch (EOFException e){ //veiksmai } 20

  21. Išimčių pavyzdžiai • FileNotFoundException (java.io) • Nepavyko atidaryti prašyto failo • IllegalArgumentException (java.lang) • Netinkamas metodo naudojimas / nepatvirtinti argumentai • IOException (java.io) • Pagrindinės Į/I klaidos • NullPOinterException (java.lang) • Bandymas pasiekti objektą, naudojant netinkamą nuorodą • UnsupportedOperationException (java.lang) • Nepalaikomas operatorius 21

  22. throw atributas • Leidžia iššaukti situaciją dirbtinai (sumodeliuoti). • Sintaksė : • throw SituacijosKlasėsObjektas; • Pvz: catch(Exception e) { // klaidos apdorojimo veiksmai šiame lygyje throw e; // veiksmai aukštesniame lygyje } 22

  23. Sakinys throws Jei metode gali susidaryti situacija, bet metodas pats jos neapdoroja, tai metodo antraštėje po atributo throws būtina jas išvardinti. Tokiu būdu jų apdorojimas persiunčiamas atgal - į šio metodo iškvietimo zoną public void skaito() throws FileNotFoundException { // Jei šiame metode įvyks situacija “failas nerastas”, // tai ji bus apdorota jį iškvietusiame bloke } 23

  24. Sakinys finally • Jis vykdomas visada – įvyko situacija ar ne, buvo ji sugauta ir apdorota ar nebuvo. finally { // veiksmai } • P.S • Po try bloko vietoje catch gali eiti finally blokas. • Finally vykdomas prieš išeinant iš metodo. 24

  25. Finally try { // veiksmai, kur gali įvykti situacijos //veiksmai, kurie turi būti kontroliuojami } catch ([Exception tipas] e) { // veiksmai įvykus situacijai 1 } finally { //kosmetiniai veiksmai } 25

  26. Exceptions klasių kūrimas class ManoSituacija extends Exception { public ManoSituacija () {} public ManoSituacija (String turinys) { super(turinys); } }

  27. Exceptions klasių kūrimas class MyException extends Exception { } class MyClass { void klaida() { if (/*logine salyga klaidai neivykti*/){ //veiksmai } else { // veiksmai klaidai įvykus throw new MyException(); } } } 27

  28. Pavyzdys public float dalyba(int a, int b) { float r; try { r = a / b; } catch (ArithmeticException e) { System.out.println(e.getMessage()); r = Float.POSITIVE_INFINITY; } return r; } 28

  29. Įvestis ir išvestis

  30. Įvedimas / išvedimas • Įvedimas / išvedimas (IO) Java kalboje organizuotas per srautus (stream). • Standartiniai srautai operuoja su baitais. • Dirbant su Unicode simboliais patogiau dirbti su simboliniais srautais (reader ir writer). • Srautas Java kalboje atitinka klasę. • Java apibrėžia tris standartinius srautus: • Standartinio įvedimo System.in • Standartinio išvedimo System.out • Klaidoms skirto išvedimo System.err

  31. java.lang.Object FileInputStream, ObjectInputStream, ... Byte I/O InputStream FileOutputStream, ObjectOutputStream, ... OutputStream File ObjectStreamClass ObjectTokenizer BufferedReader, InputStreamReader, ... Reader FileReader Writer Unicode I/O Paketas java.io

  32. Įvedimas klaviatūra • java.io.BufferedReader ds= new BufferedReader(new InputStreamReader(System.in)); • Pagrindis metodas: • String s = ds.readline(); 32

  33. Įvedimas klaviatūra Didžioji dalis realizuota pakete java.io Import java.io.*; Dirbant su šio paketo klasėmis, dažnai tenka naudoti try {...} catch konstrukciją ir išimtis throws 33

  34. import java.io.*; public class Labas { public static void main (String args[]) throws IOException { BufferedReader skaito=new BufferedReader(new InputStreamReader(System.in)); System.out.printlt (“Labas, iveskite savo varda”); String vardas = skaito.readLine(); System.out.println(“Mano vardas yra ”+vardas); } 34

  35. import java.io.*; public class Suma { public static void main(String args[]) throws IOException { String reiksme1, reiksme2; int x1 = 0; double x2 = 0.0, suma = 0.0; BufferedReader skaito = new BufferedReader(newInputStreamReader(System.in)); try{ reiksme1 = skaito.readLine(); x1 = Integer.parseInt(reiksme1); } catch (NumberFormatException e) { System.out.println(“Reiksme is klaviaturos nera sveikas skaicius.“); return; } try{ reiksme2 = skaito.readLine(); x2 = Double.parseDouble(reiksme2); suma = x1+x2; System.out.println(“Suma ”+suma); } catch (NumberFormatException e) { System.out.println(“Reiksme nera skaicius, suma negalima.“);} } 35

  36. Darbas su failais import java.io.file 36

  37. Duomenų skaitymas iš tekstinio failo File f = new File (“input.txt”); BufferedReader br = new BufferedReader( new FileReader (f)); FileReader fr = new FileReader(“input.txt”); BufferedReader br = new BufferedReader(new (fr);); Metodai br.read(); br.readLine(); Skaitymas iš failo: String s; while((s = br.readLine()) != null) { System.out.println(s); } file FileReader Filter (BufferedReader)

  38. Skaitymas iš failo BufferedReader ds =new BufferedReader(new FileReader(“D:/Java/IO/Duom.dat”)); Arba Filef1=new File(“D:/Java/IO”, “Duom.dat”); BufferedReader ds=new BufferedReader(new FileReader(f1)); 38

  39. Skaitymas iš failo • Pilnas kelias iki failo: • File f = new File("D:/Mano/Duom.dat"); • Kelias ir failo vardas: • File f = new File("D:/Mano”, “Duom.dat"); • Kai failas yra kur ir NetBeans projektas • File f = new File(". ", "Duom.dat");

  40. Skaitymas iš failo import java.io.*; class FailoSkaitymas { public static void main(String args[]) throws Exception { FileReader fr = new FileReader(“Failas.txt"); BufferedReader skaito = new BufferedReader(fr); String s; while((s = skaito.readLine()) != null) { //tikrina ar eilute netuscia System.out.println(s); //atspausdins is failo perskaityta viena eilute } fr.close(); //baigus ciklas uzdaro skaitymo faila } }

  41. 41

  42. Rašymas į failą PrintWriter pr =new PrintWriter(new FileWriter(“D:/Java/IO/Rez.dat”)); Arba File f1 =new File(“D:/Java/IO”, “Rez.dat”); PrintWriter pr = new PrintWritter(new FileWriter(f1)); 42

  43. Įvestis ir išvestis tekstiniame faile

  44. Papildomos IO klasės • StringTokenizer – simbolių srauto skaidymas į “žodžius”. • Metodai: • hasMoreElements – gražina boolean tipo reikšmę • nextElement

  45. StringTokenizer pavydys import java.util.*; public class Stringtok {public static void main(String [] args) {        String eil = “Tai yra eilute";        StringTokenizer Tok = new StringTokenizer(eil);        int n=0;        while (Tok.hasMoreElements())                System.out.println("" + ++n +": "+Tok.nextElement());        }}

  46. import java.util.StringTokenizer; publicclass StringTokenizerSample { public static void main(String[] args) { StringTokenizer st = new StringTokenizer("a stringtokenizer sample"); System.out.println("tokens count: " + st.countTokens());// kiek yra eilute yra token while (st.hasMoreElements())// kartojasi ciklas tol, kol eiluteje yra token'u { String token = st.nextElement().toString(); System.out.println("token = " + token); } st = new StringTokenizer("2005/12/15", "/");// sudalina datos eilute, kai token skiria "/" while (st.hasMoreElements()) { String token = st.nextToken(); System.out.println("token = " + token); } } } Rezultatas: tokens count: 3 token = a token = stringtokenizer token = sample token = 2005 token = 12 token = 15

  47. 47

  48. Komentarai • Naudojant įvesties ir išvesties srautus su failais visada naudokite situacijų apdorojimą: • FileNotFoundException • IOException • Nuskaitymo ir įrašymo failai turi būti sukurti ir žinoma tiksli jų vieta 48

  49. Failo nuskaitymas

  50. Duomenų įrašymas į failą

More Related