Dans la programmation Java, certaines connaissances ne peuvent être apprises que par le biais de spécifications linguistiques ou de documents API standard. Cet article le répertorie pour vous.
1. Réalisation
1. Maintenant égaux ()
classe de classe {String name; int anniversaireyear; octet [] brut; Le booléen public est égal (objet obj) {if (! obj instanceof personne) renvoie false; Personne autre = (personne) obj; retour name.equals (autre.name) && anniversaireyear == autre.birthyear && arrays.equals (brut, autre.raw); } public int hashcode () {...}} 2. HashCode ()
classe de classe {String a; Objet b; octet C; int [] d; public int hashcode () {return a.hashcode () + b.hashcode () + c + arrays.hashcode (d); } public booléen égaux (objet O) {...}}3. Implémentez compareto ()
La personne de classe implémente comparable <ponse> {String FirstName; String LastName; int anniversaire; // Comparez par FirstName, Break Ties by LastName, enfin Break Ties by Birthdate public int compareto (personne autre) {if (FirstName ..comPareto (autre.FirstName)! = 0) return FirstName ..Careto (autre.FirstName); else if (lastName.compareto (other.lastName)! = 0) return lastName ..........mardName.compareto (autre.lastName); else if (naissance <autre.birthdate) retour -1; else if (naissance> autre.birthdate) retour 1; else return 0; }} Implémentez toujours la version générique comparable au lieu de type primitif comparable. Parce que cela peut économiser le volume de code et réduire les tracas inutiles.
Il suffit de se soucier des signes (négatifs / zéro / positifs) qui renvoient le résultat, leur taille n'a pas d'importance.
La mise en œuvre de comparateur.compare () est similaire à celle-ci.
4. Implémentation de clone ()
Les valeurs de classe implémentent clonables {String ABC; double foo; bars int []; Date embauchée; VALEURS PUBLIC CLONE () {try {valeurs result = (valeurs) super.clone (); result.bars = result.bars.clone (); result.hired = result.hired.clone (); Résultat de retour; } catch (clonenotsupportEdException e) {// Impossible Throw New AssertionError (e); }}}2. Test préventif
1. Valeur de vérification défensive
int factorial (int n) {if (n <0) lance un nouveau IllégalArgumentException ("Undefined"); else if (n> = 13) lance un nouveau arithmeticexception ("Résultat débordement"); else if (n == 0) return 1; else return n * factorial (n - 1);} 2. Objets de test préventif
int findIndex (list <string> list, string target) {if (list == null || cible == null) lancez new nullpointerException (); ...}3. Indice de tableau de détection préventif
void frob (byte [] b, int index) {if (b == null) lance un nouveau nullpointerException (); if (index <0 || index> = b.length) lancez un nouvel indexoutofboundSexception (); ...}Ne pensez pas que l'indice de tableau donné ne traversera pas les limites. Pour le détecter explicitement.
4. Intervalle de tableau de détection préventive
void frob (byte [] b, int off, int len) {if (b == null) lance un nouveau nullpointerException (); if (off <0 || off> b.length || len <0 || b.length - off <len) lancez la nouvelle indexoutofboundSexception (); ...}Ne pensez pas que l'intervalle de tableau donné (par exemple, à partir des éléments de lecture de Len) n'ira pas au-delà des limites. Pour le détecter explicitement.
3. Array
1. Remplissez les éléments de la table
Utilisation de boucles:
// Remplissez chaque élément du tableau 'a' avec 123 byte [] a = (...); pour (int i = 0; i <a.Length; i ++) a [i] = 123; (Préférentiel) Méthodes d'utilisation de la bibliothèque standard: arrays.filt (a, (octet) 123);
2. Copiez un élément de tableau dans une gamme
Utilisation de boucles:
// Copier 8 éléments du tableau 'A' commençant par décalage 3 // à Array 'B' commençant par décalage 6, // en supposant 'a' et 'b' sont des arraysyte distincts [] a = (...); octet [] b = (...); pour (int i = 0; i <8; i ++) b [6 + i] = a [3 + i]; (Préférentiel) Méthodes pour utiliser la bibliothèque standard: System.ArrayCopy (A, 3, B, 6, 8);
3. Ajustez la taille du tableau
Utilisez des boucles (mise à l'échelle):
// faire un array 'a' plus grand pour newlenbyte [] a = (...); byte [] b = new byte [newlen]; for (int i = 0; i <a.length; i ++) // monte jusqu'à la longueur de a b [i] = a [i]; a = b;
Utilisez des boucles (réduisez la taille):
// faire un array 'a' plus petit à newlenbyte [] a = (...); byte [] b = new byte [newlen]; for (int i = 0; i <b.length; i ++) // monte jusqu'à la longueur de b b [i] = a [i]; a = b;
(Préférentiel) Méthodes pour utiliser la bibliothèque standard:
1a = arrays.copyof (a, newlen);
4. Emballage 4 octets dans un int
int packBigendien (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. Décomposer Int en 4 octets
[] UnmackBigeNian (int x) {return new octet [] {(octet) (x >>> 24), (octet) (x >>> 16), (octet) (x >>> 8), (octet) (x >>> 0)};} Byte [] unmacklittleendian (int x) {return byte [] {(byte) (x >> 0), 0) (octet) (x >>> 8), (octet) (x >>> 16), (octet) (x >>> 24)};}Utilisez toujours l'opérateur de shift à droite non signé (>>>) pour envelopper les bits, n'utilisez pas l'opérateur de shift à droite arithmétique (>>).
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.