Java mənbələri ilə cəhd edin


JavaBaxılıb 39

Java 7, mənbələrdən istifadə edərək bağlamaq üçün yeni bir yol təqdim etdi Avtomatik resurs idarəetməsi və ya ehtiyatları sınayın. Bu təlimdə, resursları sınamaq üçün necə istifadə edəcəyimizi ətraflı öyrənəcəyik.

Java mənbələri ilə sınayın

Java-with-kaynaqlar, try adlı bəyanat daxilində mənbəyi elan etmək deməkdir. Resurs, bir obyekti istifadə etdikdən sonra bağlamaq və ya buraxmaqdan başqa bir şey deyildir. Bu, əsasən obyektin tutduğu yaddaşı buraxmaq üçündür. Java 7-dən əvvəl, içindəki obyekti bağlayırıq finally hər hansı bir istisna baş verərsə obyekti etibarlı şəkildə buraxacaq şəkildə bloklayın. İndi əvəz edə bilərik finally avtomatik olaraq obyekti bağlayan resurs ilə sınamaq ifadəsi.

Tətbiq edən hər hansı bir obyekt obyektini bağlamaq üçün Java-da Avtomatik qaynaq idarəetməsindən istifadə edə bilərik java.lang.AutoCloseable or java.io.Closeable.

sintaksis

try(resource declaration) {
  //code
}
catch(ExceptionType e) {
//handle exception
}

Resursla sınayın nümunəsi

Aşağıda, mənbəyi avtomatik bağlamaq üçün resurs ilə sınayın ifadəsi nümunəsi verilmişdir. Deneme blokunu icra etdikdən sonra AutoCloseable interfeysinin yaxın metodunu çağıraraq obyekti etibarlı bir şəkildə bağlayır.

import java.io.*;

public class TryDemo {
  
  public static void main(String[] args) {
    String filename = "E\\CheckedException.txt";
    try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
      System.out.println(br.readLine());
    }
    catch(IOException e) {
      System.out.println(e.getMessage());
    }

  }

}

İstisna olmadıqda aşağıda çıxış göstərilir.

This is an example of checked exception

İstisna olduqda çıxış. Məsələn, səhv bir fayl adını CheckedException.txt yerinə CheckedExceptions.txt olaraq ötürdüyümüzdə FileNotFoundException atır.

E:\CheckedExceptions.txt (The system cannot find the file specified)

Java-try-with-resources istifadə etmiriksə, try-catch-nihayetində kod aşağıdakı kimi görünür. Daxilində finally blok, BufferedReader obyektini istifadə edərək bağlamalıyıq try-catch.

import java.io.*;

public class TryDemo {
  
  public static void main(String[] args) {
    String filename = "E:\\CheckedException.txt";
    BufferedReader br = null;
    try {
      br = new BufferedReader(new FileReader(filename));
      System.out.println(br.readLine());
    }
    catch(IOException e) {
      System.out.println(e.getMessage());
    }
    finally {
      try {
        if(br != null)
          br.close();
      }
      catch(IOException e) {
        e.printStackTrace();
      }
    }

  }

}

Java birdən çox mənbədən istifadə edərək resursları sınayın

Oxşar çox istisnalardan istifadəistifadə edərək birdən çox mənbəyi idarə edə bilərik try bəyanat. Mənbələri nöqtəli vergül ayırıcıdan istifadə edərək təyin edə bilərik (;).

Sintaksis:

try(resource1;resource2) {
 //code
}
catch(Exception e) {
 //Handle exception
}

Misal:

Aşağıdakı nümunədə, BufferedReader və BufferedWriter-i 2 ifadəsi olaraq try ifadəsində istifadə etdik. Avtomatik qaynaq idarəetməsindən istifadə edərək həm mənbələri avtomatik olaraq bağlayır. Bağlayarkən, obyektləri tərs qaydada bağlayır.

import java.io.*;

public class MultiResourceDemo {

  public static void main(String[] args) {
    String filename = "E:\\Input.txt";
    String fname = "E:\\Output.txt";
    try(BufferedReader br = new BufferedReader(new FileReader(filename));
        BufferedWriter bw = new BufferedWriter(new FileWriter(fname))){
        
      String line = br.readLine();
      System.out.println("Read from input file");
      System.out.println("Text in input file is: " + line);
      bw.write(line);
      System.out.println("Write to output file");
    }
    catch(IOException e) {
      System.out.println(e.getMessage());
    }
    catch(NullPointerException e) {
      System.out.println(e.getMessage());
    }

  }

}
Read from input file
Text in input file is: Example of try-with-resources
Write to output file

Java nəhayət istifadə edərək resursları sınayın

Nəhayət bloku normal try-catch-a oxşar java try-with-resources ilə birlikdə istifadə edə bilərik. The finally blok bütün açıq mənbələri uğurla bağladıqdan sonra həyata keçirir. İstisnanın olub-olmamasından asılı olmayaraq icra olunur.

import java.io.*;

public class TryDemo {
  
  public static void main(String[] args) {
    String filename = "C:\\Users\\nandi\\Documents\\Input.txt";
    try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
      System.out.println("File Content:");
      System.out.println(br.readLine());
    }
    catch(IOException e) {
      System.out.println(e.getMessage());
    }
    finally {
      System.out.println("Finally block");
    }

  }

}
File Content:
Example of try-with-resources
Finally block

Java 9 genişləndirilmiş mənbələrlə sınanır

Java 9, resursları sınamağın inkişaf etmiş bir versiyasını təqdim etdi. Doğrudan da sınağın parantezində mənbənin bir nümunəsini yaratmaq əvəzinə, cəhd blokundan əvvəl mənbəyi elan edə və sınanan parantez içərisində obyektdən tək istifadə edə bilərik.

Java 9-dan əvvəl

try(BufferedReader br = new BufferedReader(new FileReader(filename))) {
 //code
}

Java 9-dan sonra

BufferedReader br = new BufferedReader(new FileReader(filename));
try(br) {
 //code
}

Hər iki kod avtomatik qaynaq idarəetməsini idarə edir.

Bastırılmış ifadələr

Həm cəhd blokunun, həm də resurslarla birlikdə sınaqların bir istisna yarada biləcəyi vəziyyətlər var. Bu vəziyyətdə, cəhd bloku istisnası atılır və resurslarla sınan istisnası yatırılır.

Bunları əldə edə bilərik Java 7 versiyasında və yuxarıdakı ifadələri istifadə edərək Throwable.getSuppressed() üsul. Bir sıra istisnaları qaytarır və onu blokda əldə edə bilər.

catch(IOException e) {
  System.out.println(e.getMessage());
  Throwable[] exceptions = e.getSuppressed();
  for(int i=0;i<exceptions.length;i++) {
    System.out.println("Suppressed exceptions: " + exceptions[i]);
  }
}

Resursları sınamağın üstünlükləri

Aşağıda java ilə resursları sınamağın faydaları və xüsusiyyətləri verilmişdir.

  • Resursları bağlamaq üçün nəhayət blok tələb etmirik.
  • Dəyişdirmə ifadəsində eyni anda birdən çox mənbədən istifadə edə bilərik.
  • Kodu daha oxunaqlı və anlaşılan edir.
  • Avtomatik resurs idarəetməsini həyata keçirir.

AutoCloseable interfeysi ilə xüsusi resursun tətbiqi

AutoCloseable və ya Closeable interfeysini tətbiq edərək öz resurs sinifimizi yarada bilərik. Metodu öz mənbəyimizdə yaxın bir şəkildə ləğv etməliyik. Yeni bir mənbəni try ifadəsi daxilində çağırdığımızda, blok blokunun icrasından sonra avtomatik olaraq yaxın metodu çağırır.

public class ExceptionClass {

  public static void main(String[] args) {
    try(NewResource r = new NewResource()) {
      System.out.println("Calling New Resource within try block");
    }
    catch(Exception e) {
      System.out.println(e.getMessage());
    }
    System.out.println("Outside try block");
  }
  
  static class NewResource implements AutoCloseable {

    @Override
    public void close() throws Exception {
      System.out.println("Closed new resource");
      
    }
    
  }

}
Calling New Resource within try block
Closed new resource
Outside try block

 

arayış

Şərh yaz

Translate »