java 7 새로운 기능의 Try-with-resources statement
4083 단어 java 기초
try
- with-resources 문장은 1~여러 자원을 설명하는try 문장입니다.자원은 이try가 실행된 후에 반드시close를 없애야 하는 대상을 가리킨다. 예를 들어connection,resultset 등이다.try
- with-resources 문장은try 문장이 끝날 때 모든 자원을 닫을 수 있도록 합니다.실현java.lang.AutoCloseable
또는 java.io.Closeable
의 대상은 모두 자원으로 할 수 있다.다음은 한 파일에서 첫 줄 텍스트를 읽는 예입니다.
BufferedReader
의 실례를 사용해서 데이터를 읽습니다. BufferedReader
는 프로그램이 끝날 때 닫혀야 하는 자원입니다.static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
이 예에서 자원은
BufferedReader
이고 성명문은try 뒤의 괄호 안에 있다.자바 7 이상 버전에서는 BufferedReader java.lang.AutoCloseable
인터페이스가 있습니다.BufferedReader
는 try
-with-resource 문장에 정의되어 있기 때문에try 코드 블록이 정상적으로 완성되었든 이상이 발생하든 이 BufferedReader
의 실례는 닫힙니다.
자바 7 이전 버전에서finally 코드 블록을 사용하여 자원이 닫혔는지 확인할 수 있습니다. (try가 정상적으로 완성되었든 이상이 발생했든)다음은finally를 사용하는 예입니다.static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
그러나 이 예에서 만약readLine 방법과close 방법이 모두 이상을 던졌다면 readFirstLineFromFileWithFinallyBlock
방법은finally 코드 블록 안의 이상, 즉close 방법에 나타난 이상만 던졌을 뿐try 코드 블록 안의 이상은 금지되었다.반면readFirstLineFromFile
이라는 예에서 try
코드 블록과 try
-with-resources 문장에 이상이 발생하면readFirstLineFromFile
방법은try 코드 블록에서 나온 이상을 던져주고try
-with-resources에서 던진 이상은 금지된다.자바 7 이상 버전에서는 금지된 이상을 얻을 수 있습니다.
너는 1부터 여러 개의 자원을 성명할 수 있다. 아래의 예를 보아라public static void writeToFileZipFileContents(String zipFileName, String outputFileName)
throws java.io.IOException {
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);
// Open zip file and create output file with try-with-resources statement
try (
java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
) {
// Enumerate each entry
for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name and write it to the output file
String newLine = System.getProperty("line.separator");
String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;
writer.write(zipEntryName, 0, zipEntryName.length());
}
}
}
이 예에서 두 개의 자원이 있는데 자원 사이를 분호로 구분한다.자원이 닫히는 순서는 만들어지는 순서와 상반된다. 즉, writer가 먼저 닫히고, 그 다음은 zf이다.
다음은 try
-with-resources 문장을 사용하여 java.sql.Statement
대상을 자동으로 닫습니다.public static void viewTable(Connection con) throws SQLException {
String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
try (Statement stmt = con.createStatement()) {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String coffeeName = rs.getString("COF_NAME");
int supplierID = rs.getInt("SUP_ID");
float price = rs.getFloat("PRICE");
int sales = rs.getInt("SALES");
int total = rs.getInt("TOTAL");
System.out.println(coffeeName + ", " + supplierID + ", " + price +
", " + sales + ", " + total);
}
} catch (SQLException e) {
JDBCTutorialUtilities.printSQLException(e);
}
}
여기java.sql.Statement
는 JDBC4.1 이상 API의 일부입니다.
주의: try
- with-resources에도catch와finally 문장 블록이 있습니다. 보통try 문장을 사용하는 것과 같습니다.try
-with-resources 문장에서catch나finally는 자원이 닫힌 후에 실행됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 네트워크 프로그래밍의 UDP 서버 및 클라이언트 프로그램서버: 클라이언트: UDP: 클라이언트를 열어 데이터를 받을 때까지 기다린 다음 서버를 열어 데이터를 보냅니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.