Was hat sich zwischen Effective Java 2nd Edition und 3rd Edition geändert?

Über diesen Artikel

Effektive Java 3rd Edition wurde veröffentlicht. Neue Sprachelemente von Java 7 bis Java 9 wurden hinzugefügt, und ich denke, dass es vorerst Lambda ist, aber ich war besorgt über andere Änderungen und Ergänzungen. Also habe ich die 2. und 3. Ausgabe nebeneinander verglichen und solche Stellen grob überprüft.

In diesem Artikel habe ich die Orte aufgelistet, von denen ich dachte, dass sie "charakteristisch sein könnten!". Nicht über neue Elemente, sondern über Änderungen innerhalb vorhandener Elemente. [^ 1] Vielleicht haben Sie nie Lust, diesen Artikel zu lesen, sondern eine Referenz für diejenigen, die die 2. Ausgabe gelesen haben, um die 3. Ausgabe neu zu lernen. Ich denke, es wird so verwendet. Ich denke, es gibt viele Missverständnisse und Auslassungen. Bitte genießen Sie es, nach Fehlern zu suchen.

[^ 1]: Ich werde einen separaten Artikel über neue Artikel schreiben.

Insgesamt haben sich die Änderungen im Geiste der einzelnen Elemente nicht wesentlich geändert, außer dass die Sicherheitsrisiken der Serialisierung stärker geworden sind. Darüber hinaus wurden Grammatik- und Standard-APIs für Java 7 und höher hinzugefügt, um das Schreiben zu verbessern, und das Dokumentformat wurde entsprechend geändert.

Unter den vorgestellten Tools hielt ich Java Microbenchmark Harness für nützlich. (Ich habe es nicht gut überprüft ...) http://openjdk.java.net/projects/code-tools/jmh/ Die Artikelliste lautet http://www.informit.com/store/effective-java-9780134685991 , Aus Beispielinhalt erhalten.

Chapter 2: Creating and Destroying Objects

Item 1: Consider static factory methods instead of constructors

Item 2: Consider a builder when faced with many constructor parameters

Item 3: Enforce the singleton property with a private constructor or an enum type

Item 4: Enforce noninstantiability with a private constructor

――Es gibt keine besonderen charakteristischen Änderungen.

Item 5: Prefer dependency injection to hardwiring resources

Neuer Gegenstand

Item 6: Avoid creating unnecessary objects

Item 7: Eliminate obsolete object references

――Es gibt keine besonderen charakteristischen Änderungen.

Item 8: Avoid finalizers and cleaners

Item 9: Prefer try-with-resources to try-finally

Neuer Gegenstand.

Chapter 3: Methods Common to All Objects

Item 10: Obey the general contract when overriding equals

--Googles Autovalue wird in die Implementierung von equals () Hashcode () eingeführt. "Die automatische Generierung von IDEs kann mit Klassenänderungen nicht Schritt halten. Es ist nicht schön. Es ist besser, als es von Hand zu machen." https://github.com/google/auto/tree/master/value

Item 11: Always override hashCode when you override equals

Item 12: Always override toString

Item 13: Override clone judiciously

Item 14: Consider implementing Comparable

Chapter 4: Classes and Interfaces

Item 15: Minimize the accessibility of classes and members

Item 16: In public classes, use accessor methods, not public fields

Es gibt keine besondere charakteristische Änderung.

Item 17: Minimize mutability

Item 18: Favor composition over inheritance

Es gibt keine besondere charakteristische Änderung.

Item 19: Design and document for inheritance or else prohibit it

Item 20: Prefer interfaces to abstract classes

Item 21: Design interfaces for posterity

Neuer Gegenstand

――Lassen Sie uns die Schnittstelle für die Zukunft entwerfen. --Verwenden Sie die Standardmethoden der Schnittstelle mit Vorsicht.

Item 22: Use interfaces only to define types

Item 23: Prefer class hierarchies to tagged classes

Der Gesamtinhalt ändert sich nicht.

Item 24: Favor static member classes over nonstatic

Item 25: Limit source files to a single top-level class

Neuer Gegenstand.

Chapter 5: Generics

Item 26: Don’t use raw types

Item 27: Eliminate unchecked warnings

Item 28: Prefer lists to arrays

Item 29: Favor generic types

Item 30: Favor generic methods

Item 31: Use bounded wildcards to increase API flexibility

Item 32: Combine generics and varargs judiciously

Neuer Gegenstand.

Item 33: Consider typesafe heterogeneous containers

Chapter 6: Enums and Annotations

Item 34: Use enums instead of int constants

Item 35: Use instance fields instead of ordinals

Item 36: Use EnumSet instead of bit fields

Item 37: Use EnumMap instead of ordinal indexing

Item 38: Emulate extensible enums with interfaces

Item 39: Prefer annotations to naming patterns

Item 40: Consistently use the Override annotation

Item 41: Use marker interfaces to define types

Chapter 7: Lambdas and Streams

Neues Kapitel! In diesem Artikel nicht behandelt.

Chapter 8: Methods

Item 49: Check parameters for validity

Item 50: Make defensive copies when needed

Item 51: Design method signatures carefully

Item 52: Use overloading judiciously

「inexact method reference」

Referenz: https://mjg123.github.io/2017/10/23/Java-Inexact-Method-References.html

Item 53: Use varargs judiciously

Item 54: Return empty collections or arrays, not nulls

――Die Entwicklung der Geschichte hat sich zu einer Struktur geändert, in der die Sammlung vor dem Array herauskommt.

Item 55: Return optionals judiciously

Neuer Gegenstand. Ich werde es in diesem Artikel weglassen.

Item 56: Write doc comments for all exposed API elements

Der Gesamtanspruch ändert sich nicht, es wurden jedoch verschiedene Ergänzungen vorgenommen.

(Ich kann dankbar sein, wie man das Dokument schreibt.)

Chapter 9: General Programming

Item 57: Minimize the scope of local variables

Der Gesamtinhalt ändert sich nicht.

Item 58: Prefer for-each loops to traditional for loops

Item 59: Know and use the libraries

Item 60: Avoid float and double if exact answers are required

Item 61: Prefer primitive types to boxed primitives

Der Gesamtzweck ändert sich nicht.

Item 62: Avoid strings where other types are more appropriate

Der Gesamtzweck ändert sich nicht.

Item 63: Beware the performance of string concatenation

Der Gesamtzweck ändert sich nicht.

Item 64: Refer to objects by their interfaces

Item 65: Prefer interfaces to reflection

――Der eine Absatz "In der Regel sollten normale Apps zur Laufzeit nicht durch Reflektion auf Objekte zugreifen" wurde gelöscht. (Weil die Grenze zwischen normal und ungewöhnlich verschwommen ist?)

Item 66: Use native methods judiciously

Item 67: Optimize judiciously

Item 68: Adhere to generally accepted naming conventions

Chapter 10: Exceptions

Item 69: Use exceptions only for exceptional conditions

Item 70: Use checked exceptions for recoverable conditions and runtime exceptions for programming errors

Item 71: Avoid unnecessary use of checked exceptions

Item 72: Favor the use of standard exceptions

Item 73: Throw exceptions appropriate to the abstraction

Item 74: Document all exceptions thrown by each method

Item 75: Include failure-capture information in detail messages

Item 76: Strive for failure atomicity

Item 77: Don’t ignore exceptions

Chapter 11: Concurrency

Item 78: Synchronize access to shared mutable data

--java.util.concurrent.atmic Paketbeschreibung wurde klein hinzugefügt.

Item 79: Avoid excessive synchronization

Item 80: Prefer executors, tasks, and streams to threads

Item 81: Prefer concurrency utilities to wait and notify

Item 82: Document thread safety

――Es gibt einige geringfügige Ergänzungen, aber der Gesamtzweck ändert sich nicht.

Item 83: Use lazy initialization judiciously

Item 84: Don’t depend on the thread scheduler

Der Gesamtzweck ändert sich nicht.

Chapter 12: Serialization

Item 85: Prefer alternatives to Java serialization

Neuer Gegenstand

――Der Inhalt dieses Kapitels als Ganzes empfiehlt keine Serialisierung. Es ist ein Absatz wie die Gliederungserklärung. ―― "Serialisierung ist gefährlich und sollte vermieden werden. Verwenden Sie für neue Systeme JSON- oder Protokollpuffer."

Item 86: Implement Serializable with great caution

Item 87: Consider using a custom serialized form

Item 88: Write readObject methods defensively

Item 89: For instance control, prefer enum types to readResolve

Item 90: Consider serialization proxies instead of serialized instances

Der Gesamtzweck ändert sich nicht.

Am Ende

Die Veröffentlichungstermine jeder Ausgabe sind wie folgt.

Versionsnummer Veröffentlichungsdatum Referenzlink
1. Auflage 2001-06-15 http://amzn.asia/j2dqKSw
2. Auflage 2008-05-08 http://amzn.asia/6lVZFi4
3. Auflage 2018-01-06 http://amzn.asia/hI5g2sy

Die nächste effektive Java 4th Edition wird voraussichtlich 2027 sein, also ungefähr 9 Jahre später. Die Java-Version sollte zu diesem Zeitpunkt 30 sein, entsprechend dem aktuellen Release-Modell [^ 2], und ich kann mir nicht vorstellen, welche neuen Funktionen es hat. Wir sehen uns alle in 9 Jahren wieder. (Ist es nicht mehr geschrieben?)

Recommended Posts

Was hat sich zwischen Effective Java 2nd Edition und 3rd Edition geändert?
Effektive Java 3rd Edition Kapitel 6 Aufzählung und Anmerkungen
Effektive Java 3rd Edition Kapitel 7 Lambda und Stream
Effektive Java 3rd Edition Kapitel 2 Objekterstellung und Verschwindenlassen
Effektive Java 3rd Edition Kapitel 5 Generika
Effektive Java 3rd Edition Kapitel 8 Methoden
Effektives Java 3rd Edition Kapitel 9 Programm Allgemein
effektive Java 3. Zusammenfassung
Effektive Java 3rd Edition Abschnitt 85 Auswählen einer Alternative zur Java-Serialisierung
Aktualisierungen von Effective Java Third Edition 2nd Edition Persönliche Notizen
Effektive Java 3rd Edition Kapitel 3 Allen Objekten gemeinsame Methoden
Ich werde einen Auszug dessen schreiben, was ich beim Lesen von Effective Java 3rd Edition interessant fand
[Java] Unterschied zwischen == und gleich
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
Unterschiede zwischen "Anfänger" Java und Kotlin
[Java] Unterschied zwischen Hashmap und HashTable
[JAVA] Unterschied zwischen Abstract und Interface
[Java] Beziehung zwischen H2DB und JDBC
[Java] Unterschied zwischen Array und ArrayList
Unterschiede zwischen Java und .NET Framework
[Java] Unterschied zwischen Closeable und AutoCloseable
[Java] Unterschied zwischen StringBuffer und StringBuilder
[Java] Unterschied zwischen Länge, Länge () und Größe ()
[Java] Was sind Überschreibungen und Überladungen?
Konvertierung zwischen Kotlin nullable und Java Optional
Beziehung zwischen Kotlin- und Java-Zugriffsmodifikatoren
Unterschied zwischen final und Immutable in Java
[Für Anfänger] Unterschied zwischen Java und Kotlin
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Was ist Java und Entwicklungsumgebung (MAC)
[Hinweis] Zusammenarbeit zwischen Java und DB (Basic)
[Java] Unterschied zwischen Intstream-Bereich und rangeClosed
Unterschied zwischen int und Integer in Java
HashMap # putAll () verhält sich zwischen Java 7 und Java 8 unterschiedlich