이런!
1. [필수] 클래스의 객체 참조를 통해 이 클래스의 정적 변수 또는 정적 메서드에 액세스하지 마세요. 이렇게 하면 스크립트로의 컴파일러 구문 분석이 불필요하게 증가합니다. 클래스 이름을 사용하여 직접 액세스할 수 있습니다.
2. [필수] 모든 재정의 메서드에는 @Override 주석을 달아야 합니다.
카운터 예: getObject() 및 0 object() 문제를 가져옵니다. 하나는 문자 O이고 다른 하나는 숫자 0입니다. 재정의 성공 여부를 정확하게 확인하려면 @Override
를 추가하세요. 또한 추상 클래스에서 메서드 시그니처가 수정되면 해당 구현 클래스가 즉시 컴파일되고 오류를 보고합니다.
참고: 변수 매개변수는 매개변수 목록 끝에 배치되어야 합니다. (학생들은 가변 매개변수 프로그래밍을 최대한 피하는 것이 좋습니다)
예: public User getUsers(String type, Integer... ids)4 [필수] 원칙적으로 인터페이스 시그니처의 메소드 시그니처는 노출됩니다. 외부는 수정이 허용되지 않습니다. 인터페이스 호출자에게 영향을 주지 마십시오. 인터페이스가 오래된 경우 @Deprecated 주석을 추가해야 하며, 새로운 인터페이스나 새로운 서비스에 대해 명확하게 설명해야 합니다.5. [필수] 오래된 클래스나 메소드는 사용할 수 없습니다.
참고:
java .net URLDecoder의 메소드 decode(String encodeStr)는 더 이상 사용되지 않으며 2개 매개변수 decode(String source, String encode)를 대신 사용해야 합니다. 인터페이스 공급자는 분명히 오래된 인터페이스이므로 호출자로서 동시에 새로운 인터페이스를 제공해야 하며, 오래된 메서드의 새로운 구현을 확인해야 합니다.
6. Object의 equals 메소드는 null 포인터 예외를 발생시키기 쉽습니다. equals를 호출하려면 특정 값을 가진 상수나 객체를 사용해야 합니다.
긍정적 예: " test " .equals(object);
카운터 예:
object.equals( " test " );설명: Java util을 사용하는 것이 좋습니다. (JDK 7 Tool 클래스에서 도입됨)
7. [필수] 동일한 유형의 패키징 클래스 객체 간의 모든 값 비교에는 equals 메서드를 사용해야 합니다.
설명: -128에서 127 사이의 Integer var =? 할당의 경우 Integer 개체는 IntegerCache 캐시에 생성되며 이 범위의 정수 값을 직접 사용하여 수행할 수 있습니다. 판단하지만 이 범위를 벗어나는 모든 데이터는 힙에 생성되며 기존 개체는 재사용되지 않습니다. 이는 큰 함정입니다. 판단에는 동등 방법을 사용하는 것이 좋습니다.
8. [필수] 기본 데이터 유형과 패키지 데이터 유형의 사용 기준은 다음과 같습니다.
1) 모든 POJO 클래스 속성은 패키지 데이터 유형을 사용해야 합니다.
2) RPC 메서드의 반환 값과 매개 변수는 래핑된 데이터 형식을 사용해야 합니다.
3) 모든 로컬 변수[권장]는 기본 데이터 유형을 사용합니다.
참고: POJO 클래스 속성에는 사용자가 이를 사용해야 할 때 직접 값을 명시적으로 할당해야 함을 상기시키는 초기 값이 없습니다.
NPE 문제 또는 창고 확인은 사용자가 보장합니다.
긍정적인 예: 자동 언박싱 및 기본 데이터 유형 수신에는 NPE 위험이 있으므로 데이터베이스의 쿼리 결과가 null일 수 있습니다.
카운터 예시: 예를 들어 총 거래 금액의 상승 및 하락, 즉 플러스 또는 마이너스 x%를 표시합니다. x는 기본 데이터 유형이며 호출이 실패할 경우 RPC 서비스가 호출됩니다. 을 사용하면 기본값이 반환되고 페이지에 0%가 표시됩니다. 이는 불합리하므로 대시로 표시해야 합니다. 따라서 래핑된 데이터 유형의 null 값은 원격 호출 실패 및 비정상적인 종료와 같은 추가 정보를 나타낼 수 있습니다.
9. [필수] DO/DTO/VO 등 POJO 클래스를 정의할 때 속성 기본값을 설정하지 마세요.
카운터 예: POJO 클래스의 gmtCreate 기본값은 new Date()입니다. 그러나 이 속성은 데이터 추출 중에 특정 값으로 설정되지 않습니다. 이 필드는 다른 필드가 업데이트될 때에도 업데이트됩니다. 생성 시간이 현재 시간으로 수정됩니다.
10. [필수] 직렬화 클래스에 새 속성을 추가할 때 직렬화 해제 실패를 방지하고 직렬화 해제 혼란을 방지하려면 serialVersionUID 필드를 수정하지 마세요.
참고:
일관되지 않은 serialVersionUID는 직렬화 런타임 예외를 발생시킵니다.11. [필수] 초기화 로직이 있으면 init 메소드에 비즈니스 로직을 추가하는 것이 금지됩니다.
12. [필수] POJO 클래스는 toString 메소드를 작성해야 합니다. IDE의 도구인 source > generate toString
을 사용하는 경우 다른 POJO 클래스를 상속하는 경우 앞에 toString을 추가해야 합니다.
참고: 메서드 실행 중에 예외가 발생하면 POJO의 toString() 메서드를 직접 호출하여 해당 속성 값을 인쇄할 수 있으므로 문제 해결에 편리합니다
.
13. [권장 사항] String의 분할 메소드로 얻은 배열에 인덱스를 사용하여 액세스할 때 마지막 구분 기호 뒤에 내용이 있는지 확인해야 합니다. 그렇지 않으면 IndexOutOfBoundsException이 발생할 위험이 있습니다.
지침:
String str = "a,b,c,,"; String[] ary = str.split(","); //预期大于 3,结果是 3 System.out.println(ary.length);
14. [권장 사항] 클래스에 여러 생성자가 있거나 동일한 이름을 가진 여러 메서드가 있는 경우 읽기 쉽도록 이러한 메서드를 함께 배치해야 합니다.
메소드입니다.
설명: 공개 메서드는 클래스의 호출자와 유지관리자가 가장 염려하는 메서드이며, 보호된 메서드는 하위 클래스에만 관련되지만, 아래의 핵심 메서드일 수도 있습니다. "템플릿 디자인 모드"는 일반적으로 프라이빗 메소드 외부에 특별한 주의를 기울일 필요가 없습니다. 메소드 정보의 값이 낮기 때문에 Service 및 DAO의 모든 getter/setter 메소드는 클래스 본문의 끝에 배치됩니다. 16. [권장사항] setter 메소드에서 매개변수 이름은 클래스 멤버 변수 이름과 일치합니다.
getter/setter 메서드에서는 비즈니스 로직을 추가하지 않고 문제 해결의 난이도를 높이도록 노력하세요.public Integer getData(){ if(true) { return data + 100; } else { return data - 100; } }
17. [권장] 루프 본문에서 StringBuilder의 추가 방법을 사용하여 문자열 연결 방법을 확장합니다.
카운터 예:
String str = "start"; for(int i=0; i<100; i++){ str = str + "hello"; }설명:
디컴파일된 바이트코드 파일은 각 루프가 새로운 StringBuilder 객체를 생성한 다음 append 작업을 수행하고 마지막으로 toString 메소드를 통해 String 객체를 반환하므로 낭비가 발생함을 보여줍니다. 메모리 리소스.
18.final은 프로그램 응답 효율성을 향상시킬 수 있으며, final로 선언하는 상황:
1) 클래스 속성, 로컬 변수를 포함하여 재할당이 필요 없는 변수.
2) object 매개변수 앞에 final을 추가합니다. 이는 참조점을 수정할 수 없음을 의미합니다.
3) 클래스 메서드는 절대 재정의될 수 없습니다.
19. [권장] 객체를 복사할 때는 주의해서 Object의 clone 메소드를 사용하세요.참고:
개체의 복제 메서드는 기본적으로 얕은 복사본입니다. 전체 복사를 구현하려면 복제 메서드를 재정의하여 속성 개체
20. [권장] 클래스 멤버 및 메소드에 대한 엄격한 접근 제어:
1) new를 통해 외부 개체를 직접 생성할 수 없는 경우 생성자는 비공개여야 합니다.
2) 도구 클래스는 공개 또는 기본 생성자를 가질 수 없습니다.
3) 클래스의 비정적 멤버 변수와 서브클래스와 공유되는 변수는 보호되어야 합니다.
4) 클래스 비정적 멤버 변수는 이 클래스에서만 사용되며 비공개여야 합니다.
5) 클래스 정적 멤버 변수가 이 클래스에서만 사용되는 경우 비공개여야 합니다.
6) 정적 멤버 변수인 경우 최종인지 여부를 고려해야 합니다.
7) 클래스 멤버 메서드는 클래스 내에서만 호출할 수 있으며 비공개여야 합니다.
8) 클래스 멤버 메서드는 상속된 클래스에만 공개되므로 protected로 제한됩니다.
참고: 모든 클래스, 메서드, 매개변수 또는 변수의 액세스 범위를 엄격하게 제어하세요. 액세스 범위가 너무 넓으면 모듈 분리에 도움이 되지 않습니다. 생각: 프라이빗 메소드라면 삭제하면 되지만, 퍼블릭 서비스 메소드이거나 퍼블릭 멤버변수라면 삭제하면 손바닥에 땀이 좀 나겠죠? 변수는 자신의 자식과 같습니다. 변수의 범위가 너무 넓으면 걱정이 됩니다.