Java 프로그래밍에서는 언어 사양 또는 표준 API 문서를 통해서만 일부 지식을 배울 수 없습니다. 이 기사는 당신을 위해 그것을 나열합니다.
1. 실현
1. 이제 ()와 동일합니다.
클래스 사람 {문자열 이름; int 생일 세포; 바이트 [] RAW; public boolean equals (Object obj) {if (! obj instance) false를 반환합니다. 다른 사람 = (사람) obj; return name.equals (기타 .name) && 생일 year == Other.birthyear && arrays.equals (raw, other.raw); } public int hashcode () {...}} 2. Hashcode ()
클래스 사람 {문자열 a; 대상 B; 바이트 C; int [] d; public int hashcode () {return a.hashcode () + b.hashcode () + c + arrays.hashcode (d); } public boolean Equals (Object O) {...}}3. 비교 () 구현
클래스 사람은 비슷한 <person> {string firstName; 문자열 마지막 이름; int 생일; // FirstName과 비교하고, 마지막 이름에 의한 타이를 break 다. 마지막으로 Birthdate Public int comporeto (person other) {if (firstname.compareto (기타 .firstname)! = 0) return firstname.compareto (기타 .firstname); else if (lastname.compareto (기타 .lastname)! = 0) return lastname.compareto (기타 .lastname); else if (birthdate <other.birthdate) return -1; else if (birthdate> other.birthdate) 반환 1; 그렇지 않으면 0; }} 원시 유형 대신 비교할 수있는 일반 버전을 항상 구현하십시오. 코드 볼륨을 절약하고 불필요한 번거 로움을 줄일 수 있기 때문입니다.
결과를 반환하는 표지판 (음수/제로/양수)에 관심이 있으면 크기가 중요하지 않습니다.
Comparator.compare () 구현은 이것과 유사합니다.
4. 클론 구현 ()
클래스 값은 복제 가능한 {String ABC; 더블 푸; int [] 막대; 고용 된 날짜; 공개 값 clone () {try {value result = (value) super.clone (); result.bars = result.bars.clone (); result.hired = result.hired.clone (); 반환 결과; } catch (clonenotsupportedException e) {// 불가능한 새로운 AssertionError (e); }}}2. 예방 테스트
1. 방어 점검 가치
int factorial (int n) {if (n <0) 새로운 불법 불법 행위 ( "정의되지 않은"); else if (n> = 13) 새로운 arithmeticexception을 던지십시오 ( "결과 오버플로"); 그렇지 않으면 (n == 0) 반환 1; 그렇지 않으면 n * factorial (n -1);} 반환 2. 예방 테스트 객체
int findIndex (list <string> 목록, 문자열 대상) {if (list == null || target == null) 던지기 새 nullPointerException (); ...}3. 예방 감지 어레이 인덱스
void frob (byte [] b, int index) {if (b == null) 새 nullpointerexception () 던지기; if (index <0 || index> = b.length) 새 IndexOfBoundSexection (); ...}주어진 배열 인덱스가 경계를 가로 지르지 않을 것이라고 생각하지 마십시오. 명시 적으로 감지합니다.
4. 예방 감지 어레이 간격
void frob (byte [] b, int off, int len) {if (b == null) 새 nullpointerexception (); if (off <0 || off> b.length || len <0 || b.length -off <len) 새 indexoutofboundsexception (); ...}주어진 배열 간격 (예 : OFF에서 시작하여 LEN 요소를 읽는 것)은 한계를 넘어서지 않을 것이라고 생각하지 마십시오. 명시 적으로 감지합니다.
3. 배열
1. 배열 요소를 채우십시오
루프 사용 :
// 배열의 각 요소를 123Byte [] a = (...)로 채 웁니다. (우선) 표준 라이브러리 사용 방법 : Arrays.fill (a, (byte) 123);
2. 배열 요소를 범위로 복사하십시오
루프 사용 :
// 오프셋에서 시작하는 'a'에서 시작하는 'A'에서 8 개의 요소를 복사합니다. // 오프셋 6에서 시작하는 // 'b'로 시작합니다. // 'a'및 'b'가 별개의 ArraysByte [] a = (...); byte [] b = (...); for (int i = 0; i <8; i ++) b [6 + i] = a [3 + i]; (우선) 표준 라이브러리를 사용하는 방법 : System.ArrayCopy (a, 3, b, 6, 8);
3. 배열 크기를 조정하십시오
루프 사용 (스케일링) :
// 'a'a 'a'a = (...); byte [] b = new byte [newlen]; for (int i = 0; i <a.length; i ++) // A의 길이로 올라갑니다. b [i] = a [i]; a = b;
루프 사용 (크기 감소) :
// array 'a'a newlenbyte [] a = (...); byte [] b = new byte [newlen]; for (int i = 0; i <b.length; i ++) // b b [i] = a [i]; a = b;
(우선) 표준 라이브러리 사용 방법 :
1a = arrays.copyof (a, newlen);
4. 4 바이트 포장 int
int packbigendian (byte [] b) {return (b [0] & 0xff) << 24 | (b [1] & 0xff) << 16 | (B [2] & 0xff) << 8 | (b [3] & 0xff) << 0;} int packlittleendian (byte [] b) {return (b [0] & 0xff) << 0 | (b [1] & 0xff) << 8 | (B [2] & 0xff) << 16 | (B [3] & 0xff) << 24;}5. int를 4 바이트로 분해하십시오
바이트 [] unpackbigendian (int x) {return new byte [] {(byte) (x >>> 24), (byte) (x >>> 16), (byte) (x >>> 8), (byte) (x >>> 0)}; (바이트) (x >>> 8), (byte) (x >>> 16), (byte) (x >>> 24)};}서명되지 않은 오른쪽 편이 연산자 (>>>)를 항상 사용하여 비트를 감싸고 산술 오른쪽 시프트 연산자 (>>)를 사용하지 마십시오.
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.