JAVA에서 NullPointerException 에 대해 질문을 드릴게요
글쓴이: anaud2 / 작성시간: 수, 2008/11/05 - 11:28오전
안녕하세요
java로 특정 함수를 만들고 있는데요
public static int auth(String ID,String PW)
throws IOException, SocketException, ValueException //ValueException은 만든 예외클래스로 IOException을 상송받는다.
{
if(IP.equals("") || ID == null){
throw new ValueException("IP null"); //특정 요인에 맞으면 예외를 발생시키기 위해 만들었다.
}
//중략
main(){
//중략
try{
i = auth_test.auth(null, "123456");
}catch(IOException e){
e.printStackTrace();
}
}제가 생각했을때는 사용자가 null을 인자값으로 넣었을때도 제가 만든 예외가 발생하게 하고 싶은데요 막상 해보니까
NullPointerException이 발생을 합니다.
}catch(NullPointerException e){
e.printStackTrace();
}위처럼 catch를 해주면 되긴하는데...그건 제가 바라는게 아니라서요...
if문에서 ID == null이 된다고 생각을 했는데..if문에서 걸리질 않네요 C에서는 되는데 null인자가 넘어온걸 어떻게 잡아내면 될까요?
Forums:


ID == null
ID == null 됩니다.
문제는 IP.equals("") 에서 IP 가 null이면 NullPointerException이 발생하겠네요.
--
Emerging the World!
Emerging the World!
일단 위에서 IP는 ID의
일단 위에서 IP는 ID의 오타로 보이는군요.
조금만 부연하자면, 논리연산자로 엮인 논리식은 경우에 따라서 다 평가하지 않습니다.
short circuit라고 불리는데,
AND로 묶인 것들은 앞에서 부터 평가하다가 최초 false가 나오는 순간 전체 논리식이 false가 됩니다.
OR로 묶이면? 최초 true를 만나면 전체 식이 true가 됩니다.
예시하신 논리식
ID.equals("") || ID == null은 전형적인 나쁜 스타일입니다 (object의 method를 null 검사 전에 부르는 것은 아주 안좋은 스타일입니다).
다음 둘중에 하나로 고치시면 됩니다.
ID == null || ID.equals("") // null 체크 먼저 하게... or "".equals(ID) || ID == null // ID가 null이라도 상관없게...-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
고맙습니다.
정말 새로운 내용을 알게되었네요 고맙습니다.^^
저 같은 경우는...
위의 M.W Park님 의견에 동감합니다.
실제 존재하지 않는 주소에 우편물을 보내는 부분과 주소지는 존재하나 주인(?)이 수신자가 맞는지 부분만을 놓고 봤을때 checking priority 는 전자가 되어야 겠지요. 쓰고보니 위 reference 관련 표현이 이상하긴 하네요. :)
저같은 경우는 통상적으로(특수환경 제외) Util Class를 만들어 처리하고 있습니다.
public class MyUtil { public static boolean isEmpty( Object obj ) { if ( obj == null || obj.toString().equals( "" ) ) return true; return false; } }if ( MyUtil.isEmpty(ID) ) { throw new ValueException("IP null"); //특정 요인에 맞으면 예외를 발생시키기 위해 만들었다. }오늘도 For() 와 If()로 나의 하루는 시작되고 끝난다.
--오늘도 For() 와 If()로 나의 하루는 시작되고 끝난다.
아 말씀하신 방법도 좋네요
함수로 처리하는부분도 코드가 상당히 깔끔해지네요 좋은정보 감사합니다.
댓글 달기