Effective Java 3rd Edition Chapitre 9 Programme Général
[Effective Java 3rd Edition](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-%E3%], qui est un livre indispensable pour les utilisateurs Java intermédiaires et supérieurs. 82% B8% E3% 83% A7% E3% 82% B7% E3% 83% A5% E3% 82% A2% E3% 83% BB% E3% 83% 96% E3% 83% AD% E3% 83% 83% E3% 82% AF-ebook / dp / B07RHX1K53) a une version Kindle, donc je vais le résumer.
Précédent: Méthodes efficaces du chapitre 8 de Java 3rd Edition
Suivant: Création
Point 57 Réduire la portée des variables locales
- La technique la plus puissante pour minimiser la portée des variables locales est de les déclarer la première fois qu'elles sont utilisées. (Ne pas initialiser au début du bloc)
- Presque toutes les déclarations de variables locales doivent inclure un initialiseur. Si vous ne disposez pas des informations nécessaires à l'initialisation, vous devez reporter la déclaration de variable.
- Les variables de boucle peuvent être déclarées à la fois dans la boucle for et la boucle for-each, limitant la portée à la zone requise.
for (Element e : c) {
//Faites quelque chose avec e
}
for (Iterator<Element> i = c.iterator; i.hasNext(); ) {
Element e = i.next();
//Faites quelque chose avec e et i
}
- Réduisez la taille de la méthode pour la rendre plus ciblée. S'il y a deux processus dans une méthode, la portée sera plus petite si les méthodes sont séparées.
Rubrique 58: Utiliser pour chaque boucle plutôt que pour la boucle classique
for (Suit suit : suits) {
for (Rank rank : ranks) {
deck.add(new Card(suit, rank));
}
}
--For-each est supérieur aux boucles for traditionnelles en termes de clarté, de flexibilité et de prévention des bogues.
- Il n'y a pas de pénalité de performance.
--Situation où for-each ne peut pas être utilisé
- Filtrage destructif: lors d'une boucle lors de la suppression d'éléments
--Conversion: lors du remplacement de tout ou partie des éléments
- Itération parallèle: lors d'une boucle en parallèle
Point 59 Connaître la bibliothèque et utiliser la bibliothèque
- À partir de Java7,
Random
ne doit plus être utilisé, ThreadLocalRandom
doit être utilisé. Haute qualité et rapide.
- Avantages de l'utilisation de bibliothèques standard
—— Vous pouvez utiliser les connaissances d'experts et l'expérience des personnes que vous avez utilisées auparavant.
--Ne perdez pas de temps. Vous devriez passer du temps sur votre application.
- Les performances peuvent s'améliorer avec le temps.
- Au fil du temps, de nouvelles fonctionnalités seront ajoutées à la bibliothèque.
- Votre code est accepté par un grand nombre de développeurs.
Point 60 Évitez les flotteurs et doublez si vous avez besoin d'une réponse précise
- Le «type flottant» et le «type double» ne conviennent pas au calcul monétaire.
-Parce qu'il est impossible de représenter avec précision «0,1».
--Utilisez
BigDecimal type
, ʻint,
long` pour le calcul monétaire.
- L'inconvénient du
type BigDecimal
est qu'il est peu pratique et lent à calculer.
--Les alternatives utilisent ʻint,
long, et calculent tout en cents au lieu de dollars. ―― Utilisez jusqu'à 9 chiffres pour ʻint
, jusqu'à 18 chiffres pour long
, et utilisez BigDecimal
pour plus.
Élément 61 Sélectionnez un type de données de base plutôt qu'un type de données de base encadré
- Différence entre le type de données de base et les données et le type de base encadrés
- Le type de données n'a que la valeur et l'instance de données de base encadrée a une identité différente de la valeur.
- Les données encadrées de base peuvent avoir la valeur NULL.
- Les types de données de base sont efficaces en termes de temps et d'espace.
- Il est presque faux d'appliquer l'opérateur
==
aux données encadrées de base.
--Utilisation des données encadrées de base
- Eléments, clés, valeurs de la collection.
- Paramètres paramétrés de type et de type de méthode.
Élément 62 Évitez les chaînes de caractères là où d'autres sont plus appropriées
- Les types de caractères sont conçus pour représenter du texte et jouer parfaitement leur rôle, mais ils constituent une mauvaise alternative aux autres types de valeur.
- Si vous avez un type de valeur approprié, qu'il s'agisse d'un type de données de base ou d'un type de référence, vous devez utiliser ce type.
Point 63 Méfiez-vous des performances de jointure de chaîne
--Utilisez StringBuilder
pour combiner des chaînes lorsqu'il y a beaucoup d'éléments.
Rubrique 64 Se référer à un objet dans l'interface
- Tous les paramètres, valeurs de retour, variables et champs doivent être déclarés à l'aide du type d'interface, si le type d'interface approprié existe.
- Si vous souhaitez changer d'implémentation, changez simplement le nom de classe qui spécifie le constructeur. (Ou utilisez une autre méthode d'usine statique)
--Si l'interface appropriée n'existe pas, il convient de faire référence à l'objet dans la classe au lieu de l'interface.
- Classes de valeurs telles que
String
, ʻInteger`
- Si l'objet appartient à un framework basé sur les classes, il est souhaitable de s'y référer dans la classe de base associée, qui est généralement une classe abstraite. Beaucoup de
java.io
, tels que ʻOutputStream`, appartiennent à cette catégorie.
- Si l'interface est implémentée, mais que la classe fournit des méthodes supplémentaires que l'interface n'a pas. Par exemple, la classe «PriorityQueue» avec la méthode «comparateur». Cependant, cela devrait être rare.
Point 65 Utiliser l'interface plutôt que la réflexion
- Le prix de la réflexion
- Perte tous les avantages de la vérification de type au moment de la compilation. Les tentatives d'appel de méthodes inexistantes ou inaccessibles échoueront lors de l'exécution du programme.
- Le code qui accède par réflexion est maladroit et redondant. Difficile à lire.
- Les performances sont médiocres.
- Si vous écrivez un programme qui doit fonctionner avec une classe qui n'est pas connue au moment de la compilation, n'utilisez la réflexion que pour l'instance de l'objet autant que possible et accédez à l'objet à l'aide d'une interface ou d'une superclasse connue au moment de la compilation. devrait.
Point 66: Utilisez les méthodes natives avec prudence
- La
Java Native Interface (JNI)
permet aux applications Java d'appeler des méthodes natives, qui sont des méthodes écrites dans des langages de programmation natifs tels que C et C ++.
--Utilisation de la méthode native
- Fournit un accès aux mécanismes spécifiques à la plate-forme tels que le registre et les verrous de fichiers.
- Fournit l'accès au code natif existant et inclut les bibliothèques héritées.
--Amélioration des performances.
- Les implémentations de la JVM sont de plus en plus rapides et il n'est pas recommandé d'utiliser des méthodes natives.
- Inconvénients des méthodes natives
--Ce n'est pas prudent.
- Faible portabilité et difficile à déboguer.
- L'appel de méthodes natives est coûteux et peut réduire les performances.
Point 67 Optimiser soigneusement
- Essayez d'écrire de meilleurs programmes que des programmes rapides. Si vous écrivez un bon programme, la vitesse est le résultat.
- Après avoir construit le système, mesurez les performances.
- Si ce n'est pas rapide, recherchez la cause à l'aide du profileur.
- Les types publics variables peuvent nécessiter inutilement une copie défensive.
Point 68: Respectez la convention de dénomination généralement acceptée
--Il existe des conventions de dénomination typographiques et grammaticales.
- La convention de dénomination d'impression est claire avec seulement une poignée.
- La convention de dénomination littéraire est compliquée et ambiguë.
Imprimer les règles de dénomination
--Nom du paquet, nom du module
-Il doit avoir des éléments séparés par des points et être hiérarchique.
--Comprend des lettres minuscules et rarement des chiffres.
- Devrait commencer par un nom de domaine Internet, avec les éléments inversés.
- Les éléments doivent être courts et ne pas dépasser 8 caractères.
- L'abréviation est recommandée.
--Nom de classe, nom d'interface, nom d'énumération
- Commence par une majuscule. (Cas supérieur chameau, cas Pascal)
- Les abréviations doivent être évitées.
--Nom de la méthode, nom du champ
--Devrait commencer par des minuscules (cas inférieur du chameau)
- Champ constant
--Toutes les majuscules, séparées par un trait de soulignement.
- champ statique final ou immuable
- Variables locales
- Identique au nom du membre, mais les abréviations sont autorisées.
--Tapez le nom du paramètre
—— Généralement un caractère.
--
T
Tout type
--ʻE Type d'élément de collection --
K`` V` Carte et valeurs clés
- Exception
X
--R
Valeur de retour
Règles de dénomination littéraire
--Nom de classe, nom enum
--Nomenclature unique, nomenclature
- Classes d'utilité qui ne peuvent pas être instanciées
--Nomenclature multiple
--Interface
--Adjectifs se terminant par capable, ible
--Type d'annotation
- Tous les mots de partie sont utilisés
--Méthode pour effectuer un traitement
--Verbes, phrases verbales
- La méthode qui renvoie une valeur booléenne commence par is, has.
- Les méthodes qui ne sont pas des valeurs booléennes sont la nomenclature, la nomenclature, les phrases verbales commençant par get
--Une méthode qui convertit le type d'un objet et renvoie un autre type
- Appelé toType, toString, toArray
- Une méthode qui retourne une vue avec un type différent du type de l'objet récepteur
- Appelé asType, asList
- Une méthode qui renvoie des données de base avec la même valeur que l'objet pour lequel la méthode a été appelée
--Appelé typeValue. intValue
--Nom commun avec la méthode de fabrique statique
- from、of、valueOf、instance、getInstance、newInstance、getType、newType