Effektives Java 3rd Edition Kapitel 9 Programm Allgemein
[Effective Java 3rd Edition](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-%E3%], ein Muss für fortgeschrittene Java-Benutzer und höher. 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) hat eine Kindle-Version, daher werde ich sie zusammenfassen.
Zurück: Effektive Java 3rd Edition Kapitel 8 Methoden
Weiter: Erstellen
Punkt 57 Minimieren Sie den Umfang lokaler Variablen
- Die leistungsstärkste Methode, um den Umfang lokaler Variablen zu minimieren, besteht darin, sie bei der ersten Verwendung zu deklarieren. (Nicht am Anfang des Blocks initialisieren)
- Fast alle lokalen Variablendeklarationen sollten einen Initialisierer enthalten. Wenn Sie nicht über die Informationen verfügen, die Sie zum Initialisieren benötigen, sollten Sie die Variablendeklaration verschieben.
--Loop-Variablen können sowohl in der for-Schleife als auch in der for-each-Schleife deklariert werden, wodurch der Bereich auf den erforderlichen Bereich beschränkt wird.
for (Element e : c) {
//Mach etwas mit e
}
for (Iterator<Element> i = c.iterator; i.hasNext(); ) {
Element e = i.next();
//Mach etwas mit e und i
}
- Machen Sie die Methode kleiner, um sie fokussierter zu machen. Wenn eine Methode zwei Prozesse enthält, ist der Bereich kleiner, wenn die Methoden getrennt sind.
Punkt 58: Verwenden Sie für jede Schleife anstelle der herkömmlichen for-Schleife
for (Suit suit : suits) {
for (Rank rank : ranks) {
deck.add(new Card(suit, rank));
}
}
--For-each ist herkömmlichen for-Schleifen in Bezug auf Klarheit, Flexibilität und Fehlervermeidung überlegen.
- Es gibt keine Leistungseinbußen.
- Situation, in der nicht jeder verwendet werden kann
- Zerstörerische Filterung: Beim Schleifen beim Löschen von Elementen
--Konvertierung: Beim Ersetzen einiger oder aller Elemente
- Parallele Iteration: Bei paralleler Schleife
Punkt 59 Kennen Sie die Bibliothek und verwenden Sie die Bibliothek
- Ab Java7 sollte "Random" nicht mehr verwendet werden, "ThreadLocalRandom" sollte verwendet werden. Hohe Qualität und schnell.
- Vorteile der Verwendung von Standardbibliotheken
- Sie können das Wissen von Experten und die Erfahrung von Personen nutzen, die es zuvor verwendet haben.
--Verschwende keine Zeit. Sie sollten Zeit mit Ihrer Bewerbung verbringen.
- Die Leistung kann sich mit der Zeit verbessern.
- Im Laufe der Zeit werden der Bibliothek neue Funktionen hinzugefügt.
- Ihr Code wird von einer großen Anzahl von Entwicklern akzeptiert.
Punkt 60 Vermeiden Sie Floats und Doubles, wenn Sie eine genaue Antwort benötigen
- "Float Type" und "Double Type" sind nicht für die Geldberechnung geeignet.
- Weil es unmöglich ist, "0,1" genau darzustellen.
- Verwenden Sie für die Geldberechnung "BigDecimal type", "int" und "long".
- Der Nachteil von "BigDecimal Typ" ist, dass es unpraktisch und langsam zu berechnen ist.
--Alternative verwenden "int", "long" und berechnen alle in Cent anstelle von Dollar.
--Verwenden Sie bis zu 9 Stellen für "int", bis zu 18 Stellen für "long" und verwenden Sie "BigDecimal" für mehr.
Punkt 61 Wählen Sie einen Basisdatentyp anstelle eines Boxed-Basisdatentyps aus
- Unterschied zwischen Basisdatentyp und Boxed-Basisdaten und -typ
- Der Datentyp hat nur den Wert, und die Basisdateninstanz mit Box hat eine andere Identität als der Wert.
- Die grundlegenden Boxdaten können null haben.
- Grundlegende Datentypen sind zeitlich und räumlich effizient.
- Es ist fast falsch, den Operator
==
auf die grundlegenden Boxdaten anzuwenden.
- Verwendung grundlegender Boxdaten
- Elemente, Schlüssel, Werte in der Sammlung.
- Parameter für parametrisierten Typ und Methodentyp.
Punkt 62 Vermeiden Sie Zeichenketten, wenn andere besser geeignet sind
--Charaktertypen sind so konzipiert, dass sie Text darstellen und ihre Rolle perfekt spielen, aber sie sind schlechte Alternativen zu anderen Werttypen.
- Wenn Sie einen geeigneten Werttyp haben, egal ob es sich um einen Basisdatentyp oder einen Referenztyp handelt, sollten Sie diesen Typ verwenden.
Punkt 63 Achten Sie auf die Leistung beim Verbinden von Zeichenfolgen
--Verwenden Sie "StringBuilder", um Zeichenfolgen zu kombinieren, wenn viele Elemente vorhanden sind.
Punkt 64 Beziehen Sie sich auf ein Objekt in der Schnittstelle
- Alle Parameter, Rückgabewerte, Variablen und Felder sollten mit dem Schnittstellentyp deklariert werden, sofern der entsprechende Schnittstellentyp vorhanden ist.
- Wenn Sie die Implementierung wechseln möchten, ändern Sie einfach den Klassennamen, der den Konstruktor angibt. (Oder verwenden Sie eine andere statische Factory-Methode)
--Wenn die entsprechende Schnittstelle nicht vorhanden ist, sollte anstelle der Schnittstelle auf das Objekt in der Klasse verwiesen werden.
--Wertklassen wie "String", "Integer"
- Wenn das Objekt zu einem klassenbasierten Framework gehört, ist es wünschenswert, in der zugehörigen Basisklasse darauf zu verweisen, die im Allgemeinen eine abstrakte Klasse ist. Viele
java.io
s, wie zum Beispiel OutputStream
, gehören zu dieser Kategorie.
--Wenn die Schnittstelle implementiert ist, die Klasse jedoch zusätzliche Methoden bereitstellt, über die die Schnittstelle nicht verfügt. Zum Beispiel die "PriorityQueue" -Klasse mit der "Comparator" -Methode. Es sollte jedoch selten sein.
Punkt 65 Verwenden Sie die Schnittstelle anstelle der Reflexion
- Der Preis der Reflexion
- Verlieren Sie alle Vorteile der Typprüfung beim Kompilieren. Versuche, nicht vorhandene oder nicht zugängliche Methoden aufzurufen, schlagen bei der Programmausführung fehl.
- Der Code, auf den durch Reflexion zugegriffen wird, ist umständlich und redundant. Schwierig zu lesen.
--Die Leistung ist schwach.
- Wenn Sie ein Programm schreiben, das mit einer Klasse arbeiten muss, die zur Kompilierungszeit nicht bekannt ist, verwenden Sie Reflection so weit wie möglich nur für die Instanz des Objekts und greifen Sie über eine zur Kompilierungszeit bekannte Schnittstelle oder Oberklasse auf das Objekt zu. sollte.
Punkt 66: Verwenden Sie native Methoden mit Vorsicht
- Mit der Java Native Interface (JNI) können Java-Anwendungen native Methoden aufrufen, dh Methoden, die in nativen Programmiersprachen wie C und C ++ geschrieben sind.
- Verwendung der nativen Methode
- Bietet Zugriff auf plattformspezifische Mechanismen wie die Registrierung und Dateisperren.
- Bietet Zugriff auf vorhandenen nativen Code und enthält ältere Bibliotheken.
--Leistungsverbesserung.
--JVM-Implementierungen werden schneller und es wird nicht empfohlen, native Methoden zu verwenden.
- Nachteile nativer Methoden
--Es ist nicht sicher.
- Geringe Portabilität und schwer zu debuggen.
- Das Aufrufen nativer Methoden ist kostspielig und kann die Leistung beeinträchtigen.
Punkt 67 Sorgfältig optimieren
- Versuchen Sie, bessere Programme als schnelle zu schreiben. Wenn Sie ein gutes Programm schreiben, ist Geschwindigkeit das Ergebnis.
- Messen Sie nach dem Aufbau des Systems die Leistung.
- Wenn es nicht schnell geht, finden Sie die Ursache mit Hilfe des Profilers heraus.
--Variable öffentliche Typen erfordern möglicherweise unnötigerweise eine defensive Kopie.
Punkt 68: Beachten Sie die allgemein anerkannte Namenskonvention
- Es gibt typografische und grammatikalische Namenskonventionen.
- Die Druckbenennungskonvention ist mit nur einer Handvoll klar.
- Die literarische Namenskonvention ist kompliziert und mehrdeutig.
Namensregeln drucken
- Paketname, Modulname
-Es sollte Elemente durch Punkte getrennt und hierarchisch sein.
- Besteht aus Kleinbuchstaben und selten Zahlen.
- Sollte mit einem Internet-Domain-Namen beginnen, wobei die Elemente umgekehrt sind.
- Elemente sollten kurz sein und nicht mehr als 8 Zeichen enthalten.
- Die Abkürzung wird empfohlen.
--Klassenname, Schnittstellenname, Aufzählungsname
- Startet mit Großbuchstaben. (Oberes Kamelgehäuse, Pascalgehäuse)
- Abkürzungen sollten vermieden werden.
- Methodenname, Feldname
- Sollte mit Kleinbuchstaben beginnen (Kleinbuchstaben Kamel)
- Konstantes Feld
- Alle Kapital, durch Unterstrich getrennt.
- statisches endgültiges oder unveränderliches Feld
- Lokale Variablen
- Gleich wie der Mitgliedsname, aber Abkürzungen sind zulässig.
--Typ Parametername
- Normalerweise ein Zeichen.
--
T
Jeder Typ
--E
Sammlungselementtyp
--K`` V
Karte und Schlüsselwerte
--X
Ausnahme
--R
Rückgabewert
Literarische Namensregeln
--Klassenname, Aufzählungsname
- Einzelne Nomenklatur, Nomenklaturphrase
--Utility-Klassen, die nicht instanziiert werden können
- Mehrere Nomenklaturen
--Schnittstelle
--Adjektive, die mit able, ible enden
- Anmerkungstyp
- Alle Teilwörter werden verwendet
- Methode, die etwas verarbeitet
--Verbs, Verbalphrasen
- Die Methode, die einen booleschen Wert zurückgibt, beginnt mit is, has.
- Methoden, die keine booleschen Werte sind, sind Nomenklatur, Nomenklatur und Verbalphrasen, die mit get beginnen
- Eine Methode, die den Typ eines Objekts konvertiert und einen anderen Typ zurückgibt
--Called toType, toString, toArray
- Eine Methode, die eine Ansicht mit einem anderen Typ als dem Typ des Empfängerobjekts zurückgibt
- Als asType, asList bezeichnet
- Eine Methode, die Basisdaten mit demselben Wert wie das Objekt zurückgibt, für das die Methode aufgerufen wurde
- Typwert genannt. intValue
--Gemeinsamer Name mit statischer Factory-Methode
- from、of、valueOf、instance、getInstance、newInstance、getType、newType