Java paskaita Nr. 5 – Situacijų valdymas

Paskaitoje pradėjome dirbti su Netbeans ir nagrinėjome situacijų valdymą.

Situacijų valdymas

Įvairioms situacijoms sugauti ir programiniams įvykiams nukreipti tam tikra linkme, naudojamos tokios priemonės: try, catch, throw, finally. 

Programos ruošiamos realiam pasauliui turi būti apsaugotos nuo galimų klaidų ar klaidingų įvedamų duomenų.

Konstruojant patikrinimus yra privalomas try ir po jo einantis catch blokas.

Netbeans

Jeigu sistemoje neturite jokios Java galite iš karto siųsti visą komplektą Netbeans su JDK. Rasite čiawww.oracle.com/technetwork/java/javase/downloads

Užduotis

  1. Sukurti klasėje 2 metodus:
    • pirmasis metodas su THROW komanda sukuria FileNotFoundException;
    • antrasis metodas bando atidaryti nurodytą duomenų failą;
  2. Iškviesti abu metodus iš main metodo;

 

Sprendimas

Apsirašome public klasę ir pagrindinį metodą. Išvedame į ekraną Pradžia. Sukompiliuojame. Su Netbeans parašius kodą galima spausti Shift + F6 ir sukompiliuoja aktyviame lange esanti kodą.

import java.io.*; – yra skirtas importuoti papildomus standartinius metodus, kad galėtume atidaryti ir skaityti failus

import java.io.*;

public class TestExceptions {


    public static void main(String[] args) {
        System.out.println("Pradžia!");
    }


}

 

Konstruktorius failo priskyrimas

Pagrindiniame metodą aprašome konstruktorių ir priskiriame failo kelią argumentui fd. Ir būtinai nurodytame kelyje įkelkit failą duomEX.txt 

public static void main(String[] args) {
        System.out.println("Pradžia!");
        
        TestExceptions O1 = new TestExceptions(); //konstruktorius
        File fd = new File ("C:\\Java\\duomEX.txt"); //failo priskyrimas
        
    }

 

Pirmas metodas

  • pirmasis metodas su THROW komanda sukuria FileNotFoundException;

Apsirašome metodą, kuris būtent yra skirtas dirbtinai sukurti klaidą, kad nurodytoje vietoje nėra failo. Kad būtų galima ištestuoti ar tikrai veikia mūsų kodas realiai netikrinant failo.

public void pirmasM () throws FileNotFoundException {
       throw new FileNotFoundException("Nėra vardo");
   }

Pagrindinį metodą papildome try ir catch dalimis. Mūsų pirmame metode sukuriame klaida, kad failo nerastų. Tuomet su try pasileidžiame mūsų metodą. Ir jeigu jis neveikia su catch pagauname tą klaidą ir parodome pranešimą: Ivyko_file_no_found

try {
      O1.pirmasM();
      }
      
catch (FileNotFoundException e) {
          System.out.println("Ivyko_file_no_found");
          e.getMessage();
      }

 

Visas dabartinės programos kodas atrodo šitaip:

[expand title=”Išskleisti kodą” collapsed=”true”]

import java.io.*;

public class TestExceptions {
    
    public static void main(String[] args) {
        System.out.println("Pradžia!");
        TestExceptions O1 = new TestExceptions(); //konstruktorius
        File fd = new File ("C:\\Java\\duomEX.txt"); //failo priskyrimas
        
        try {
        O1.pirmasM();
        }
        
        catch (FileNotFoundException e) {
            System.out.println("Ivyko_file_no_found");
            e.getMessage();
        }   
        
        
    }

     public void pirmasM () throws FileNotFoundException {
        throw new FileNotFoundException("Nėra vardo");
    }

   

}

[/expand]

Antras metodas

  • antrasis metodas bando atidaryti nurodytą duomenų failą;

Šis metodas jau turės viduje argumentą būtent mūsų pagrindiniame metode aprašytą failą fd.

Ir čia jau būtent šio metodo viduje mes atliksime patį tikrinimą ir naudosime try ir catch. Tai būtent su BufferedReader nustatome ar toks failas egzistuoja. Ir vienu atveju išvedamas rastas, o kitu nėra.

public void antrasM (File fd) {
      BufferedReader file_in;
      try {
          file_in = new BufferedReader (new FileReader (fd));
          System.out.println("Failas rastas"); 
      }
      catch (FileNotFoundException ex) {System.out.println("Failas nerastas"); }
  }

Pagrindiniame metode iškomentuojame try ir catch metodus. Ir tiesiog paleidžiame O1.antrasM(fd); su failo argumentu fd. Pabandykite pakeisti kelią iki failo ir matysite skirtumą.

public static void main(String[] args) {
        System.out.println("Pradžia!");
        TestExceptions1 O1 = new TestExceptions1(); //konstruktorius
        File fd = new File ("C:\\Java\\duomEX.txt"); //failo priskyrimas
        
        
        O1.antrasM(fd);
       /* try {
        
        O1.pirmasM();
        }
        
        catch (FileNotFoundException e) {
            System.out.println("Ivyko_file_no_found");
            e.getMessage();
        }   */
        
        
    }

Turime gauti tokį rezultatą:

Pradžia!
Failas rastas

 

Pilnas programos kodas:

[expand title=”Išskleisti kodą” collapsed=”true”]

import java.io.*;

public class TestExceptions {


    public static void main(String[] args) {
        System.out.println("Pradžia!");
        TestExceptions O1 = new TestExceptions(); //konstruktorius
        File fd = new File ("C:\\Java\\duomEX.txt"); //failo priskyrimas
        
        
        O1.antrasM(fd);
       /* try {
        
        O1.pirmasM();
        }
        
        catch (FileNotFoundException e) {
            System.out.println("Ivyko_file_no_found");
            e.getMessage();
        }   */
        
        
    }

     public void pirmasM () throws FileNotFoundException {
        throw new FileNotFoundException("Nėra vardo");
    }
     
     
    public void antrasM (File fd) {
        BufferedReader file_in;
        try {
            file_in = new BufferedReader (new FileReader (fd));
            System.out.println("Failas rastas"); 
        }
        catch (FileNotFoundException ex) {System.out.println("Failo nėra"); }
    } 

   

}

[/expand]

 

Paleisti abu metodus iš main metodo

Ši dalis visai paprasta. Turime panaikinti komentarus ir įkelti metodą O1.antrasM(fd) į failo vidų. Metodas antrasM turi būtinai būti pirmas, nes kitu atveju iš karto gausime klaidą ir antrasM metodas, net nebus vykdome, nes jau iš karto įvyko klaida. Reikalingi pataisymai.

try {
      
      O1.antrasM(fd);
      O1.pirmasM();
      }
      
catch (FileNotFoundException e) {
          System.out.println("Ivyko_file_no_found");
          e.getMessage();
      }

 

Konsolėje gausime tokį rezultatą:

Pradžia!
Failas rastas
Ivyko_file_no_found

 

Trečias metodas

Šiame metode tiesiog sukelsime klaidos tikrinimą ir išmetimą į metodo vidų. Iš esmės, čia bus pirmas metodas tik viskas bus vykdome ne pagrindiniame mūsų metode, o iškviečiame per treciasM metodą.

public void treciasM () {
        try {
            throw new FileNotFoundException("Nėra vardo");
        } catch (FileNotFoundException ex) {
            System.out.println("FileNotFoundException klaida");
        }
    }

 

Pilnas galutinis programos kodas:

 

[expand title=”Išskleisti kodą” collapsed=”true”]

import java.io.*;

public class TestExceptions {


    public static void main(String[] args) {
        System.out.println("Pradžia!");
        TestExceptions O1 = new TestExceptions(); //konstruktorius
        File fd = new File ("C:\\Java\\duomEX.txt"); //failo priskyrimas
        
          
        try {
        
         //O1.antrasM(fd);
            O1.treciasM();
            O1.pirmasM();
        
        
        }
        
        catch (FileNotFoundException e) {
            System.out.println("Ivyko_file_no_found");
            e.getMessage();
        }   
        
        
    }

     public void pirmasM () throws FileNotFoundException {
        throw new FileNotFoundException("Nėra vardo");
    }
     
     
    public void antrasM (File fd) {
        BufferedReader file_in;
        try {
            file_in = new BufferedReader (new FileReader (fd));
            System.out.println("Failas rastas"); 
        }
        catch (FileNotFoundException ex) {System.out.println("Failo nėra"); }
    } 

   public void treciasM () {
        try {
            throw new FileNotFoundException("Nėra vardo");
        } catch (FileNotFoundException ex) {
            System.out.println("FileNotFoundException klaida");
        }
    }

}

[/expand]

Add a Comment

Your email address will not be published. Required fields are marked *