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

Примеры Java try-catch

Блок Java try-catch используется для обработки исключений в программе. Код в блоке try выполняется, и если возникает какое-либо исключение, используется блок catch

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

  • Блок Java try-catch используется для обработки исключений в программе.
  • Код в блоке try выполняется, и если возникает какое-либо исключение, для их обработки используется блок catch.
  • Если блок catch не в состоянии обработать исключение, оно возвращается вызывающей программе.
  • Если программа не в состоянии обработать исключение, оно возвращается в JVM, которая завершает программу и выводит трассировку стека исключений в выходной поток.
  • За блоком try должен следовать либо catch, либо, наконец, блок.

Пример Java try-catch

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

package com.journaldev.examples;

public class JavaTryCatch {

	public static void main(String[] args) {
		System.out.println(divide(20,5));
		System.out.println(divide(20,0));
	}
	
	public static double divide(int x, int y) {
		return x/y;
	}

}

Выход:

4.0
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.journaldev.examples.JavaTryCatch.divide(JavaTryCatch.java:11)
	at com.journaldev.examples.JavaTryCatch.main(JavaTryCatch.java:7)

Теперь давайте посмотрим, как использовать блок try-catch для обработки исключения, вызванного методом divide ().

package com.journaldev.examples;

public class JavaTryCatch {

	public static void main(String[] args) {
		try {
			System.out.println(divide(20, 5));
			System.out.println(divide(20, 0));
		} catch (ArithmeticException ae) {
			System.out.println(ae.getMessage());
		}
	}

	public static double divide(int x, int y) {
		return x / y;
	}

}

Выход:

4.0
/ by zero

Java пытается поймать несколько исключений

Мы можем перехватывать несколько исключений в серии блоков catch. Давайте рассмотрим простой пример использования нескольких блоков catch.

package com.journaldev.examples;

public class JavaTryCatch {

	public static void main(String[] args) {

		try {
			foo(10);
		} catch (IllegalArgumentException ie) {
			System.out.println(ie.getMessage());
		} catch (NullPointerException ne) {
			System.out.println(ne.getMessage());
		}
	}

	public static void foo(int x) throws IllegalArgumentException, NullPointerException {
		// some code
	}

}

Порядок Перехвата Исключений

Исключения Java имеют иерархию. Throwable-это суперкласс всех исключений и ошибок. При перехвате нескольких исключений сначала должно быть перехвачено наиболее конкретное исключение. В противном случае во время компиляции возникает ошибка с сообщением “Недоступный блок перехвата”. Это уже обрабатывается блоком catch для исключения”.

Приведенный ниже код приведет к ошибке во время компиляции, поскольку исключение NullPointerException должно быть поймано до исключения.

try {
	foo(10);
} catch (Exception ie) {
	System.out.println(ie.getMessage());
} catch (NullPointerException ne) {
	System.out.println(ne.getMessage());
}

Перехват нескольких исключений в одном блоке перехвата

Если вы заметили приведенный выше код, мы печатаем сообщение об исключении во всех блоках catch. Java поддерживает перехват нескольких исключений в одном блоке перехвата. Эта функция была введена в Java 7.

try {
	foo(10);
} catch (IllegalArgumentException | NullPointerException e) {
	System.out.println(e.getMessage());
}

Пример Java try-catch-finally

Блок finally всегда выполняется, даже если программа создает исключение и завершает работу. Блок finally обычно используется для того, чтобы убедиться, что ресурсы закрыты до завершения программы.

Вот реальный пример блока “попробуй-поймай-наконец”. Мы пытаемся открыть файл и обработать его. Мы используем блок finally, чтобы убедиться, что поток ввода файлов закрыт.

package com.journaldev.examples;

import java.io.FileInputStream;
import java.io.IOException;

public class JavaTryCatch {

	public static void main(String[] args) {
		FileInputStream fis = null;
		try {
			fis = new FileInputStream("data.txt");
			// code to process the file
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fis != null)
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}

	}

}