ในการเขียนโปรแกรม Java ความรู้บางอย่างไม่สามารถเรียนรู้ได้ผ่านข้อกำหนดภาษาหรือเอกสาร API มาตรฐานเท่านั้น บทความนี้แสดงรายการสำหรับคุณ
1. การรับรู้
1. ตอนนี้เท่ากับ ()
บุคคลในชั้นเรียน {ชื่อสตริง; int วันเกิดปี; ไบต์ [] ดิบ; บูลีนสาธารณะเท่ากับ (Object obj) {ถ้า (! OBJ Instanceof Person) คืนค่าเท็จ; บุคคลอื่น = (บุคคล) obj; return name.equals (อื่น ๆ name) && birthdayyear == อื่น ๆ birthyear && array.equals (raw, other.raw); } public int hashCode () {... }} 2. HashCode ()
บุคคลในชั้นเรียน {String A; วัตถุ B; ไบต์ C; int [] d; public int hashCode () {return a.hashCode () + b.HashCode () + c + array.hashCode (d); } บูลีนสาธารณะเท่ากับ (Object O) {... }}3. ใช้ comparTo ()
บุคคลในชั้นเรียนใช้ความเปรียบเทียบ <person> {String FirstName; สตริงนามสกุล; int วันเกิด; // เปรียบเทียบโดย FirstName, Break Ties โดย LastName, ในที่สุดก็ทำลายความสัมพันธ์โดยวันเกิด public int compereto (บุคคลอื่น ๆ ) {ถ้า (firstName.Compareto (อื่น ๆ . อย่างอื่นถ้า (lastName.Compareto (อื่น ๆ . lastName)! = 0) return.Compareto (อื่น ๆ . lastName); อื่นถ้า (วันเกิด <อื่น ๆ . birthdate) return -1; อย่างอื่นถ้า (วันเกิด> อื่น ๆ กลับมา) กลับ 1; กลับมาอีก 0; - ใช้เวอร์ชันทั่วไปเสมอเทียบเท่าแทนประเภทดั้งเดิมเทียบเท่ากัน เพราะสิ่งนี้สามารถบันทึกปริมาณรหัสและลดความยุ่งยากที่ไม่จำเป็น
เพียงแค่ใส่ใจเกี่ยวกับสัญญาณ (ลบ/ศูนย์/บวก) ที่ส่งคืนผลลัพธ์ขนาดของพวกเขาไม่สำคัญ
comparator.compare () การใช้งานคล้ายกับสิ่งนี้
4. ใช้โคลน ()
ค่าคลาสใช้ cloneable {string abc; double foo; int [] บาร์; วันที่จ้าง; ค่าสาธารณะ clone () {ลอง {ค่าผลลัพธ์ = (ค่า) super.clone (); result.bars = result.bars.clone (); result.hired = result.hired.clone (); ผลการกลับมา; } catch (clonenotsupportedException e) {// เป็นไปไม่ได้โยน assertionError ใหม่ (e); -2. การทดสอบเชิงป้องกัน
1. ค่าการตรวจสอบการป้องกัน
int factorial (int n) {ถ้า (n <0) โยน unlegalargumentException ใหม่ ("undefined"); อย่างอื่นถ้า (n> = 13) โยน arithmeticexception ใหม่ ("ผลลัพธ์ล้น"); อื่นถ้า (n == 0) ส่งคืน 1; else return n * factorial (n - 1);} 2. วัตถุทดสอบเชิงป้องกัน
int findIndex (รายการ <string> รายการเป้าหมายสตริง) {ถ้า (list == null || target == null) โยน nullpointerexception ใหม่ (); -3. ดัชนีอาร์เรย์ตรวจจับเชิงป้องกัน
เป็นโมฆะ frob (byte [] b, ดัชนี int) {ถ้า (b == null) โยน nullpointerexception ใหม่ (); if (index <0 || index> = b.length) โยน indexoutofboundsexception ใหม่ (); -อย่าคิดว่าดัชนีอาร์เรย์ที่กำหนดจะไม่ข้ามขอบเขต เพื่อตรวจจับอย่างชัดเจน
4. ช่วงเวลาอาร์เรย์ตรวจจับเชิงป้องกัน
เป็นโมฆะ frob (byte [] b, int ปิด, int len) {ถ้า (b == null) โยน nullpointerexception ใหม่ (); if (ปิด <0 || ปิด> b.length || len <0 || b.length - ปิด <len) โยน indexoutofboundsexception ใหม่ (); -อย่าคิดว่าช่วงเวลาอาร์เรย์ที่กำหนด (ตัวอย่างเช่นการเริ่มต้นจากปิดการอ่านองค์ประกอบของเลน) จะไม่เกินขอบเขต เพื่อตรวจจับอย่างชัดเจน
3. อาเรย์
1. เติมองค์ประกอบอาร์เรย์
ใช้ลูป:
// เติมแต่ละองค์ประกอบของอาร์เรย์ 'a' ด้วย 123Byte [] a = (... ); สำหรับ (int i = 0; i <a.length; i ++) a [i] = 123; (พิเศษ) วิธีการใช้ไลบรารีมาตรฐาน: array.fill (a, (ไบต์) 123);
2. คัดลอกองค์ประกอบอาร์เรย์ในช่วง
ใช้ลูป:
// คัดลอก 8 องค์ประกอบจากอาร์เรย์ 'A' เริ่มต้นที่ออฟเซ็ต 3 // ถึงอาร์เรย์ 'B' เริ่มต้นที่ออฟเซ็ต 6, // สมมติว่า 'A' และ 'B' เป็นอาร์เรย์ที่แตกต่างกัน [] a = (... ); byte [] b = (... ); สำหรับ (int i = 0; i <8; (พิเศษ) วิธีการใช้ไลบรารีมาตรฐาน: System.arrayCopy (a, 3, b, 6, 8);
3. ปรับขนาดอาร์เรย์
ใช้ลูป (ปรับขนาดขึ้น):
// ทำอาร์เรย์ 'a' ใหญ่ถึง newlenbyte [] a = (... ); byte [] b = ไบต์ใหม่ [newlen]; สำหรับ (int i = 0; i <a.length; i ++) // ขึ้นไปตามความยาวของ b [i] = a [i]; a = b;
ใช้ลูป (ลดขนาด):
// สร้างอาร์เรย์ 'a' เล็กกว่า newlenbyte [] a = (... ); byte [] b = byte ใหม่ [newlen]; สำหรับ (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 ไบต์
Byte [] unpackbigendian (int x) {ส่งคืน byte ใหม่ [] {(byte) (x >>> 24), (byte) (x >>> 16), (byte) (x >>> 8), (byte) (x >>> 0)};} byte [] >>> 8), (ไบต์) (x >>> 16), (ไบต์) (x >>> 24)};}ใช้ตัวดำเนินการที่ไม่ได้ลงนามขวา (>>>) เสมอเพื่อห่อบิตอย่าใช้ตัวดำเนินการเลขคณิตขวา (>>)
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน