java pagrindai

Post on 19-Jan-2016

73 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

Java pagrindai

2 paskaita

lekt. dr. Asta Slotkienė

Turinys

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

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

Klasikinės klaidų tikrinimo priemonės

ifswitchreturn kodas

kartojimo ciklaiexitgotopranešimai

4

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

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

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

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

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

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

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

Java priemonės

try – catch blokaisakinys throwatributas throws , kuris deklaruoja reakcija į

situacijasfinally blokas

12

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

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

Vidiniai try-catch

try {// veiksmai

try { // veiksmai

} catch (ExceptionType1 s) { // veiksmai }

} catch (ExceptionType2 s) { // veiksmai }

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

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?

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

Paveldėjimas

19

PavyzdysTeisinga

try

{

//veiksmai

}catch (EOFException e){

//veiksmai

}

catch (IOException e){

//veiksmai

}

Klaidinga

try

{

//veiksmai

} catch (IOException e){

//veiksmai }

catch (EOFException e){

//veiksmai

}

20

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

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

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

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

Finallytry {

// veiksmai, kur gali įvykti situacijos

//veiksmai, kurie turi būti kontroliuojami

}

catch ([Exception tipas] e) {

// veiksmai įvykus situacijai 1

}

finally {

//kosmetiniai veiksmai

}

25

Exceptions klasių kūrimas

class ManoSituacija extends Exception {

public ManoSituacija () { }

public ManoSituacija (String turinys) {

super(turinys);

}

}

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

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

Įvestis ir išvestis

Į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

Paketas java.io

Įvedimas klaviatūra

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

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

32

Į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

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

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

Darbas su failais

import java.io.file

36

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)

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

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

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

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

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

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

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

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

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

47

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

Failo nuskaitymas

Duomenų įrašymas į failą

top related