2013-05-23 2 views
0

NULL 값을 객체에 전달하기 전에 강제로 null 값을 확인한 후 해당 객체가 호출되었을 때 객체에서 메소드에서 처음 확인 된 구문을 찾고 있습니다 널 포인터 예외를 확인하는 것입니다.null 포인터 확인

전에 문구가 나타났습니다

도와 주시겠습니까?

죄송합니다. 내 질문에 대해 명확히하지 않은 분들.

나는 어디에서나 메서드를 호출하기 전에 null 포인터가 전달되는 것을 막는 구문을 언급 한 적이 있는데 책을 읽었으며 호출 된 메서드에서 수행되는 첫 번째 작업은 null을 확인하는 것입니다 포인터.

+0

"구문"은 –

+0

계약에 의한 설계? –

+0

어쩌면 전제 조건? –

답변

1

그냥 객체를 생성하기 전에, 당신은 즉 단어 assert를 사용하여 PARAMS를 확인할 수 있습니다 : 기본적으로

assert yourValue != null 

는 주장 런타임에 사용할 수 없습니다. 이를 사용하려면 option-enableassertions (또는 -ea)을 JVM에 전달하십시오. @ Woot4Moo 당신이 단지 if 문을 사용할 수 말했듯 그렇지 않으면

public Foo(Bar bar, Baz baz) { 
    this.bar = Objects.requireNonNull(bar, "bar must not be null"); 
    this.baz = Objects.requireNonNull(baz, "baz must not be null"); 
} 

: (자바 7 이후) 생성자/메소드의 방법 requireNonNull direclty을 사용하는 것입니다

또 다른 가능성은, 여기에 생성자 예입니다 .

+0

감사합니다. –

+0

@KeithSpriggs 전에는 절대로 assert 명령을 사용하지 마십시오. 자세한 내용은 http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert를 참조하십시오. HTML –

6

방어 코딩이 실제입니다. 당신이 초기화되지 않은 일부 개체 (비 초기화 된 객체의 디폴트 값 널을)이있을 때

public void go(String s) 
{ 
    if(null == s) 
     //do something 
    else 
    // normal execution. 
} 
+0

어설 션이라는 용어도 유효하지만 방어적인 코딩의 우산 아래 있다고 생각합니다. 또한 // 뭔가를해야한다고 생각합니다. 예외/오류/로그 등을 발생 시키십시오. ' –

2

널 포인터 예외 최대 보이고있다.

그게 아니라면, 당신은 비교 연산자를 사용해야합니다 개체가 null인지 여부를 확인하고 싶다. 같은 :

if (object == null) { 
    // do something 
} 
1

이론적으로 Object의 모든 인스턴스 메소드는 작동하지만, 저렴하기 때문에 눈에 띄는 것은 없습니다. 가장 가능성이 높은 것은 theReference.hashCode()theReference.equals(theReference) (또는 아마도 theReference.equals(null) 일 것입니다. 자바 표준은 어떤 메소드 호출도 효과를 평가할 것을 요구하므로이 호출은 컴파일러 나 JITC에 의해 제거되지 않습니다.)