Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Prueba de Java con recursos

Prueba de Java con recursos

En este tutorial, aprenderemos sobre la instrucción try-with-resources para cerrar los recursos automáticamente.

El try-with-resources sentencia cierra automáticamente todos los recursos al final de la sentencia. Un recurso es un objeto que se cerrará al final del programa.

Su sintaxis es:

try (resource declaration) {
  // use of the resource
} catch (ExceptionType e1) {
  // catch block
}

Como se ve en la sintaxis anterior, declaramos el try-with-resources declaración de,

  1. declarar e instanciar el recurso dentro del try cláusula.
  2. especificar y manejar todas las excepciones que pueden generarse al cerrar el recurso.

Nota: La instrucción try-with-resources cierra todos los recursos que implementan la interfaz AutoCloseable.


Tomemos un ejemplo que implementa el try-with-resources declaración.

Ejemplo 1:pruebe con recursos

import java.io.*;

class Main {
  public static void main(String[] args) {
    String line;
    try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    }
  }
}

Salida si no se encuentra el archivo test.txt.

IOException in try-with-resources block =>test.txt (No such file or directory)

Salida si se encuentra el archivo test.txt.

Entering try-with-resources block
Line =>test line

En este ejemplo, usamos una instancia de BufferedReader para leer datos del test.txt archivo.

Declarar e instanciar el BufferedReader dentro del try-with-resources declaración asegura que su instancia se cierra independientemente de si el try la declaración se completa normalmente o lanza una excepción.

Si ocurre una excepción, se puede manejar usando los bloques de manejo de excepciones o la palabra clave throws.


Excepciones suprimidas

En el ejemplo anterior, se pueden lanzar excepciones desde el try-with-resources declaración cuando:

También se puede lanzar una excepción desde el try bloquear como una lectura de archivo puede fallar por muchas razones en cualquier momento.

Si se lanzan excepciones tanto desde el try bloque y el try-with-resources declaración, excepción del try se lanza un bloque y una excepción del try-with-resources se suprime la declaración.

Recuperación de excepciones suprimidas

En Java 7 y versiones posteriores, las excepciones suprimidas se pueden recuperar llamando al Throwable.getSuppressed() método de la excepción lanzada por el try bloquear.

Este método devuelve una matriz de todas las excepciones suprimidas. Obtenemos las excepciones suprimidas en el catch bloquear.

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

Ventajas de usar Try-with-Resources

Estas son las ventajas de usar Try-with-Resources:

1. bloque finalmente no requerido para cerrar el recurso

Antes de que Java 7 introdujera esta característica, teníamos que usar el finally bloquear para asegurarse de que el recurso esté cerrado para evitar fugas de recursos.

Este es un programa similar al Ejemplo 1 . Sin embargo, en este programa, hemos utilizado el bloque finalmente para cerrar recursos.

Ejemplo 2:Cerrar recurso usando bloque finalmente

import java.io.*;

class Main {
  public static void main(String[] args) {
    BufferedReader br = null;
    String line;

    try {
      System.out.println("Entering try block");
      br = new BufferedReader(new FileReader("test.txt"));
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    } finally {
      System.out.println("Entering finally block");
      try {
        if (br != null) {
          br.close();
        }
      } catch (IOException e) {
        System.out.println("IOException in finally block =>"+e.getMessage());
      }

    }
  }
}

Salida

Entering try block
Line =>line from test.txt file
Entering finally block 

Como podemos ver en el ejemplo anterior, el uso de finally bloque para limpiar recursos hace que el código sea más complejo.

Observe el try...catch bloque en el finally bloquear también? Esto se debe a que un IOException también puede ocurrir al cerrar el BufferedReader instancia dentro de este finally bloque para que también sea capturado y manipulado.

El try-with-resources declaración hace administración automática de recursos . No necesitamos cerrar explícitamente los recursos ya que JVM los cierra automáticamente. Esto hace que el código sea más legible y fácil de escribir.


2. prueba-con-recursos con múltiples recursos

Podemos declarar más de un recurso en el try-with-resources declaración separándolas con un punto y coma ;

Ejemplo 3:prueba con varios recursos

import java.io.*;
import java.util.*;
class Main {
  public static void main(String[] args) throws IOException{
    try (Scanner scanner = new Scanner(new File("testRead.txt")); 
      PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) {
      while (scanner.hasNext()) {
        writer.print(scanner.nextLine());
      }
    }
  }
}

Si este programa se ejecuta sin generar ninguna excepción, Scanner objeto lee una línea del testRead.txt archivo y lo escribe en un nuevo testWrite.txt archivo.

Cuando se realizan múltiples declaraciones, el try-with-resources sentencia cierra estos recursos en orden inverso. En este ejemplo, el PrintWriter el objeto se cierra primero y luego el Scanner el objeto está cerrado.


Mejora de prueba con recursos de Java 9

En Java 7, hay una restricción al try-with-resources declaración. El recurso debe declararse localmente dentro de su bloque.

try (Scanner scanner = new Scanner(new File("testRead.txt"))) {
  // code
}

Si declaramos el recurso fuera del bloque en Java 7, habría generado un mensaje de error.

Scanner scanner = new Scanner(new File("testRead.txt"));
try (scanner) {
  // code
}

Para solucionar este error, Java 9 mejoró el try-with-resources declaración para que la referencia del recurso se pueda usar incluso si no se declara localmente. El código anterior ahora se ejecutará sin ningún error de compilación.


Java

  1. Operadores Java
  2. Comentarios Java
  3. Declaración if...else de Java
  4. Java para cada bucle
  5. Declaración de interrupción de Java
  6. Cadenas Java
  7. Interfaz Java
  8. Clase anónima de Java
  9. Anotaciones Java
  10. Aserciones de Java
  11. Java Vector