FindBugs 일반 오류 설명 및 해결 방법
하나.사용되지 않은 로컬 변수
[DLS_DEAD_LOCAL_STORE]
설명: Dead store to에 사용되지 않는 로컬 변수
해결 방법: 국부 변수 정의 후 사용하지 않음;객체를 인스턴스화한 후 다시 해당 객체에 값을 지정합니다.
둘.인스턴스 방법을 통해 정적 속성 업데이트
[ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD]
설명: Write to static field 인스턴스를 통해 정적 속성 업데이트
상량류에서 흔히 볼 수 있으며, 직접 유명을 통과한다.상수명 획득 방식은 봉인 원칙에 어긋난다.findbugs는 사용을 권장하지 않는다. 상수를 정적 구성원 변수로 바꾸면spring이 정적 주입을 지원하지 않기 때문에 실현할 수 없다. 해결 방법은 비정상적인setter가 정적 구성원 변수에 값을 부여하는 것이다.
해결 방법:
상수 클래스 F:
class F{
public static String a = “123”;
}
상수 a를 정적 구성원 변수로 변경하고 F.geta () 를 통해 가져오며 spring에서 정적 주입을 지원하지 않기 때문에 다음과 같이 변경합니다.
class F{
private static String a;
public static Integer getA() {
return a;
}
public void setA(String a) {
setAValue(a);
}
public static void setAValue(String a) {
F.a = a;
}
}
셋.포장의 값이 해체되어 다시 포장되다
[BX_UNBOXING_IMMEDIATELY_REBOXED]
설명: Boxed value is unboxed and then immediately reboxed 포장 값을 개봉한 후 즉시 다시 포장
흔히 볼 수 있는 것은 삼목 연산을 할 때 기본 유형과 포장 유형이 동시에 존재한다.
해결 방법:
Integer a = null;
//...
a = (a == null)?0:a;
이 문제는 a가null이 아닐 때 상자를 뜯기고 값을 부여할 때 다시 포장한다는 것이다.이것은 자동 컨테이너 해체의 특성으로 연산에 서로 다른 유형이 있으면 유형 전환과 관련될 때 컴파일러는 아래로 전환하여 연산을 진행한다.메서드를 수정하고 유형을 통일합니다.
Integer a = null;
//...
a = (a == null)?Integer.valueOf(0):a;
넷.정렬 가능한 클래스에 정렬할 수 없거나 임시로 저장할 수 없는 데이터가 존재합니다
[SE_BAD_FIELD]
설명: Non-transient non-serializable instance field in serializable class는 서열화된 클래스에 서열화되지 않거나 임시로 저장할 수 없는 데이터가 존재합니다
해결 방법:
방법 1: 객체를 시리얼화합니다.
방법2:struts2 프레임워크로 개발할 때 피할 수 없는 이 문제가 대량으로 발생할 수 있다. ActionSupport는 서열화 인터페이스를 실현했고 action은 이런 것을 계승했다. 서비스는 서열화되지 않았기 때문에 action에서 서비스 대상을 인용할 때 이 오류를 제시한다. 가장 간단한 해결 방법은 서비스 대상을transient로 성명하는 것이다. 즉, 서비스는 서열화할 필요가 없다는 것이다.
방법 3(미검증): To avoid java serialization you need to implement write Object() and read Object() method in your Class and need to throw NotSerializable Exception from those method.(action에서 이 두 가지 방법을 실현하는가?)
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException {
throw new java.io.NotSerializableException( getClass().getName() );
}
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
throw new java.io.NotSerializableException( getClass().getName() );
}
오.null로 알려진 값을 불러오기
[NP_LOAD_OF_KNOWN_NULL_VALUE]
설명: Load of known null value 가 null인 것으로 알려진 값을 로드합니다.
해결 방법: 이미 알고 있는 방법의 매개 변수는null입니다. 매개 변수 이름이 아니라null을 직접 전달합니다.
여섯.범람 이상 포획 후 처리 안 함
[REC_CATCH_EXCEPTION]
설명: Exception is caught when Exception is not thrown 예외를 포획하거나 포획한 후 처리되지 않음
해결 방법: 이상 분류 캡처(이 이상 대상을 인쇄해야 함)
일곱빈 값을 비빈 매개 변수에 전달했다
[NP_NULL_PARAM_DEREF]
설명: Null passed for nonnull parameter가 빈 값을 비빈 매개변수에 전달합니다.
해결 방법: 비공식 판단 증가
여덟readLine()의 결과를 즉시 참조했습니다.
[NP_IMMEDIATE_DEREFERENCE_OF_READLINE]
설명: Immediate dereference of the result of readLine () 은readLine () 의 결과를 즉시 참조합니다
해결 방법:readLine의 결과가 비어 있는지 판단
아홉악성코드 취약점: (Object, 배열, Date 등) Getter 방법
[EI EXPOSE REP] 악성코드 취약성
설명:may expose internal representation by returning getter 방법 반환 인용 형식
eclipse에서 자동으로 생성된 인용 형식 (Object, 그룹,Date 등) 의 Getter,setter 방법은 가변 대상에 대한 인용 조작을 통해 코드 내부를 노출하거나 해결할 수 있으며, 되돌아오거나 값을 부여한 대상이 원래 인용 대상이 아니라면 됩니다.
해결 방법:
Date :
public Date getHappenTime() {
if(happenTime != null){
return (Date) happenTime.clone();
}
return null;
}
십.악성코드 취약점: (Object, 배열, Date 등)의 setter 방법
[EI EXPOSE REP2] 악성코드 취약성
설명:may expose internal representation by storing an externally mutable object into setter 방법 반환 인용 형식
eclipse에서 자동으로 생성된 인용 형식 (Object, 그룹,Date 등) 의 Getter,setter 방법은 가변 대상에 대한 인용 조작을 통해 코드 내부를 노출하거나 해결할 수 있으며, 되돌아오거나 값을 부여한 대상이 원래 인용 대상이 아니라면 됩니다.
해결 방법:
Date 유형의 경우
public void setHappenTime(Date happenTime) {
if(happenTime != null){
this.happenTime = (Date) happenTime.clone();
}else{
this.happenTime = null;
}
}
십일FindBugs 관련 권장 사항
FindBugs 규칙 모음:http://blog.csdn.net/jdsjlzx/article/details/21472253/
FindBugs의 탐색기를 자세히 설명하려면 다음과 같이 하십시오.http://blog.csdn.net/yang1982_0907/article/details/18606171
Eclipse 또는 My Eclipse에findbugs 플러그인을 설치합니다.http://chenzhou123520.iteye.com/blog/1313565
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.