Java 팁 및 Java 응용 프로그램에서 Nullponintexception을 피하는 가장 좋은 방법
Java 응용 프로그램에서 NullponintException (NULL 포인터 예외)이 최상의 솔루션 (문제)입니다. 동시에, Null 포인터는 강력하고 부드러운 실행 코드를 작성하는 열쇠입니다. “예방은 치료보다 낫다”라는 문구는 불쾌한 nullponintexception에도 적용됩니다. 방어 코딩 기술을 적용하고 여러 부분 사이의 컨벤션을 적용하면 NullPointException을 크게 피할 수 있습니다. 다음 Java 팁은 이미지를 최소화 할 수 있습니다! = 이런 종류의 점검에 대한 null 코드. 숙련 된 Java 프로그래머로서, 당신은 이러한 기술 중 일부가 일부 프로젝트에 사용되고 있음을 알 수 있습니다. 그러나 1 학년 대학생과 중급 개발자에게는 훌륭한 학습 기회입니다.
이것들은 배우기 쉬운 몇 가지 간단한 기술이지만 코드 품질과 견고성에 정말 중요합니다. 내 경험상, 첫 번째 트릭은 코드 품질을 향상시키는 데 큰 역할을했습니다.
1) 알 수없는 개체 대신 기존 문자열 (String)에서 Equalsing () 및 EqualsingNoreCase ()를 호출하십시오.
일반적으로 equals ()는 이미 비어 있지 않은 문자열에서 호출됩니다. 동등한 () 메소드가 대칭이기 때문에 aequal () 호출은 b.equal ()을 호출하는 것과 같습니다. 이것이 비어있는 한 쪽이 널 포인터를 유발할 경우 많은 사람들이 물체 A와 B에주의를 기울이는 이유입니다.
객체 unknownobject = null; // 잘못된 방법 - nullpointerexceptionif를 유발할 수 있습니다 (unknownobject.equals ( "cladebject")) {system.err.println ( "알 수없는 abject가 null 인 경우 nullpointerexception을 초래할 수 있습니다"); System.err.println ( "더 나은 코딩 피하는 널 포인터 렉스크");}이것은 NullPointException을 피하는 가장 중요한 Java 트릭이지만 Equal ()가 매우 일반적인 방법이기 때문에 결과는 큰 개선이 될 것입니다.
2) 둘 다 동일한 결과를 반환하면 valueof ()가 toString () 대신 선호됩니다.
빈 객체는 toString ()을 호출 할 때 nullpointException을 던지기 때문입니다. value ()을 호출하여 동일한 값을 얻을 수 있다면 valuef ()를 사용해야합니다. 이것은 널 값을 전달합니다. 특히 정수, 플로트, 이중 또는 bigdecimla와 같은 포장 클래스의 경우.
bigdecimal bd = getPrice (); System.out.println (String.Valueof (bd)); // npesystem.out.println을 던지지 않습니다 (bd.tostring ()); // "스레드에서 예외"java.lang.nullpointerexception "
사용중인 객체가 비어 있는지 확실하지 않은 경우이 Java Trick을 사용하십시오.
3) NULL SAFE 방법 또는 클래스 라이브러리를 사용하십시오
지금 당신을 위해 null을 확인한 많은 오픈 소스 구성 요소가 있습니다. 가장 일반적인 것 중 하나는 Apache의 Stringutils입니다. nullpointexception 메소드에 대해 걱정하지 않고 StringUtils.isblank (), isnumberic (), iswhitespace () 및 기타 도구를 사용할 수 있습니다.
System.out.println (StringUtils.isempty (null)); System.out.println (StringUtils.isblank (null)); System.out.println (StringUtils.isnumeric (null)); System.out.println (StringUtils.isalluppercase (null)); 출력 : Trupruefalsefalse
그러나 결론을 내리기 전에 NULL 보안 방법 및 클래스에 대한 문서를 읽는 것을 잊지 마십시오. 이것은 또 다른 최고의 Java 드릴이며, 많은 노력을 기울일 필요는 없지만 많은 진전을 이룰 것입니다.
4) 메소드에서 NULL을 반환하는 대신 빈 컬렉션 또는 빈 배열을 반환하지 마십시오.
이 Java 기술은 Joshua Bloch의 "효과적인 Java"에도 언급되어 있습니다. 이 책은 또한 Java 코딩 기능을 향상시키는 소스입니다. 빈 컬렉션이나 빈 배열을 반환하면 size () 및 longth ()와 같은 기본 호출이 nullpointexception을 던지지 않는다고 결정할 수 있습니다. 컬렉션 클래스는 편리한 빈 목록, 세트 및 맵을 제공 할 수 있습니다.
코드는 다음과 같습니다.
공개 목록 GetOrders (고객 고객) {list result = collections.empty_list; 반환 결과; }마찬가지로 Collections.empty_list, collections.empty_set 및 collections.empty_map을 반환하는 대신 사용할 수 있습니다.
5) @notnull 및 @nullable과 함께 의견을 제시하십시오
글을 쓸 때는 컨벤션 무효성을 정의 할 수 있습니다. @notnull 및 @nullable과 같은 주석을 사용 하여이 방법이 널 안전한 지 프롬프트해야합니다. 최신 컴파일러, IDE 및 기타 도구는이 의견을 읽거나 빈 수표를 수행하거나 빈 수표가 필요한지 여부를 알려줄 수 있습니다. Intellijide와 FindBugs는 이미이 주석을 지원합니다. 이 의견은 또한 JSR 305의 일부입니다 (번역기 주 : Java의 표준으로 이해 될 수 있음). @NotNull 및 @Nullable을 보면 프로그래머는 빈 수표를 수행할지 여부를 결정할 수 있습니다. 그건 그렇고, 이것은 적응하는 데 약간의 시간이 걸리지 만 Java 프로그래머를위한 새로운 모범 사례입니다.
6) 컨벤션을 따르고 합리적인 기본값을 정의하십시오
Java 분야에서 Null Pointers를 피하는 가장 좋은 방법 중 하나는 계약을 체결하고이를 준수하는 것입니다. 대부분의 nullpointexcepe은 불완전한 정보를 사용하거나 객체를 생성하기 위해 모든 종속성이 제공되지 않기 때문에 발생합니다. 불완전한 객체를 생성하지 못하고 그러한 요구 사항을 부정하는 경우 잠시 후 발생하는 많은 NullPointException을 방지 할 수 있습니다. 객체를 생성 할 수 있으면 합리적인 기본값을 설정해야합니다. 예를 들어, ID 및 이름 속성 없이는 직원 객체를 만들 수 없지만 선택 사양의 PGHONE 번호를 가질 수 있습니다. 직원에게 전화 번호가없는 경우 널 값을 반환하는 대신 0을 반환하십시오. 그러나 이러한 종류의 처리는 불법 입력을 확인하는 대신 널 값을 매우 신중하게 검사해야합니다. 또한 널 값을 정의하는지 여부를 정의 할 때는 발신자에게 정보에 입각 한 결정을 내도록 상기시킵니다. 실패 후 널 값을 선택하거나 수락하는 것도주의를 기울여야하는 중요한 설계입니다.
7) 데이터베이스를 사용하여 도메인 객체 (Demain Object)를 저장하는 경우
예를 들어, 고객, 주문 등은 데이터베이스의 NULL 값에 대한 일부 제약 조건을 정의해야합니다. 데이터베이스는 여러 소스의 데이터를 요구할 수 있으므로 데이터베이스에서 NULL 값을 확인하면 데이터의 무결성이 보장됩니다. 데이터베이스의 NULL 값에 대한 제약을 유지하면 Java에서 Null Checking을 줄일 수 있습니다. 데이터베이스에서 객체를 가져 오면 해당 속성이 비어 있고 속성이 비어있을 수 있는지 확인할 수있어 빈 수표의 코드를 최소화 할 수 있습니다.
8) 빈 개체 모드를 사용하십시오
이것은 Java의 NullPointException을 피하는 또 다른 방법입니다. 메소드가 객체를 반환하는 경우, 호출자는 객체를 반복하려는 객체를 반환하려고합니다. 발신자에게 위의 방법이 없으면 빈 객체가 NULL 대신 반환 될 수 있습니다. 빈 개체는 컨텍스트에서 다른 의미를 가진 특수한 객체입니다. 이러한 반환 밀기 자 또는 연결 유형과 같은 메소드의 경우 빈 객체 (빈 개체)를 비우는 대신 사용해야합니다.