Java pagrindai

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

description

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ą - PowerPoint PPT Presentation

Transcript of Java pagrindai

Page 1: Java pagrindai

Java pagrindai

2 paskaita

lekt. dr. Asta Slotkienė

Page 2: Java pagrindai

Turinys

Situacijų valdymas Įvestis klaviatūra Įvestis/išvestis failuose

Page 3: Java pagrindai

KlaidosProgramose pasitaiko klaidų ir į jas reikia reaguotiGerai parašyta programa visada turi ir klaidų

apdorojimo kodąSituacijos – tai atvejai, kai programoje nutinka:

Netikėta klaidaSpecialiai programuotojo sumodeliuota klaida

3

Page 4: Java pagrindai

Klasikinės klaidų tikrinimo priemonės

ifswitchreturn kodas

kartojimo ciklaiexitgotopranešimai

4

Page 5: Java pagrindai

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

Page 6: Java pagrindai

Klaidos šaltiniaiPavyzdys

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

Page 7: Java pagrindai

7

Klaidos susidarymas

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

Page 8: Java pagrindai

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;}

Page 9: Java pagrindai

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 (ArrayIndexOutOfBoundsException situacija) { System.out.println(“KLAIDA: Neteingas n"); System.out.println(“Ciklas nutrauktas. Vidurkis netikslus"); } vid = vid / n; return vid;}

Page 10: Java pagrindai

Pagrindinės situacijų klasės

Object

Trowable

Exception Error

ClassNotFoundExceptionNotSuchMethodExceptionIOException

EOFExceptionFileNotFoundException...

...

RunTimeException

ArithmeticException

ClassCastException

NullPointerException

...

StackOverflowError

OutOfMemoryError

UnknownError

...

Java kalboje klaidoms apdoroti skiriama klasė Object ---Trowable --- Exception

Page 11: Java pagrindai

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

Page 12: Java pagrindai

Java priemonės

try – catch blokaisakinys throwatributas throws , kuris deklaruoja reakcija į

situacijasfinally blokas

12

Page 13: Java pagrindai

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

Page 14: Java pagrindai

try – catch blokai

try blokas privalo turėti arba nors vieną catch (arba finally)

catch be try būti negalitry 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 bloko14

Page 15: Java pagrindai

Vidiniai try-catch

try {// veiksmai

try { // veiksmai

} catch (ExceptionType1 s) { // veiksmai }

} catch (ExceptionType2 s) { // veiksmai }

Page 16: Java pagrindai

try – catch pavyzdystry {

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

Page 17: Java pagrindai

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"); }

Kartoti ar ne?

Page 18: Java pagrindai

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

Page 19: Java pagrindai

Paveldėjimas

19

Page 20: Java pagrindai

PavyzdysTeisinga

try

{

//veiksmai

}catch (EOFException e){

//veiksmai

}

catch (IOException e){

//veiksmai

}

Klaidinga

try

{

//veiksmai

} catch (IOException e){

//veiksmai }

catch (EOFException e){

//veiksmai

}

20

Page 21: Java pagrindai

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 operatorius21

Page 22: Java pagrindai

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

Page 23: Java pagrindai

Sakinys throwsJei 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

Page 24: Java pagrindai

Sakinys finallyJis 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

Page 25: Java pagrindai

Finallytry {

// veiksmai, kur gali įvykti situacijos

//veiksmai, kurie turi būti kontroliuojami

}

catch ([Exception tipas] e) {

// veiksmai įvykus situacijai 1

}

finally {

//kosmetiniai veiksmai

}

25

Page 26: Java pagrindai

Exceptions klasių kūrimas

class ManoSituacija extends Exception {

public ManoSituacija () { }

public ManoSituacija (String turinys) {

super(turinys);

}

}

Page 27: Java pagrindai

Exceptions klasių kūrimasclass MyException extends Exception { }

class MyClass {

void klaida() {

if (/*logine salyga klaidai neivykti*/){

//veiksmai

}

else {

// veiksmai klaidai įvykus

throw new MyException(); }

}

}27

Page 28: Java pagrindai

Pavyzdyspublic 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

Page 29: Java pagrindai

Įvestis ir išvestis

Page 30: Java pagrindai

Į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

Page 31: Java pagrindai

Paketas java.io

Page 32: Java pagrindai

Įvedimas klaviatūra

java.io.BufferedReader ds = new BufferedReader(new InputStreamReader(System.in));

Pagrindis metodas:String s = ds.readline();

32

Page 33: Java pagrindai

Įvedimas klaviatūra

Didžioji dalis realizuota pakete java.ioImport java.io.*;Dirbant su šio paketo klasėmis, dažnai

tenka naudoti try {...} catch konstrukciją ir išimtis throws

33

Page 34: Java pagrindai

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

Page 35: Java pagrindai

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(new InputStreamReader(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

Page 36: Java pagrindai

Darbas su failais

import java.io.file

36

Page 37: Java pagrindai

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 FileReaderFilter

(BufferedReader)

Page 38: Java pagrindai

Skaitymas iš failo

BufferedReader ds = new BufferedReader(new FileReader(“D:/Java/IO/Duom.dat”));

Arba

File f1 = new File(“D:/Java/IO”, “Duom.dat”);

BufferedReader ds = new BufferedReader(new FileReader(f1));

38

Page 39: Java pagrindai

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");

Page 40: Java pagrindai

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

}

}

Page 41: Java pagrindai

41

Page 42: Java pagrindai

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

Page 43: Java pagrindai

Įvestis ir išvestis tekstiniame faileĮvestis ir išvestis tekstiniame faile

Page 44: Java pagrindai

Papildomos IO klasės StringTokenizer – simbolių srauto skaidymas į “žodžius”. Metodai:

hasMoreElements – gražina boolean tipo reikšmę nextElement

Page 45: Java pagrindai

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());        }}

Page 46: Java pagrindai

import java.util.StringTokenizer; public class 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: 3token = atoken = stringtokenizertoken = sampletoken = 2005token = 12token = 15

Page 47: Java pagrindai

47

Page 48: Java pagrindai

KomentaraiNaudojant įvesties ir išvesties srautus su failais

visada naudokite situacijų apdorojimą:FileNotFoundExceptionIOException

Nuskaitymo ir įrašymo failai turi būti sukurti ir žinoma tiksli jų vieta

48

Page 49: Java pagrindai

Failo nuskaitymas

Page 50: Java pagrindai

Duomenų įrašymas į failą