Рубрики
Без рубрики

Обработка исключений с JDK 6 по сравнению с JDK 7 и выше.

Обработка исключений является одной из наиболее важных концепций в любом языке программирования, поэтому рано или поздно… С пометкой java, учебник, новички, новичок в коде.

Обработка исключений является одной из наиболее важных концепций в любом языке программирования, поэтому рано или поздно в вашем путешествии вам придется ее изучить. В этой статье речь пойдет не об обработке исключений в целом, а о некоторых изменениях, внесенных в синтаксис 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”