2016-06-03 1 views
-3

try-catch 블록을 이해하려고합니다. 대부분 요점이 있지만 두 점이 있습니다. 이해할 수 없었고 어떤 용어를 검색해야하는지 모릅니다.try-catch에 대한 질문

try{ 
    operation1; 
    operation2; 
    operation3; 
    operation4; 
}catch(Exception e){ 
//exception handling here. 
} 

Q1 예를 들면, 상기에서와 같은 예이다. operation1operation2의 경우에 예외를 발생하는 경우 윌 operation1operation2 취소 할 성공적하지만 operation3 중에 완료? 또는 그들은 작업 후에도 가치를 유지할 것인가?

Q2. 내가 알지 못하는 경우에는 예외가 생길 수 있습니다. 이것에 대한 최선의 접근 방법은 무엇입니까? 내가 아는 한, Exception을 던지는 것은 좋은 습관이 아닙니다.

+0

는 : 작업은 취소 할 수 없습니다. 그것이 catch 블록이있는 곳입니다. 실행 취소 할 항목이 있으면 catch 블록에서 처리합니다. 이것은 Q2로 이어질 수도 있습니다 (질문을 올바르게 이해할 수 있을지 확실하지 않은 경우) ... 어떤 오류가 발생했는지에 대한 정보가 필요하면 catch 블록에서 예외를 복구하는 데 도움이되는 고유 한 예외 클래스를 만들 수 있습니다. – forrert

+1

나는 (https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html) 읽기 [잡기와 예외 처리] 좋습니다. – mre

+0

당신은 모든 확인 된 예외를 포착하거나 던질 것이므로 예상 한 모든 예외를 알 수 있습니다. 어떤 검사되지 않은 예외가 예상되는지 알지 못하는 경우 검사되지 않은 예외를 처리하는 방법을 알지 못합니다. 이 경우, 실수로 삼키지 말고, 그럴 경우 시스템을 실추 시키도록하겠습니다. (내가 복구 할 수 없거나 순식간에 처리 할 수없는 경우) – Jimmy

답변

2

가장 좋은 방법은 하나의 try-catch와 코드의 긴 줄을 둘러싸고하지하는 것입니다. 이렇게함으로써 당신은 당신이 언급 한 정확한 모호함을 만나게됩니다. 어떤 예외가 발생 했습니까?

대신 문은 각각 예외를 throw 할 수있는 경우 자체 try-catch 블록을 가져야합니다. catchtry-catch의 결과가 삭제되지 않으면 모든 작업을 함께 수행하지 않아야합니다.

예외가 발생하는 경우 - 수행중인 작업에 기반하여 알아야합니다 (예 : 배열에 액세스 할 때 범위를 벗어날 수도 있음을 알고있는 경우 ArrayOutOfBoundsException을 잡을 수 있음). 그러나 대부분의 경우 모든 단일 예외에서 가능한 모든 예외를 catch 할 필요가 없습니다. 프로젝트 크기에 따라 시행 착오를 사용할 수도 있습니다. NullPointerException이 있습니까? 코드가 null 객체에 대한 참조를 작성하지 못하게하는 방법을 찾아보십시오.

+0

Trial and Error는 실제로 좋은 생각입니다. 그러나 기술자는 시스템을 올바르게 사용하는 방법을 알고 있습니다. 그러나 최종 사용자가 미친 짓을 시도하고 다른 예외가있는 경우 이런 경우 시스템을 중지시키는 것이 좋습니다. – drJava

+0

대부분 어떤 종류의 오류가 예상되는지에 따라 달라집니다. 계산기 응용 프로그램을 작성한다고 가정 해 보겠습니다. 간단하고 잠재적 인 오류는 사용자가 숫자 대신 문자처럼 문자를 입력하는 것입니다. 여기서 기술적으로 예외를 처리 할 수 ​​있지만 동시에 계산기를 계속하기 전에 변수를 확인하고 문자가 없음을 확인할 수 있습니다. 분명히 말 그대로 모든 것을 잡을 수있는 것이 좋지만, 일반적으로 말해서, 사용자가 사용하기 전에 입력 한 내용을 검증/검증 할 수 있다면 걱정할 필요가 없습니다. –

+0

요약하면 입력에 대해 사용자가 발생할 수있는 예외를 catch하거나 예외를 유발할 수있는 입력을 거부해야합니다. 예외를 던질 수 없다는 것을 알고있는 내부 함수 (예 : 객체를 만들고 코드의 다음 줄에 null이 있는지 확인하지 않아도 됨)를 고려하지 않고 도망 갈 수 있습니다. 불가능한 예외는 무엇입니까? –

0

1) 작업은 취소되지 않습니다. 2) 모범 사례는 가능한 모든 예외 예외 자식 클래스를 try catch 블록에서 예외 클래스에 포함시키는 것입니다. 그러면 시작 부분에 특정 예외 처리기가 없으면 예외가 상황을 처리합니다. 각 작업마다 별도의 try catch 블록을 사용하는 것이 좋지만 코드가 복잡해질 수 있습니다. Q1 관련하여