Dalam pemrograman Java, beberapa pengetahuan tidak dapat dipelajari hanya melalui spesifikasi bahasa atau dokumen API standar. Artikel ini mencantumkannya untuk Anda.
1. Realisasi
1. Sekarang sama ()
class person {string name; Int Birthdayyear; byte [] mentah; Public Boolean Equals (Object Obj) {if (! Obj instance dari Person) Return False; Orang lain = (orang) obj; return name.equals (Other.name) && ulang tahunYear == Other.birthyear && arrays.equals (RAW, Other.raw); } public int hashCode () {...}} 2. HashCode ()
class person {string a; Objek B; byte c; int [] d; public int hashCode () {return a.hashcode () + b.hashcode () + c + arrays.hashcode (d); } public boolean sama (objek o) {...}}3. Menerapkan compareto ()
Class Person mengimplementasikan <Fone> yang sebanding {String firstName; String LastName; ulang tahun int; // Bandingkan dengan FirstName, Break Ties by LastName, akhirnya dasi break by BirthDate public int compareto (orang lain) {if (firstName.compareto (Other.firstName)! = 0) return firstName.compareto (Other.firstname); lain if (lastname.compareto (Other.LastName)! = 0) return LastName.Competo (Other.LastName); lain jika (kelahiran tDate <Other.birthDate) kembali -1; lain jika (BirthDate> Other.birthDate) kembali 1; lain kembali 0; }} Selalu terapkan versi generik yang sebanding, bukan tipe primitif yang sebanding. Karena ini dapat menyimpan volume kode dan mengurangi kerumitan yang tidak perlu.
Peduli tentang tanda -tanda (negatif/nol/positif) yang mengembalikan hasilnya, ukurannya tidak masalah.
Implementasi Comparator.compare () mirip dengan yang ini.
4. Menerapkan klon ()
Nilai kelas mengimplementasikan kloning {String ABC; foo ganda; int [] bar; Tanggal disewa; nilai publik clone () {try {values result = (values) super.clone (); result.bars = result.bars.clone (); result.hired = result.hired.clone (); hasil pengembalian; } catch (clonenotsupportedException e) {// mustahil melempar assertionerror baru (e); }}}2. Pengujian Pencegahan
1. Nilai Pemeriksaan Defensif
Int Factorial (int n) {if (n <0) melempar IllegalArgumentException baru ("tidak terdefinisi"); lain jika (n> = 13) melempar arithmeticException baru ("hasil overflow"); lain jika (n == 0) kembali 1; lain return n * factorial (n - 1);} 2. Objek Pengujian Pencegahan
int findIndex (daftar <string> daftar, string target) {if (list == null || target == null) lempar nullpointerException baru (); ...}3. Indeks Array Deteksi Pencegahan
void frob (byte [] b, index int) {if (b == null) lempar nullpointerexception baru (); if (index <0 || index> = b.length) lempar indexOutofboundsException () baru; ...}Jangan berpikir bahwa indeks array yang diberikan tidak akan melewati batas. Untuk mendeteksinya secara eksplisit.
4. Interval Array Deteksi Pencegahan
void frob (byte [] b, int off, int len) {if (b == null) lempar nullpointerException baru (); if (off <0 || off> b.length || len <0 || b.length - off <len) lempar indexoutofboundsException (); ...}Jangan berpikir bahwa interval array yang diberikan (misalnya, mulai dari luar, membaca elemen len) tidak akan melampaui batas. Untuk mendeteksinya secara eksplisit.
3. Array
1. Isi elemen array
Menggunakan loop:
// Isi setiap elemen array 'a' dengan 123byte [] a = (...); untuk (int i = 0; i <a.length; i ++) a [i] = 123; (Preferensi) metode untuk menggunakan pustaka standar: arrays.fill (a, (byte) 123);
2. Salin elemen array dalam rentang
Menggunakan loop:
// Salin 8 elemen dari array 'a' mulai dari offset 3 // ke array 'b' mulai dari offset 6, // asumsi 'a' dan 'b' adalah arraysbyte yang berbeda [] a = (...); byte [] b = (...); untuk (int i = 0; i <8; i ++) b [6 + i] = a [3 + i]; (Preferensi) Metode untuk menggunakan pustaka standar: System.ArrayCopy (A, 3, B, 6, 8);
3. Sesuaikan ukuran array
Gunakan loop (skala up):
// buat array 'a' lebih besar ke newlenbyte [] a = (...); byte [] b = byte baru [newlen]; for (int i = 0; i <a.length; i ++) // naik ke panjang b [i] = a [i]; a = b;
Gunakan loop (kurangi ukurannya):
// buat array 'a' lebih kecil ke newlenbyte [] a = (...); byte [] b = byte baru [newlen]; untuk (int i = 0; i <b.length; i ++) // naik ke panjang b b [i] = a [i]; a = b;
(Preferensi) Metode untuk menggunakan pustaka standar:
1a = arrays.copyof (a, newlen);
4. Mengemas 4 byte menjadi 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. Mengurai int menjadi 4 byte
byte [] unpackbigendian (int x) {return byte baru [] {(byte) (x >>> 24), (byte) (x >>> 16), (byte) (x >>> 8), (byte) (x >> 0)};} byte [] unpacklittleDian (int x) {lebah) {byte [] {x) {byte [] {x) {byte {x) {x) { (byte) (x >>> 8), (byte) (x >>> 16), (byte) (x >>> 24)};}Selalu gunakan operator pergeseran kanan yang tidak ditandatangani (>>>) untuk membungkus bit, jangan gunakan operator pergeseran kanan aritmatika (>>).
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.