2013-11-21 3 views
1

내 코드의 특정 "사례"에 대해 확인되지 않은 예외가 있다고 가정합니다. 대기열이 75 % 찼을 때를 말합니다. 내가 필요한 것은 "대기열이 75 % 임계 값에 도달했습니다"라는 예외입니다. 이 일의 가장 확실한 (?) 방법 One--RuntimeException 경고

public class QueueT extends RuntimeException { 
    QueueT() { 
     super("queue has reached the 75% threshold"); 
    } 
} 

모든 & 만 나는이 예외 내가 is-- 궁금하네요 어떤

try { 
    // some stuff here 
    throw new QueueT(); 
    } catch (QueueT e) { 
     System.out.print("<<"+e+">>"); 
     } 

이기가 사용하는 것입니다 위와 같이 가면서 정확히 내가 얻고있는 것은 - 예외가 아니라 -
입니다. 리콜 : 나는 다른 용도가 없다. Throwable 또는 그 밖의 다른 방법을 필요로하지 않을 것이다. 내가 보는 것과

try { 
    // some stuff here 
    throw new RuntimeException("queue has reached the 75% threshold"); 
    } catch (RuntimeException e) { 
      System.out.print("<<"+e+">>"); 
     } 

는, 내가 가진 유일한 이득은 문자열 속성을 귀찮게하지 않고 생성자를 호출의 편안함이다.

그것도 내가 쉽게 내가에 예외를 던질거야 임계 값 매개 변수화 할 수 있습니다 gainful-- 것 : 사전에

// setting the percentage value here 
throw new RuntimeException("queue has reached the" + percentage + "% threshold"); 

감사합니다. 여기

try { 
    // some stuff here 
    throw new QueueT(); 
} catch (QueueTe e) { 
    System.out.print("<<"+e+">>"); 
} 

, 당신은 매우 정확하게 잡기 위해 오류의 유형을 말할 수 있습니다 :

+0

자신 만의 예외 유형을 생성하면 예외 및 다른 RuntimeException에 대해 다른 try-catch 블록을 사용할 수 있으며 그렇게해야 할 경우 더 많은 기능을 추가 할 수 있습니다. –

답변

0

는 당신이 얻을 것은 catch (RuntimeException e)catch (QueueTe)로 바꿀 경우

try { 
    // some stuff here 
    throw new QueueT(); 
} catch (RuntimeException e) { 
    System.out.print("<<"+e+">>"); 
} 

, 첫 번째 예이다. 그렇지 않으면 코드의 다른 부분에 런타임 예외가 발생하고 거의 가득 찬 대기열을 처리하는 코드가 대기열과 완전히 관련이없는 예외에 적용하려고 할 수 있습니다. QueueT 예외 만 잡으면 코드를 더 정확하고 정확하게 적용 할 수 있습니다.

+0

복사 - 붙여 넣기 오류 - 수정. 그것은 QueueT 예외가되어야합니다. – Roam

+0

오케이. 음, 내 대답의 두 번째 절반은 여전히 ​​적용됩니다. – Avery

+0

"장면 뒤에"다른 것이 있는지 궁금 해서요.하지만이게 그럴 것 같아요. 아직 '원인'을 자세히 살펴 보지 못했습니다. 확실히 차이를 만든다. 제한된 예외에. 입력에 대한 thx. – Roam

0

첫 번째 통화의 관심은 당신이 약간에게 캐치 조항 변경하면 이해하기 쉽습니다 :

try { 
// some stuff here 
throw new QueueT(); 
} catch (QueueT e) { 
    System.out.print("<<"+e+">>"); 
} 

그래서 당신은 단지 널 포인터, 같은 종류의 같은 잠재적 인 다른 런타임 대신 QueueT의 인스턴스를 잡을 것을 예외는 코딩 또는 디자인 문제를 감지하기 위해 진입 점으로 전파하는 것이 좋습니다. 먼저 작성한 코드에서 예상 전체 큐 케이스를 실제 런타임 오류와 구별 할 수 없습니다. 에러 정보를 잃어버린다면 프로그램은 대기열이 가득 찬 것처럼 행동 할 것입니다.

예외적 인 수퍼 유형, 런타임 및 throwable (최악의 경우)을 절대 포착하지 않는 것이 좋습니다.

예외 접미어가있는 예외의 이름을 지정하는 또 다른 방법은 QueueAboutFullException입니다.

예외를 잡는 장소가 던져 놓은 곳과 거의 같으면 다른 곳에서는 프로그래밍을 사용하지 않는 것이 좋습니다.인터럽트보다 비용이 적기 때문에 단순한 경우를 선호합니다.

+0

re.your 2 번째 par.below code3-- 왜 정확히 - thats Q 여기에 – Roam

+0

두 번째 부분은 예외 클래스를 선언 할 때 percentage 속성을 추가하고이 매개 변수를 처리 할 생성자를 추가합니다 (예 : super (" 큐가 "+ 백분율 +"% 임계 값 "에 도달했습니다.) ' – Gab

2

코드에서 특정 "사례"에 대해 검사되지 않은 예외가 있다고 가정합니다. 큐가 75 % 찼을 때를 예로 들겠습니다. 내가 필요한 것은 "대기열이 75 % 임계 값에 도달했습니다"라는 예외입니다.

이는 예외적 인 경우입니다. 예외는 비즈니스 로직에 사용되지 않습니다. 그들은 예외적 인 조건을 위해 사용된다. 이것은 으로 예상되는 시나리오와 예외보다 더 많은 통지처럼 보입니다. 이 예외를 잡는 사람이 어떻게 반응 할 것으로 기대합니까? 그냥 무시해? 그렇다면 예외의 목적은 무엇입니까? 또한이 방법으로 예외를 사용하면 스택 추적을 채워야하기 때문에 전혀 성능이 떨어지며 반복적으로이 작업을 수행하면 성능이 크게 떨어집니다.

다른 질문과 관련하여 자신의 런타임 예외를 사용하는 이점 (RuntimeException)은 이제 사용자가 적절하게 처리하거나 적절히 처리 할 수있는 의미 상으로 적절한 자체 예외가 있다는 것입니다. 단순히 RuntimeException을 사용하는 것만으로는 그다지 많은 정보를 얻지 못합니다.

+1

나는 첫 번째 부분에 완전히 동의합니다 – Gab