Обработка исключений является одной из наиболее важных концепций в любом языке программирования, поэтому рано или поздно в вашем путешествии вам придется ее изучить. В этой статье речь пойдет не об обработке исключений в целом, а о некоторых изменениях, внесенных в синтаксис Java, и о том, как воспользоваться преимуществами этого изменения (называется try-with-resources) .
Синтаксис обычного блока try-catch-finally:
try { // code to try } catch(Exception e){ // code when error occurs } finally{ // code to run no matter the outcome }
Синтаксис попробуйте-с-ресурсами :
try (AutoCloseable objects){ // code to try } catch(Exception e){ // code when error occurs } finally{ // code to run no matter the outcome // the finally block can be optional. }
Теперь предположим, что мы хотим записать данные в файл.
В JDK 6 и ниже мы пишем это как:
File file = new File("test.txt"); FileWriter fw = null; try { fw = new FileWriter(file); fw.write("Hello World in the file!!\n"); // fw.close(); // close it if everything goes well (optional) } catch(IOException ioe){ System.out.println("Error writing to file"); } finally{ try { if(fw != null){ fw.close(); // we close the file } } }
Это был хороший способ, и он все еще есть, но мы всегда должны закрывать файл вручную. Что делать, если мы забудем закрыть файл или забудем включить блок finally, тогда произойдет утечка ресурсов. В небольшой программе это будет казаться нормальным, но в большой программе …:(
В JDK 7 и выше мы пишем это как:
File file = new File("test.txt"); try (FileWriter fw = new FileWriter(file);){ fw.write("Hello World to the file!! \n"); }catch(IOException ioe){ System.out.println("Error writing to file"); }finally{ // do something else // the finally block is optional }
Мы даже можем добавить еще много закрываемых объектов внутри круглой скобки, но они должны быть разделены точкой с запятой. например:
try(FileWriter fw = new FileWriter(parameter); PrintWriter pw = new PrintWriter(parameter);){ ...... // rest of code
Теперь это намного проще, потому что Java автоматически закроет файл после блокировки try-catch. У этого есть несколько ограничений, попытка с ресурсами работает с:
- Только классы, реализующие интерфейс с возможностью автоматического закрытия.
- Объект должен быть создан внутри круглой скобки, например:
FileWriter fw = new FileWriter(parameter);
Не всегда так хорошо использовать попытку с ресурсами, например, создать приложение для чата, потому что сервер должен быть открыт для подключений, чтобы клиент мог отправлять и получать данные.
Вы можете использовать оба способа, и они будут работать на любой версии Java, которую вы используете, это зависит от того, что вам удобно использовать.
Оригинал: “https://dev.to/benjithorpe/exception-handling-with-jdk-6-vs-jdk-7-and-above-fm3”