c exception handling tutorial with code examples
예외 처리는 프로그램 실행 중에 발생할 수있는 오류를 처리하는 방법입니다. 이 자습서에서는 코드 예제를 사용하여 C #의 예외 처리를 설명합니다.
Windows 10 용 최고의 SSH 클라이언트
예외 처리는 런타임 오류가 있어도 프로그램 흐름이 계속되도록하는 데 사용됩니다. 예외는 런타임 오류가 발생하는 동안 throw되는 개체입니다.
예외가 처리되지 않으면 C #은 예외 메시지를 생성하고 프로그램을 종료합니다. 여기에서 예외 처리가 등장합니다.
학습 내용 :
예외 란 무엇입니까?
예외는 런타임 중에 프로그램 내에서 발생할 수있는 전례없는 오류입니다. 대부분의 경우 프로그래머는 유효성 검사 또는 null 검사와 같은 일부 오류를 쉽게 감지하거나 일부 값을 확인할 수 있습니다.
그러나 오류가 언제 어떻게 나타날지 예상 할 수없는 특정 시간이 있습니다. 예를 들어, 한 위치에서 파일을 찾고 있다고 가정 해 보겠습니다. 내 프로그램은 파일이 존재할 때까지 완벽하게 실행되며 파일이 삭제되면 내 프로그램에서 오류가 발생합니다.
예외는 정기적으로 발생하지 않지만 여전히 발생할 수 있으며 항상 신중하게 처리하는 것이 좋습니다. 이를 처리하기 위해 예외 처리를 사용합니다.
오류가 발생할 때마다 오류가 발생한다고 말합니다. 'thrown'은 System.Exception C #의 클래스. 그만큼 System.Exception 클래스는 프로그램에서 방금 발생한 오류에 대한 세부 정보를 제공하는 다양한 메서드와 속성을 제공합니다.
문제가 발생한 스택을 제공하는 스택 추적 속성 또는 예외에 대한 설명을 제공하는 메시지 속성과 유사합니다.
예외 처리를위한 키워드
예외는 프로그램의 특정 부분을 제어하는 프로세스를 제공하므로 해당 부분에 예외가 있어도 프로그램 제어가 프로그램의 다른 부분으로 전송됩니다. C #에서 예외 처리는 기본적으로 네 가지 키워드를 중심으로 구축됩니다. 던지고, 시도하고, 잡고 마침내 .
던지다
이미 논의했듯이 던지기는 System.Exception C #의 클래스. 프로그램에서 오류가 발생할 때마다 오류를 발생시킬 수 있습니다.
시험
Try 블록은 프로그램에서 예외를 throw 할 수있는 코드 블록을 포함합니다. 그 뒤에 하나 이상의 catch 블록이 있습니다.
잡기
try 블록에서 예외가 발생하면 예외를 catch하기 위해 catch 블록에 제어를 제공합니다. catch 블록은 또한 프로그램이 예외 발생시 실행해야하는 코드 세트를 포함하거나 예외를 포착하고 시나리오 및 요구 사항에 따라 아무 작업도 수행하지 않을 수 있습니다.
Windows 10을위한 최고의 무료 DVD 리퍼
드디어
마지막 블록은 예외 발생에 관계없이 특정 코드 조각 또는 명령을 실행하는 데 사용됩니다. 마지막으로 블록은 항상 실행되며, 프로그램이 예외를 찾지 못하면 시도중인 블록 바로 다음에 실행되거나 프로그램이 예외를 포착하면 catch 블록 이후에 실행될 수 있습니다.
C #에있는 예외 클래스
C #의 모든 예외는 다음에서 직접 또는 간접적으로 파생됩니다. System.Exception 수업.
가장 일반적인 몇 가지 예외에 대해 간략히 살펴 보겠습니다.
- System.IO.IOException : 입력 및 출력 관련 오류를 처리합니다.
- System.DividedByZeroException : 숫자를 0으로 나눌 때 발생하는 오류를 처리합니다.
- System.NullReferenceException : null 개체를 참조 할 때 발생할 수있는 오류를 처리합니다.
- System.IndexOutOfRangeException : 프로그램이 배열 범위를 벗어난 인덱스에 액세스하려고 할 때 발생하는 오류를 처리합니다.
- System.OutOfMemoryException : 메모리 부족으로 인해 발생한 오류를 처리합니다.
C #의 예외 처리
C #에는 try 및 catch 블록을 사용하여 발생할 수있는 모든 유형의 예외를 처리하기위한 매우 잘 정의 된 솔루션이 있습니다. 이 블록을 사용하여 프로그램의 핵심 문을 다른 문과 분리 할 수 있습니다.
예:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
위의 예에서는 try 블록 아래에 파일을 여는 코드를 동봉했습니다. 유효한 파일 경로를 제공하지 않았으므로 코드에서 오류가 발생해야합니다. 이제 catch 블록에서 오류를 포착했습니다. 주어진 파일 경로에 파일이 없으면 코드에서 FileNotFoundException이 발생합니다.
이 예외는 예상되는 예외를 이미 정의한 catch 블록에 의해 포착됩니다. 이제 우리 코드가 이미 정의한 예외가 아닌 다른 예외를 던진다면 우리 블록은 그것을 잡을 수 없을 것입니다. 일반적인 예외를 포착하기 위해 다른 catch 블록을 추가합니다.
업데이트 된 코드를 살펴 보겠습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } Console.ReadLine(); } } }
이 일반 catch 블록은 try 블록 내에서 발생할 수있는 모든 예외를 catch 할 수 있습니다. 이제 finally 블록을 추가하여이 작업을 완료하겠습니다. 간단하게하기 위해 finally 블록을 사용하여 메시지를 인쇄 해 보겠습니다.
블랙 박스와 화이트 박스 테스트의 차이점
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }
여기서는 간단한 메시지와 함께 finally 블록을 추가했습니다. 블록에 몇 가지 사용자 지정 문을 추가 할 수도 있습니다. 그러나 프로그램의 전체 구조는 여기에 표시된 것과 유사합니다.
finally 블록은 예외가 있는지 여부에 관계없이 항상 실행됩니다. 프로그램은 try 블록에서 시작하고 오류 / 예외가없는 경우 finally 블록으로 직접 이동합니다. 예외가 발생하면 먼저 catch로 이동 한 다음 최종 블록을 실행합니다.
finally 블록이 실행되지 않는 조건이 있습니까?
이름에서 알 수 있듯이 최종 블록은 마지막에 실행되며 실행될 코드의 마지막 블록입니다. 마지막으로 블록은 응용 프로그램이 실행될 때 항상 실행됩니다. finally 블록이 실행되지 않는 유일한 시간은 응용 프로그램이 충돌하거나 프로세스 명령을 사용하여 의도적으로 종료되는 경우입니다.
결론
예외가 제대로 처리되지 않으면 프로그램 내에서 오류가 발생합니다. 코드 내에서 try / catch 블록을 사용하지 않은 경우 예외를 표시하는 메시지와 함께 프로그램이 중단됩니다. 일반 사용자에게는 오류를 소스 코드로 다시 추적하여 해결하기가 매우 어렵습니다.
따라서 항상 프로그램에서 예외 처리를 제공하는 것이 좋습니다.
샘플 코드
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string() args) { try { File.OpenRead('InvalidFile'); } catch (FileNotFoundException ex) { Console.WriteLine(ex.ToString()); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Console.WriteLine('Finally block executed'); } Console.ReadLine(); } } }