2017-11-24 1 views
0

최근 인터뷰에서 인터뷰 담당자가 예외 처리와 관련하여 질문했습니다. 나는 전형적인 점검되지 않은 대답을했다. 그런 다음 그는 런타임 예외를 처리해야합니까? NullPointerException을 얻으면 사용자에게 동일한 메시지를 보냅니 다.실제 생활 프로젝트에서 런타임 예외를 처리하는 방법

혼란 스러웠습니다. 그래서 내가 찾고있는 것은, 우리가 런타임 예외를 잡았는지 아닌지입니다.

  1. 그렇다면 어떻게 할 수 있습니까?
  2. 아니요 인 경우 java.lang.nullpointerException을 사용자에게 표시합니까?

미리 감사드립니다.

+1

응용 프로그램을 중단하지 않으려면해야합니다. 나는 당신이 예외 처리의 기본을 읽는 것을 추천한다. – Stultuske

+0

[여기] (https://stackoverflow.com/questions/25696642/handling-unchecked-exceptions-globally-in-project/25696687#25696687)를 체크 – procrastinator

답변

1

예측 가능한 RuntimeException을 처리하는 가장 좋은 방법은 예측할 수있는 원인과 시스템에서 사용자가 다음에 수행 할 것으로 기대하는 것에 대해 사용자에게 친숙한 정보를 제공하는 것입니다.

사용자에게 UI 기반 계산기를 제공하는 프로젝트가 있다고 가정합니다. 이제 사용자가 'division with zero'명령을 입력하면 이상적으로 발생해야하는 것은 무엇입니까? 0 분모 (물론 적당하지 않음)를 확인하지 않으면 프로그램이 ArithmeticException을 발생시킵니다. 어떻게 처리해야합니까? 그것이 API이며, 다른 응용 프로그램에서 소비 할 경우 당신은 즉

You cannot divide by zero. Please enter a non zero denominator! 

, 그것을 잡으려고하고 사용자가 그 시스템이 기대되지 않은 입력을 체결했다고 알려야합니다, 내가 무엇을 할 것이라고하는 것은이다 런타임 예외를 사용자 지정된 API 특정 예외로 랩핑하고 거기에서 던져서 구현자가 정보를 사용하고 적절한 방식으로 처리 할 수 ​​있도록합니다. 예 :

public int divide() throws InvalidArgumentsException 
+1

나는 그렇지 않다면 매우 downvoted 유용한 해답 : ArithmeticException을 잡아서 ZeroDenominatorException에 래핑하는 것은 실제로 0으로 나누는 것이이 ArithmeticException의 가능한 유일한 원인 인 경우에만 합법적입니다. 일반적으로이 예외에는 여러 가지 원인이있을 수 있으므로 ZeroDenominatorException은 일반적으로 잘못되었을 수 있습니다. 'if (denominator == 0)가 새로운 ZeroDenominatorException (...);을 던져 버리는 것과 같은 것을 더 잘 수행하십시오. –

+0

@RalfKleberhoff 예! 나는 그것이 반대로 진실 될 것이라고 믿습니다. 'ZeroDenominatorException'은'ArithmeticException'의 부분 집합입니다. 나는 그것을 더 잘 이해할 수있는'InvalidArgumentsException'으로 변경할 것입니다. :) – Yash

+1

편집 해 주셔서 감사합니다. 나는 upvote와 downvote를 교환했다. –

0

평범한 사용자는 NullPointerException이 무엇인지 또는 어떻게/왜 발생했는지 알 수 없습니다. 일반적으로 사용자에게보다 친숙한 오류를 표시하고 오류 식별에 도움이되는 오류 코드를 제공 할 수 있습니다.

또한 응용 프로그램은 스택 추적과 함께 NullPointerError를 파일에 저장하여 개발자가 오류가 발생한 위치를 정확하게 볼 수 있습니다.

+0

정확히, 사용자에게 NPE가 발생했음을 보여줄 필요가 없습니다. 그러나 사용자에게 친숙한 오류를 표시하는 방법은 무엇입니까? NPE는 단지 하나의 예일뿐입니다. N 개의 런타임 예외가있을 수 있습니다. 그렇다면 코드에서 같은 것을 구현하려면 어떻게해야합니까? –

0

당신은 구현하여 응용 프로그램에서 RuntimeException 클래스를 잡을 수있는 UncaughtExceptionHandler :

Thread.setDefaultUncaughtExceptionHandler(Thread t, Throwable e) -> { 

    // log Exception to file, send to server ecc, you can check which exception was thrown and act accordingly... 

    // you can still re-throw the exception here as if this block did not exist 

}); 

이 방법은 다른 Thread 인스턴스에서 발생했다 심지어 모든 캐치되지 않는 Exceptions, 캐치한다, 그래서 그냥 하나의 구현을 사용하는 것이 안전합니다 .


당신의 질문 :

우리는 런타임 예외 여부를

그것은 따라 잡을해야한다; 파일 시스템에서 파일을 찾을 수 없기 때문에 전체 Banking Application Server 충돌을 원하지 않습니다.

동시에 코드에 결함이 있기 때문에 RuntimeException이 일반적으로 발생합니다. NullPointerException의 피할 수뿐만 아니라 많은 다른 ...

관련 문제