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

Попробуйте Java с ресурсами

Попробуйте использовать ресурсы. Попробуйте Java с примером ресурсов. Java 7 попробуйте использовать с ресурсами автоматическое управление ресурсами, пример управления ресурсами с возможностью автоклавирования.

Автор оригинала: Pankaj Kumar.

Сегодня мы рассмотрим Java Try с ресурсами. Одной из функций Java 7 является инструкция try-with-resources для автоматического управления ресурсами.

Попробуйте с ресурсами

Ресурс-это объект, который должен быть закрыт, как только ваша программа закончит его использовать. Например, Файл ресурс или JDBC ресурс для подключения к базе данных или Сокет ресурс подключения. До Java 7 не существовало автоматического управления ресурсами, и мы должны явно закрыть ресурс, как только наша работа с ним будет завершена. Обычно это делалось в блоке finally оператора try-catch . Этот подход приводил к утечкам памяти и снижению производительности, когда мы забывали закрыть ресурс.

Давайте посмотрим фрагмент псевдокода, чтобы понять эту функцию java try with resources.

До Java 7 :

try{
	//open resources like File, Database connection, Sockets etc
} catch (FileNotFoundException e) {
	// Exception handling like FileNotFoundException, IOException etc
}finally{
	// close resources
}

Java 7 попробуйте с реализацией ресурсов :

try(// open resources here){
    // use resources
} catch (FileNotFoundException e) {
	// exception handling
}
// resources are closed as soon as try-catch block is executed.

Давайте напишем простую программу для чтения файла и распечатаем первую строку, используя Java 6 или более старые версии и Java 7 попробуйте с ресурсами реализация.

Пример управления ресурсами Java 6

package com.journaldev.util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Java6ResourceManagement {

	public static void main(String[] args) {
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader("C:\\journaldev.txt"));
			System.out.println(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null)
					br.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}
}

Java 7 Попробуйте С Примером Ресурсов

package com.journaldev.util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Java7ResourceManagement {

	public static void main(String[] args) {
		try (BufferedReader br = new BufferedReader(new FileReader(
				"C:\\journaldev.txt"))) {
			System.out.println(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Попробуйте Java с преимуществами ресурсов

Некоторые из преимуществ использования try с ресурсами на java заключаются в следующем;

  1. Более читаемый код и его легко писать.
  2. Автоматическое управление ресурсами.
  3. Количество строк кода уменьшается.
  4. Нет необходимости в окончательной блокировке только для того, чтобы закрыть ресурсы.
  5. Мы можем открыть несколько ресурсов в инструкции try-with-resources, разделенной точкой с запятой. Например, мы можем написать следующий код:
  6. Когда в try-with-resources открывается несколько ресурсов, он закрывает их в обратном порядке, чтобы избежать каких-либо проблем с зависимостями. Вы можете расширить мою программу ресурсов, чтобы доказать это.

Java 7 представила новый интерфейс java.lang.Автоклавируемый . Чтобы использовать любой ресурс в try-with-resources, он должен реализовать автоклавируемый интерфейс, иначе компилятор java выдаст ошибку компиляции.

Давайте подтвердим это примером:

package com.journaldev.util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;

public class Java7ResourceManagement {

	public static void main(String[] args) {

		try (MyResource mr = new MyResource()) {
			System.out.println("MyResource created in try-with-resources");
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("Out of try-catch block.");
	}

	static class MyResource implements AutoCloseable{

		@Override
		public void close() throws Exception {
			System.out.println("Closing MyResource");
		}

	}
}

Результатом приведенной выше программы является:

MyResource created in try-with-resources
Closing MyResource
Out of try-catch block.

Из выходных данных ясно, что, как только блок try-catch завершен, вызывается метод закрытия ресурса.

Попробуйте с исключениями ресурсов

Следует отметить одно различие между попыткой поймать, наконец, и попыткой с ресурсами в случае исключений .

Если исключение создается как в блоке try, так и в блоке finally, метод возвращает исключение, созданное в блоке finally.

Для try-с-ресурсами, если исключение создается в блоке try и в инструкции try-с-ресурсами, метод возвращает исключение, созданное в блоке try.

Чтобы лучше прояснить это различие, мы рассмотрим пример кода.

package com.journaldev.util;

public class Java7ResourceManagement {

	public static void main(String[] args) throws Exception {
		try {
			tryWithResourceException();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		try {
			normalTryException();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}

	private static void normalTryException() throws Exception {
		MyResource mr = null;
		try {
			mr = new MyResource();
			System.out.println("MyResource created in the try block");
			if (true)
				throw new Exception("Exception in try");
		} finally {
			if (mr != null)
				mr.close();
		}

	}

	private static void tryWithResourceException() throws Exception {
		try (MyResource mr = new MyResource()) {
			System.out.println("MyResource created in try-with-resources");
			if (true)
				throw new Exception("Exception in try");
		}
	}

	static class MyResource implements AutoCloseable {

		@Override
		public void close() throws Exception {
			System.out.println("Closing MyResource");
			throw new Exception("Exception in Closing");
		}

	}
}

Результатом приведенной выше программы является:

MyResource created in try-with-resources
Closing MyResource
Exception in try
MyResource created in the try block
Closing MyResource
Exception in Closing

Вывод программы доказывает приведенную выше разницу. Это все для Java 7, попробуйте с ресурсами.