try catch finally
이 튜토리얼에서는 Try, Catch, finally, Throw 및 Throws와 같은 예외 처리를 위해 Java에서 사용되는 다양한 키워드를 예제와 함께 설명합니다.
이전 튜토리얼에서 Java Exception 클래스에서 지원하는 다양한 예외와 함께 Java에서 예외 처리의 기본 사항을 살펴 보았습니다. NullPointerException에 대해서도 자세히 설명했습니다.
Java에서 제공되는 특정 키워드를 사용하여 프로그램에 예외를 포함 할 수 있습니다. 이러한 키워드는 예외 정의 및 처리를 용이하게하는 다양한 코드 블록을 정의합니다.
=> 독점적 인 Java 교육 자습서 시리즈를 보려면 여기를 방문하십시오.
학습 내용 :
시도, 캐치, 마지막으로 자바
아래 키워드는 Java에서 예외 처리를 위해 사용됩니다.
- 시험
- 잡기
- 드디어
- 던지다
- 던짐
다음 표에서는 이러한 키워드에 대해 간략하게 설명합니다.
예어 | 기술 |
---|---|
시험 | 'Try'키워드를 사용하여 특수 블록에서 예외를 발생시킬 수있는 코드 블록을 지정합니다. |
잡기 | 예외가 발생하면 프로그램에서이를 포착해야합니다. 이것은 'catch'키워드를 사용하여 수행됩니다. 따라서 catch 블록은 예외를 발생시키는 try 블록을 따릅니다. catch 키워드는 항상 try와 함께 사용해야합니다. |
드디어 | 때로는 예외가 발생했는지 여부에 관계없이 실행되어야하는 중요한 코드가 프로그램에 있습니다. 이 코드는 'Finally'키워드로 시작하는 특수 블록에 배치됩니다. 마지막 블록은 Try-catch 블록을 따릅니다. |
던지다 | 'throw'키워드는 예외를 명시 적으로 throw하는 데 사용됩니다. |
던짐 | 'Throws'키워드는 예외를 throw하지 않지만 예외를 선언하는 데 사용됩니다. 이 키워드는 프로그램 또는 메소드에서 예외가 발생할 수 있음을 표시하는 데 사용됩니다. |
이 튜토리얼에서는 위의 모든 키워드를 프로그래밍 예제와 함께 자세히 설명합니다.
Java에서 차단 시도
프로그램을 작성할 때마다 예외가 발생할 수 있다고 의심되는 코드가있을 수 있습니다. 예를 들면 예외를 발생시키는 코드에 '0으로 나누기'연산이있을 수 있다고 의심 할 수 있습니다.
예외를 발생시킬 수있는이 코드는 'try'키워드로 블록으로 묶여 있습니다. 따라서 try 블록에는 예외를 발생시킬 수있는 코드 또는 문 집합이 포함됩니다.
try 블록의 일반 구문은 다음과 같습니다.
try{ //set of statements that can raise exception }
따라서 프로그래머가 특정 명령문이 예외를 발생시킬 것이라고 생각하면이 명령문을 try 블록으로 묶습니다. try 블록의 특정 문에서 예외가 발생하면 나머지 코드는 실행되지 않습니다.
특정 명령문의 try 블록에서 예외가 발생하면 제어가 나오고 프로그램이 갑자기 종료됩니다. 이러한 갑작스러운 프로그램 종료를 방지하려면이 예외를 '처리'해야합니다. 이 처리는 'catch'키워드를 사용하여 수행됩니다. 따라서 try 블록에는 항상 catch 블록이 있습니다.
자바에서 블록 잡기
예외를 처리하기 위해 catch 블록을 사용합니다. 이것은 'catch'키워드가있는 블록입니다. catch 블록은 try 블록을 따릅니다.
try 블록에서 예외가 발생할 때마다 예외에 해당하는 catch 블록의 코드가 실행됩니다.
catch 블록의 일반적인 구문은 다음과 같습니다.
catch (Exception e){ //code to handle exception e }
일반적으로 선언 된 예외는 모든 예외의 상위 클래스 (예 : Exception) 여야합니다. 그러나 둘 이상의 예외가있는 경우 특정 예외 유형 또는 생성 된 예외를 작성할 수도 있습니다.
다음으로 try-catch 블록에 대해 설명합니다. 각 try 블록에 대해 여러 catch 블록을 가질 수 있습니다.
Try-Catch Java
try-catch 블록의 일반 구문은 다음과 같습니다.
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
try 블록에는 여러 예외를 발생시킬 수있는 여러 줄의 코드가있을 수 있습니다. 이러한 각 예외는 독립적 인 catch 블록에서 처리됩니다.
일반 예외 처리기, Exception 클래스의 객체 e는 모든 예외를 처리 할 수 있지만 특정 예외를 처리하려면 일반 예외 처리기를 마지막 catch 블록으로 지정하는 것이 좋습니다.
Java Try Catch 예제
이제 Java에서 try-catch 블록을 시연 해 보겠습니다. 여기 try 블록에서 나누기 연산을 정의합니다. 제수는 0입니다. 따라서 두 숫자를 나누는 문은 산술 예외를 발생시킵니다. 산술 예외에 대한 핸들러를 정의하는 catch 블록이 있습니다.
다음은 Java 프로그램의 예입니다.
class Main { public static void main(String args()) { int val1, val2; try { //this block will contain statements that may raise exceptions System.out.println('Try Block:: Start'); val1 = 0; val2 = 25 / val1; System.out.println(val2); System.out.println('Try Block:: End'); } catch (ArithmeticException e) { //handler for ArithmeticException System.out.println('ArithmeticException :: Divide by Zero!!'); } System.out.println('Outside try-catch:: Rest of the code.'); } }
산출
해시 테이블 예제 C ++
여러 예외 잡기
이미 언급했듯이 try 블록에는 둘 이상의 예외를 발생시키는 코드가 포함될 수 있습니다. 이 경우 각 예외를 처리하기 위해 둘 이상의 catch 블록이 필요합니다. 단일 try 블록 뒤에 여러 catch 블록이 올 수 있습니다. 각 catch 블록은 독립적 인 예외를 처리합니다.
catch 블록이 여러 개인 경우 아래 사항을 기억해야합니다.
- Java 프로그램에서는 어떤 경우에도 예외가 하나만 발생할 수 있습니다. 또한 언제든지 하나의 catch 블록 만 실행됩니다.
- 다중 catch 블록은 대부분의 특정 예외에 대한 catch 블록이 먼저오고 그 다음에 일반이 오도록 정렬되어야합니다.
예를 들면 ArithmeticException 및 일반 Exception이있는 경우 ArithmeticException을 처리하는 catch 블록이 먼저 나오고 Exception을 처리하는 catch 블록이 뒤 따릅니다.
아래 예제는 여러 catch 블록을 보여줍니다.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); myArray (5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
산출
위의 프로그램에서 첫 번째 catch 블록에서 catch 된 ArithmeticException이 발생합니다. 이 catch 블록이 지정되지 않은 경우 예외는 일반화 된 catch 블록으로 전파됩니다.
try 블록에서 두 가지 예외가 발생하도록 위 프로그램을 약간 수정 해 보겠습니다. 이제 출력을 보겠습니다.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); System.out.println('Array element 10 : ' + myArray(10)); myArray(5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
산출
이 출력을 보면 ArrayIndexOutOfBoundsException이 throw되는 것을 보여줍니다. 이는 ArrayIndexOutOfBoundsException을 발생시키는 문이 먼저 실행되기 때문입니다. 예외가 발생하고 제어가 해당 catch 블록으로 이동합니다.
중첩 된 Try-Catch
다른 try 블록 안에있는 try 블록을 중첩 된 try 블록이라고합니다. try 코드에 포함 된 코드 조각이 일부 줄에서 특정 예외를 발생시키고 다른 코드에서 완전히 다른 예외를 발생시키는 특정 상황에서 이러한 구조가 필요합니다.
중첩 된 try 블록의 경우 먼저 가장 안쪽에있는 try 블록이 실행되고 예외가 처리됩니다. 가장 안쪽의 try 블록에 일치하는 catch 블록이 없으면 부모 try 블록까지 한 수준 위로 전파됩니다. 이렇게하면 일치하는 예외 처리기를 찾을 때까지 예외가 위쪽으로 전파됩니다.
예외와 일치하는 예외 처리기가 없으면 시스템 생성 메시지와 함께 프로그램이 갑자기 종료됩니다.
중첩 된 try 블록의 일반적인 구문은 다음과 같습니다.
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
중첩 된 try-catch 블록을 보여주는 프로그램을 구현해 보겠습니다.
class Main{ public static void main(String args()){ //Main try block try{ //try block1 try{ System.out.println('Try Block1'); int num =15/0; System.out.println(num); } catch(ArithmeticException e1){ System.out.println('Block1 Exception: e1'); } //try block2 try{ System.out.println('Try Block2'); int num =100/0; System.out.println(num); } catch(ArrayIndexOutOfBoundsException e2){ System.out.println('Block2 Exception: e2'); } System.out.println('General statement after Block1 and Block2'); } catch(ArithmeticException e3){ System.out.println('Main Block Arithmetic Exception'); } catch(ArrayIndexOutOfBoundsException e4){ System.out.println('Main Block ArrayIndexOutOfBoundsException'); } catch(Exception e5){ System.out.println('Main Block General Exception'); } System.out.println('Code after Nested Try Block'); } }
산출
위의 프로그램에서는 주 try 블록에 두 개의 try 블록이 포함되어 있습니다. 내부 try 블록에는 모두 ArithmeticException을 발생시키는 코드가 있습니다. 그러나 우리는 두 번째 try 블록이 아닌 첫 번째 블록에 대해서만 일치하는 catch 블록을 제공했습니다.
따라서 두 번째 블록은 예외를 주 try 블록으로 전파 한 다음 처리합니다. 이것은 출력에서 분명합니다.
마지막으로 자바에서 차단
지금까지 try-catch와 중첩 된 try 블록을 보았습니다. 예외를 발생시킬 것으로 예상되는 코드가 try 블록에 들어 있다는 것을 알고 있습니다. 예외가 발생하면 try 블록의 나머지 코드가 실행되지 않습니다.
예외가 처리되지 않거나 제어가 예외 핸들러로 전달되면 프로그램이 갑자기 종료됩니다.
이러한 상황에서 예외 발생 여부에 관계없이 실행될 코드를 포함해야 할 필요가 있습니다. 즉, 예외가 발생하거나 예외가 발생하지 않을 때에도 코드를 실행합니다.
그러나 예외가 발생한 후 try 블록이 종료되므로이 코드를 try 블록에 넣을 수 없습니다. 마찬가지로 catch 블록에는 예외 처리기가 있으므로 catch 블록에도 넣을 수 없습니다.
따라서 예외 발생 여부에 관계없이 실행되는 코드를 포함하는 별도의 블록이 필요합니다. Java는이 코드 조각을 포함하는 '최종'블록을 제공합니다.
따라서 Java의 finally 블록에는 프로그램에서 실행될 중요한 명령문이 포함될 수 있습니다. 이러한 명령문의 실행은 예외 발생 여부에 관계없이 수행되어야합니다.
따라서 연결 종료, 스트림 객체 등과 같은 코드 또는 정리 코드를 finally 블록에 넣어 예외가 발생하더라도 실행될 수 있도록합니다.
Java의 finally 블록은 일반적으로 try 또는 catch 블록 뒤에 배치됩니다. finally 블록은 try 블록 없이는 존재할 수 없습니다. finally 블록이 try-catch에 포함되면 ' 시도-캐치-마지막으로 ' 블록.
예외 처리 코드에서 finally 블록을 건너 뛸 수 있습니다. 이것은 finally 블록이 선택 사항임을 의미합니다.
Java에서 배열을 매개 변수로 전달하는 방법
try 블록이 예외를 발생시키지 않으면 finally 블록은 try 블록 이후에 실행됩니다. try 블록에 예외가 있으면 제어가 먼저 catch 블록으로 전달 된 다음 finally 블록으로 전달됩니다.
finally 블록에서 발생하는 예외는 다른 예외와 동일한 방식으로 작동합니다. try 블록에 return 문이나 break and continue와 같은 분기 문이 포함되어 있어도 finally 블록은 계속 실행됩니다.
이러한 점을 염두에두고 finally 블록의 일반 구문과 예를 살펴 보겠습니다.
finally 블록의 일반적인 구문은 다음과 같습니다.
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
finally 블록은 항상 실행되지만 실행되지 않는 특정 상황이나 경우가 있습니다.
다음은 다음과 같습니다.
- 스레드가 죽었을 때.
- System.exit () 메서드를 사용하는 경우.
- finally 블록에서 예외가 발생하는 경우.
finally 블록을 보여주기 위해 몇 가지 프로그램을 구현해 보겠습니다.
class Main { public static void main (String args()) { //try block try { System.out.println ('::Try Block::'); int data = 125 / 5; System.out.println ('Result:' + data); } //catch block catch (NullPointerException e) { System.out.println ('::Catch Block::'); System.out.println (e); } //finally block finally { System.out.println (':: Finally Block::'); System.out.println ('No Exception::finally block executed'); } System.out.println ('rest of the code...'); } }
산출
위의 프로그램은 try-catch-finally 블록을 보여줍니다. try 블록에서는 유효한 작업이 수행되므로 예외가 발생하지 않습니다. 따라서 컨트롤은 try에서 catch하는 것이 아니라 finally 차단으로 전달됩니다.
다음 프로그램은 try-catch-finally 블록의 또 다른 예이지만이 경우 0으로 나누기 연산을 수행 할 때 try 블록에서 예외가 발생합니다. 따라서 finally 블록은 try catch 블록이 실행 된 후에 실행됩니다.
class Main { public static void main(String args()) { //try block try{ System.out.println('::Try block::'); int num=67/0; System.out.println(num); } //catch block catch(ArithmeticException e){ System.out.println('::Catch block::'); System.out.println('ArithmeticException::Number divided by zero'); } //finally block finally{ System.out.println('::Finally block::'); } System.out.println('Rest of the code continues...'); } }
산출
Java에서 예외 발생
Java는 코드에서 예외를 명시 적으로 던질 수있는 키워드 'throw'를 제공합니다. 예를 들면 산술 연산을 확인하고 피연산자를 확인한 후 몇 가지 예외를 발생 시키려면 'throw'키워드를 사용하면됩니다.
throw 키워드를 사용하여 확인되거나 확인되지 않은 예외를 throw 할 수 있습니다. throw 키워드는 사용자 지정 예외를 throw하는데도 사용됩니다.
throw 키워드의 일반적인 구문은 다음과 같습니다.
throw exception; or throw new exception_class('error message');
아래는 throw 키워드를 보여주는 예제 프로그램입니다.
public class Main{ static void validate_Age(int age){ //if specified age is <18, throw ArithmeticException if(age<18) throw new ArithmeticException('Not eligible to vote and drive!!'); else //print the message System.out.println('Eligible to vote and drive!!'); } public static void main(String args()){ //call validate_Age method validate_Age(10); System.out.println('rest of the code...'); } }
산출
위의 프로그램에서 우리는 나이를 확인하는 방법을 사용합니다. 나이가<18, then an exception is thrown to indicate the age is not valid.
Throws 절
예외를 선언하기 위해 try 블록을 보았습니다. 예외를 발생시킬 수있는 코드가 포함되어 있습니다. 예외를 선언하는 다른 방법이 있으며 'throws'키워드를 사용합니다.
'throws'키워드를 사용하는 예외 선언은 프로그래머에게 'throws'키워드 뒤에 지정된 예외가있을 수 있으며 프로그래머는 프로그램의 정상적인 흐름을 유지하기 위해이 예외에 해당하는 핸들러 코드를 제공해야 함을 알려줍니다.
그러나 예외를 선언하고 처리하기 위해 더 신뢰할 수있는 try-catch 블록이있을 때 왜 'throws'키워드가 필요한지에 대한 질문이 생깁니다.
한 가지 이유는 발생할 수있는 예외의 수가 증가함에 따라 하나의 catch 블록이 하나의 예외 만 처리 할 수 있으므로 예외를 처리하는 catch 블록의 수도 증가하기 때문입니다.
마찬가지로 프로그램에 메서드가 많고 각 메서드에 예외가 많으면 코드가 불필요하게 길어지고 관리 할 수 없게됩니다.
따라서 메서드 서명에서 throws 키워드를 사용하여 예외를 선언 한 다음 try-catch를 사용하여 메서드 호출을 처리하는 것이 실행 가능한 솔루션 인 것 같습니다.
throws 키워드를 사용하여 예외를 선언하는 또 다른 이점은 예외를 처리해야한다는 것입니다. 선언 된 예외에 대한 처리기를 제공하지 않으면 프로그램에서 오류가 발생합니다.
throws 키워드의 일반적인 구문은 다음과 같습니다.
return_type method_name() throws exception_class_name{ //method code }
이제 'throws'키워드를 보여주는 Java 프로그램을 구현해 보겠습니다.
이 프로그램에는 testMethod 메소드가있는 Example_throw 클래스가 있습니다. 이 testMethod의 서명에서 throws 키워드를 사용하여 두 가지 예외 IOException 및 Arithmetic Exception을 선언합니다. 그런 다음 주 함수에서 throw 된 예외는 catch 블록에 의해 처리됩니다.
import java.io.*; class Example_Throw { //declare exception using throws in the method signature void testMethod(int num) throws IOException, ArithmeticException{ if(num==1) throw new IOException('IOException Occurred'); else throw new ArithmeticException('ArithmeticException'); } }class Main{ public static void main(String args()){ try{ //this try block calls the above method so handle the exception Example_Throw obj=new Example_Throw(); obj.testMethod(1); }catch(Exception ex){ System.out.println(ex); } } }
산출
자주 묻는 질문
Q # 1) Java에서 throw VS try-catch를 언제 사용합니까?
대답: 'throws'키워드는 메소드 서명으로 예외를 선언하는 데 사용됩니다. throw 키워드는 명시 적으로 예외를 throw하는 데 사용됩니다. try-catch 블록은 다른 사람이 던진 예외를 처리하는 데 사용됩니다.
Q # 2) 던지기, 시도, 잡기를 하나의 방법으로 사용할 수 있습니까?
대답: 아니요. 예외를 throw 할 수 없으며 동일한 메서드에서 포착 할 수도 있습니다. throws를 사용하여 선언 된 예외는 예외를 throw 한 메서드를 호출하는 호출 메서드에서 처리됩니다.
Q # 3) catch 블록에서 예외가 발생하면 어떻게됩니까?
대답: catch 블록에서 예외가 발생하면 프로그램이 실행을 중지합니다. 프로그램을 계속해야하는 경우 catch 블록에서 발생한 예외를 처리하기 위해 별도의 try-catch 블록이 있어야합니다.
Q # 4) Java에서 try-catch-finally 란 무엇입니까?
대답: try-catch-finally 블록에는 try 블록, catch 블록 및 finally 블록의 세 블록이 포함됩니다.
Try 블록에는 예외를 throw 할 수있는 코드가 포함되어 있습니다. Catch 블록에는 try 블록의 예외에 대한 예외 처리기가 포함되어 있습니다. finally 블록에는 예외 발생 여부에 관계없이 실행되는 중요한 코드가 포함됩니다.
Q # 5) 마지막으로 블록은 try-catch를 가질 수 있습니까?
대답: 예, finally 블록에서 예외를 발생시킬 수있는 정리 코드가있는 경우 try-catch 블록을 사용할 수 있습니다. 그러나 그것은 추악 해 보입니다.
결론
이 자습서에서는 Java에서 예외 처리에 사용되는 다양한 키워드에 대해 설명했습니다. 우리는 try, catch, finally, throw 및 throws와 같은 키워드에 대해 논의했습니다.
예외를 발생시킬 가능성이있는 코드는 try 블록에 포함되어 있으며 catch는 예외 처리기를 제공합니다. finally 블록은 예외가 발생했는지 여부에 관계없이 그 안에 포함 된 코드를 실행합니다. finally 블록은 일반적으로 try 또는 try-catch 블록을 따릅니다.
throws 키워드를 사용하여 메서드 시그니처로 예외를 선언하고 throw는 명시 적으로 예외를 throw하는 데 사용됩니다. 일반적으로 throw 키워드를 사용하여 사용자 지정 예외를 throw합니다.
=> 여기에서 완벽한 Java 교육 가이드를 확인하십시오.