산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 리소스 사용

자바 리소스 사용

이 자습서에서는 리소스를 자동으로 닫는 try-with-resources 문에 대해 알아봅니다.

try-with-resources 명령문은 명령문의 끝에서 모든 자원을 자동으로 닫습니다. 리소스는 프로그램이 끝날 때 닫을 개체입니다.

구문은 다음과 같습니다.

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

위 구문에서 볼 수 있듯이 try-with-resources를 선언합니다. 성명,

  1. try 내에서 리소스 선언 및 인스턴스화 조항.
  2. 리소스를 닫는 동안 발생할 수 있는 모든 예외를 지정하고 처리합니다.

참고: try-with-resources 문은 AutoCloseable 인터페이스를 구현하는 모든 리소스를 닫습니다.

<시간>

try-with-resources를 구현하는 예를 들어보겠습니다. 성명서.

예시 1:자원으로 시도

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

test.txt 파일을 찾을 수 없는 경우 출력합니다.

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

test.txt 파일을 찾으면 출력합니다.

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

이 예에서는 BufferedReader의 인스턴스를 사용합니다. test.txt에서 데이터 읽기 파일.

BufferedReader 선언 및 인스턴스화 try-with-resources 내부 문은 try 여부에 관계없이 해당 인스턴스가 닫히도록 합니다. 문이 정상적으로 완료되거나 예외가 발생합니다.

예외가 발생하면 예외 처리 블록이나 throw 키워드를 사용하여 처리할 수 있습니다.

<시간>

억제된 예외

위의 예에서 try-with-resources에서 예외가 발생할 수 있습니다. 다음의 경우:

try에서도 예외가 발생할 수 있습니다. 파일 읽기로 차단은 언제든지 여러 가지 이유로 실패할 수 있습니다.

try에서 예외가 발생하는 경우 블록 및 try-with-resources 명령문 try의 예외 블록이 발생하고 try-with-resources에서 예외가 발생합니다. 문이 표시되지 않습니다.

억제된 예외 검색

Java 7 이상에서는 Throwable.getSuppressed()을 호출하여 억제된 예외를 검색할 수 있습니다. try에서 throw된 예외의 메서드 차단합니다.

이 메서드는 억제된 모든 예외의 배열을 반환합니다. catch에서 억제된 예외를 얻습니다. 차단합니다.

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]);
  }
}
<시간>

try-with-resources 사용의 장점

try-with-resources 사용의 장점은 다음과 같습니다.

1. 마지막으로 리소스를 닫는 데 필요하지 않은 블록

Java 7이 이 기능을 도입하기 전에 finally을 사용해야 했습니다. 리소스 누출을 방지하기 위해 리소스가 닫혀 있는지 확인하기 위해 차단합니다.

다음은 예제 1과 유사한 프로그램입니다. . 그러나 이 프로그램에서는 finally 블록을 사용하여 리소스를 닫습니다.

예시 2:finally 블록을 사용하여 리소스 닫기

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

    }
  }
}

출력

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

위의 예에서 볼 수 있듯이 finally 리소스를 정리하는 블록은 코드를 더 복잡하게 만듭니다.

try...catch 주목 finally에서 차단 블록도? 이는 IOException BufferedReader을 닫는 동안에도 발생할 수 있습니다. 이 finally 내부의 인스턴스 차단하여 또한 포착 및 처리됩니다.

try-with-resources 문은 자동 리소스 관리를 수행합니다. . JVM이 자동으로 리소스를 닫기 때문에 명시적으로 리소스를 닫을 필요가 없습니다. 이렇게 하면 코드를 더 읽기 쉽고 쓰기 쉽게 만들 수 있습니다.

<시간>

2. 여러 리소스가 있는 리소스로 시도

try-with-resources에서 둘 이상의 리소스를 선언할 수 있습니다. 문을 세미콜론 ;으로 구분하여

예시 3:여러 리소스로 시도

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

이 프로그램이 예외를 생성하지 않고 실행되면 Scanner 개체는 testRead.txt에서 한 줄을 읽습니다. 파일을 만들고 새 testWrite.txt에 씁니다. 파일.

여러 선언이 이루어지면 try-with-resources 문은 이러한 리소스를 역순으로 닫습니다. 이 예에서 PrintWriter 객체가 먼저 닫힌 다음 Scanner 개체가 닫혔습니다.

<시간>

Java 9 자원 사용 개선

Java 7에는 try-with-resources에 대한 제한이 있습니다. 성명. 리소스는 해당 블록 내에서 로컬로 선언되어야 합니다.

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

Java 7에서 블록 외부에 리소스를 선언했다면 오류 메시지가 생성되었을 것입니다.

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

이 오류를 처리하기 위해 Java 9는 try-with-resources을 개선했습니다. 리소스의 참조가 로컬로 선언되지 않은 경우에도 사용할 수 있도록 명령문. 위의 코드는 이제 컴파일 오류 없이 실행됩니다.


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 if...else 문
  4. 자바 for-each 루프
  5. 자바 문자열
  6. 자바 인터페이스
  7. 자바 익명 클래스
  8. 자바 주석
  9. 자바 어설션
  10. 자바 벡터