кодесурса

Попробуйте с ресурсной возможностью Java 7

script1adsense2code
script1adsense3code

Вступление

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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code