In der Java -Programmierung können einige Wissen nicht nur durch Sprachspezifikationen oder Standard -API -Dokumente gelernt werden. Dieser Artikel listet es für Sie auf.
1. Realisierung
1. jetzt gleich ()
Klasse Person {String Name; int Birthdayyear; Byte [] roh; public boolean gleich (Objekt obj) {if (! obj Instance von Person) return false; Person Andere = (Person) obj; return name.equals (other.name) && birthdayyear == other.birthyear && arrays.equals (raw, other.raw); } public int HashCode () {...}} 2. Hashcode ()
Klasse Person {String a; Objekt B; Byte C; int [] d; public int hashcode () {return a.hashcode () + b.hashcode () + c + arrays.hashcode (d); } public boolean gleich (Objekt o) {...}}3.. Implementieren Sie Vergleiche ()
Klasse Person implementiert vergleichbar <person> {String FirstName; String LastName; int Geburtstag; // Vergleiche von FirstName, Break Ties von LastName, schließlich brake bra Bindes by Birthdate public int vergleicheto (Person Andere) {if (firstName.comPareto (other.firstname)! sonst if (lastname.comPareto (other.lastName)! sonst wenn (Birthdate <other.birthdate) return -1; sonst wenn (birthdate> other.birthDate) zurückkehren 1; sonst return 0; }} Immer eine generische Version vergleichbar anstelle von primitivem Typ vergleichbar. Denn dies kann das Codevolumen sparen und unnötige Ärger reduzieren.
Kümmere dich nur um die Zeichen (negativ/Null/positiv), die das Ergebnis zurückgeben, und ihre Größe spielt keine Rolle.
Die Implementierung von Comparator.comPare () ähnelt dieser.
4.. Implementieren Sie Clone ()
Klassenwerte implementiert klonbar {String ABC; doppelt foo; int [] Bars; Datum eingestellt; öffentliche Werte clone () {try {values result = (values) super.clone (); result.bars = result.bars.clone (); result.Hired = result.hired.clone (); Rückgabeergebnis; } catch (clonenotsuptedEdException e) {// Impossible neue AssertionError (e); }}}2. Vorbeugende Tests
1.. Defensive Überprüfungswert
int factorial (int n) {if (n <0) werfen neue illegalArgumentException ("undefined"); sonst wenn (n> = 13) neue Arithmexception ("Ergebnisüberlauf") werfen; sonst wenn (n == 0) zurücksender 1; sonst return n * factorial (n - 1);} 2. Vorbeugungstestobjekte
int findIndex (list <string> list, String target) {if (list == null || target == null) werfen neue nullPointerexception (); ...}3.. Vorbeugende Erkennungsarray -Index
void frob (byte [] b, int index) {if (b == null) werfen neue nullpointerexception (); if (index <0 || index> = b.Length) werfen neue indexoutofBoundSexception (); ...}Denken Sie nicht, dass der angegebene Array -Index die Grenzen nicht überschreitet. Es explizit zu erkennen.
4. Intervall für vorbeugende Erkennungsarray
void frob (byte [] b, int off, int len) {if (b == null) werfen neue nullpointerexception (); if (off <0 || off> B.Length || len <0 || b.Length - Aus <len) werfen neue indexoutofBoundSexception (); ...}Denken Sie nicht, dass das angegebene Array -Intervall (z. Es explizit zu erkennen.
3. Array
1. Füllen Sie Array -Elemente aus
Verwenden von Schleifen:
// Jedes Element von Array 'a' mit 123Byte [] a = (...); für (int i = 0; i <a.länge; i ++) a [i] = 123; (Bevorzugte) Methoden zur Verwendung der Standardbibliothek: Arrays.Fill (a, (Byte) 123);
2. Kopieren Sie ein Array -Element in einem Bereich
Verwenden von Schleifen:
// 8 Elemente aus Array 'A' Start bei Offset 3 // an Array 'B' Start bei Offset 6, // Angenommen, 'A' und 'B' sind unterschiedliche ArraysByte [] a = (...); (Bevorzugte) Methoden zur Verwendung der Standardbibliothek: System.ArrayCopy (a, 3, b, 6, 8);
3. Einstellen Sie die Arraygröße ein
Verwenden Sie Schleifen (Skalierung):
// Array 'a' größer zu newlenbyte [] a = (...); byte [] b = new Byte [newlen]; für (int i = 0; i <a.länge; i ++) // steigt auf eine Länge von a b [i] = a [i]; a = b;
Verwenden Sie Schleifen (reduzieren Sie die Größe):
// Array 'a' kleiner zu newlenbyte [] a = (...); byte [] b = new Byte [newlen]; für (int i = 0; i <b.Length; i ++) // steigt bis Länge von B b [i] = a [i]; a = b;
(Bevorzugte) Methoden zur Verwendung der Standardbibliothek:
1a = arrays.copyof (a, newlen);
4. Packen Sie 4 Bytes in einen 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 in 4 Bytes zersetzen
byte[] unpackBigEndian(int x) { return new byte[] { (byte)(x >>> 24), (byte)(x >>> 16), (byte)(x >>> 8), (byte)(x >>> 0) };} byte[] unpackLittleEndian(int x) { return new byte[] { (byte)(x >>> 0), (byte) (x >>> 8), (byte) (x >>> 16), (byte) (x >>> 24)};}Verwenden Sie immer den nicht signierten Rechtsverschiebungsoperator (>>>), um die Bits einzuwickeln. Verwenden Sie den arithmetischen Rechtsverschiebungsoperator nicht (>>).
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.