Попробуйте с ресурсной возможностью Java 7
Вступление
Java 7 представляет новую языковую функцию, которая называется оператором try-with-resource. Как правило, мы видим оператор соединения с базой данных, набор результатов, потоки файлового ввода-вывода и т. Д., Работающие внутри блока try, поскольку внутри него объявлено проверенное исключение. До Java 7 мы могли бы написать код для закрытия этих ресурсов в блоке finally. Пример кода ниже объясняет без этой функции (это допустимый способ написания, но не очень читаемый код)
Java-код:
package trywithresource;
public class TryCatchFinally {
public void Demo() {
try {
// create resource statements
} catch (Exception e) {
// Handle the Exceptions
} finally {
//if resource is not null
try{
//close the resources
}catch (Exception resourceClosingExp){
}
}
}
}
Мы должны явно закрыть ресурс и тем самым добавить еще несколько строк кода. Есть несколько случаев, когда разработчик забудет закрыть ресурс, и это приведет к утечке памяти и снижению производительности в большом приложении. Таким образом, чтобы преодолеть эти и другие проблемы, в Java 7 введен try-with-resources. Чтобы понять обработку ресурсов, давайте рассмотрим пример. Здесь, в программе ниже, мы определяем два пользовательских исключения (ExceptionA и ExceptionB). У нас также есть класс myResource, который имеет два метода doSomeWork () и closeResource (), здесь оба метода генерируют проверенные исключения, которые должны быть обработаны вызывающим классом. У нас есть основной класс, который создает объект myResource и вызывает метод doSomeWork (). Внутри, наконец, блока это закрытие ресурса.
Java-код:
package trywithresource;
public class MyResource {
public void doSomeWork(String work) throws ExceptionA{
System.out.println("Doing: "+work);
throw new ExceptionA("Exception occured while doing work");
}
public void close() throws ExceptionB{
System.out.println("Closing the resource");
throw new ExceptionB("Exception occurred while closing");
}
}
Java-код:
package trywithresource;
public class OldTryDemo {
public static void main(String[] args) {
MyResource res = null;
try {
res = new MyResource();
res.doSomeWork("Writing an article");
} catch (Exception e) {
System.out.println("Exception Message: " + e.getMessage()
+ " Exception Type: " + e.getClass().getName());
} finally {
try {
res.close();
} catch (Exception e) {
System.out.println("Exception Message: " + e.getMessage()
+ " Exception Type: " + e.getClass().getName());
}
}
}
}
Выход:
Как видите, 21 строка кода и читаемость кода снизились. Теперь давайте реализуем ту же программу, используя конструкцию try-with-resource в Java 7. Для этого нам понадобится новый ресурс - NewResource. В Java 7 был представлен новый интерфейс с именем java.lang.AutoCloseable. Те ресурсы, которые нужно закрыть, автоматически реализуют этот интерфейс. Все старые API ввода-вывода, API-интерфейсы сокетов и т. Д. Реализуют интерфейс Closeable - это означает, что эти ресурсы могут быть закрыты.
В Java 7 java.io.Closeable реализует AutoCloseable. Так что все работает без нарушения существующего кода.
Java-код:
package trywithresource;
public class NewResource implements AutoCloseable {
String closingMessage;
public NewResource(String closingMessage) {
this.closingMessage = closingMessage;
}
public void doSomeWork(String work) throws ExceptionA {
System.out.println(work);
throw new ExceptionA("Exception thrown while doing some work");
}
public void close() throws ExceptionB {
System.out.println(closingMessage);
throw new ExceptionB("Exception thrown while closing");
}
public void doSomeWork(NewResource res) throws ExceptionA {
res.doSomeWork("Wow res getting res to do work");
}
}
Java-код:
package trywithresource;
public class TryWithResource {
public static void main(String[] args) {
try (NewResource res = new NewResource("Res1 closing")) {
res.doSomeWork("Listening to podcast");
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage() + " Thrown by: "
+ e.getClass().getSimpleName());
}
}
}
Выход:
Одна вещь, которую стоит отметить выше, это то, что Исключение, выброшенное закрытием, подавляется. Таким образом, вы можете сразу заметить разницу между двумя реализациями, одна из которых использует try… catch… finally, а другая - try-with-resource. В приведенном выше примере только один ресурс объявлен как используемый. Можно объявить и использовать несколько ресурсов в блоке try, а также вложить эти блоки try-with-resources.
Резюме:
- Try-with-Resource - это дополнительная функциональность, введенная в Java 7 для облегчения разработки кода, но ее использование не обязательно, мы также можем продолжать использовать блок try-catch-finally.
- Try-with-Resource сделает код более читабельным, а значит, простым для понимания и управления.
Редактор кода Java:
Предыдущая: Пользовательское исключение
Далее: Струнный класс
Новый контент: Composer: менеджер зависимостей для PHP , R программирования