2011-12-23 6 views
3

try catch 블록을 사용하여 예외를 catch하고 있습니다. 콘솔에 Null 값이 표시됩니다. 그러나 그것은 catch 블록으로 향하지 않습니다.Null catch 블록의 포인터

try { 
     System.out.println("Exception here "+SomeObject.getValue()); 
    } catch (NullPointerException e) { 
     // TODO: handle exception 
     SomeObject so = new SomeObject(); 
    } 
    SomeObject.setValue(); 
} 

어떻게 처리 할 수 ​​있습니까? 메소드 레벨 throws NullPointerException을 사용할 수 있습니까?

+2

스택 추적을 게시하고 예외가 발생되는 라인을 확인하시기 바랍니다 캐치 내부에 또 다른 try 블록을 넣을 수 있습니다. –

+1

이상한! null 값이 모든 null 값에 대해 뺨 치는 값으로 처리되어야하는 동안 null 포인터 예외를 처리하는 이유 –

+0

콘솔에 Null 값이 표시되는 것은 무엇을 의미합니까? 귀하의 println이 catch 블록에 없습니다. – user949300

답변

2

사실 그것은 catch 블록 안에 들어갔을 것입니다. 라인에 또 다른 잠재적 인 NullPointerException가

so.setValue(); 

RuntimeException을 던져 권고하지 않습니다 말했다 데 (당신이 말하려고하는 가정)이 있습니다. try/catch가 아닌 간단한 조건 검사를 통해 코드에서 NullPointerException을 처리하는 것이 더 좋습니다.

+0

'SomeObject so = new SomeObject()'문에서'SomeObject'는 클래스 이름으로 보입니다. 이것은'setValue()'가 정적 (클래스) 함수라는 것을 암시합니다. 던져진 NPE가 있다면, 그것은이 명령문에서 나온 것이 아니라 그 기능 내부에서 온 것입니다. –

+0

@TedHopp : 동의 함. 수정 된 답변 – bragboy

0

NullPointerExcetpion을 잡는 대신 Unchecked 예외를 catch하는 것은 좋지 않은 생각입니다. If 조건에서 null 값을 간단히 확인할 수 있습니다.

if(SomeObject.getValue()!=null) 
System.out.println(SomeObject.getValue()); 
0

당신은

try { 
    doSomething(); 
} catch (IOException) { 
     try { 
        doSomething(); 
     } catch (IOException e) { 
       throw new ApplicationException("Failed twice at doSomething" + 
       e.toString()); 
     }   
} catch (Exception e) { 
}