Java Programmer Gold SE 8 Qualifikationsübersicht (für diejenigen, die mit Java vertraut sind)

Zweck des Artikels

Wir haben den Inhalt der Java Programmer Gold SE 8-Prüfung zusammengefasst. Es ist für die Nische: "Ich mache schon lange Java, aber ich weiß nicht viel über SE8."

Wie haben Sie diesen Artikel geschrieben?

Neulich habe ich den Java SE 8 Programmer II (1Z0-809) bestanden und den Oracle Certified Java Programmer Gold SE 8 erhalten. Ich habe es einmal in Java2 erworben, aber es unterschied sich deutlich von dem Wissensstand, den die Welt heute benötigt. Deshalb habe ich mich entschlossen, es erneut zu studieren, um mein Wissen zu aktualisieren. Das Wissen über SE8 wird auch in der Android-Entwicklung immer wichtiger. Es gibt eine Zusammenfassung des Testbereichs, wenn ich den Test mache, aber ich kann es nicht ertragen, ihn so zu speichern, wie er ist, wenn der Test beendet ist. Deshalb habe ich beschlossen, ihn in Form eines Artikels zu belassen. Ich würde mich sehr freuen, wenn es jemandem nützen würde.

Zusammenfassung der Punkte

Java-Grundlagen

Numerisches Literalpräfix

Das am Anfang der Nummer hinzugefügte Präfix bestimmt die Basisnummer.

Timing zum Initialisieren der endgültigen Variablen

Instanzvariablen mit dem endgültigen Modifikator müssen im Konstruktor initialisiert werden

Initialisierungsreihenfolge durch Initialisierer und Konstruktor

Die Verarbeitung im Zusammenhang mit der Objektinitialisierung wird in der folgenden Reihenfolge ausgeführt

  1. statischer Initialisierer Beim Laden einer Klasse
  2. Instanzinitialisierer Beim Erstellen einer Instanz vor dem Ausführen des Konstruktors Das Deklarieren einer Variablen führt sie nicht aus. Brauchen Instanziierung
  3. Konstruktor

Vererbung von Aufzählungswerten und Implementierung der Schnittstelle

Hinweise zu Aufzählungswerten

enum Direction {
    North(0), South(1);

    //Wenn Sie nicht final deklarieren, können Sie diesen Wert ändern
    int index;
    private Direction(int index) { this.index = index; }
}

//Beispiel für das Ändern des Indexfelds Richtung
Direction d = Direction.North;
System.out.println(d.index);    // 0
d.index = 10;
System.out.println(d.index);    // 10

hashCode () und equals ()

  1. Überprüfen Sie, ob die Hashwerte gleich sind
  2. Vergleichen Sie mit equals () nur für diejenigen mit demselben Hashwert

Schnittstellenmethode

interface Sample {
    // "public abstract"Kompiliert mit oder ohne
    public abstract void execute();
}

interface A { default void execute() { System.out.println("A"); } }
interface B { default void execute() { System.out.println("B"); } }
interface C extends A, B {
    //Wenn Sie dies nicht kommentieren, wird der Kompilierungsfehler behoben
    // default void execute() { System.out.println("C"); }
}

Bedingungen für die Außerkraftsetzung

  1. Methodenname
  2. Argumenttyp
  3. Reihenfolge der Argumente

Methode lokale Klasse

Lambda-Stil

  1. Der Argumentdatentyp kann weggelassen werden
  2. Wenn es ein Argument gibt, kann "()" weggelassen werden
  3. Wenn sich auf der rechten Seite ein Ausdruck befindet, kann "{}" weggelassen werden, unabhängig davon, ob auf der rechten Seite ein Rückgabewert vorhanden ist.
  4. Wenn sich auf der rechten Seite ein Ausdruck befindet und ein Rückgabewert zurückgegeben wird, kann die Rückgabe weggelassen werden.

Funktionsschnittstelle

Funktionsbezogen

Schnittstelle Methode Rückgabetyp
Function<T, R> apply(T t) R
UnaryOperator<T> apply(T t) T
BinaryOperator<T> apply(T t1, T t2) T
BiFunction<T, U, R> apply(T t, U u) R

Verbraucherbezogen

Schnittstelle Methode Rückgabetyp
Consumer<T> accept(T t) void
BiConsumer<T, U> accept(T t, U u) void

Prädikat verwandt

Schnittstelle Methode Rückgabetyp
Predicate<T> test(T t) boolean
BiPredicate<T, U> test(T t, U u) boolean

Supplier

Schnittstelle Methode Rückgabetyp
Supplier<T> get() T

Funktionsschnittstelle, die primitive Typen akzeptiert

Datentyp Function Consumer Predicate Supplier UnaryOperator BinaryOperator
int IntFunction<R> IntConsumer IntPredicate IntSupplier IntUnaryOperator IntBinaryOperator
long LongFunction<R> LongConsumer LongPredicate LongSupplier LongUnaryOperator LongBinaryOperator
double DoubleFunction<R> DoubleConsumer DoublePredicate DoubleSupplier DoubleUnaryOperator DoubleBinaryOperator
boolean - - - BooleanSupplier - -

Funktionsschnittstelle, die einen primitiven Typ zurückgibt

Name der Schnittstelle Methode Erläuterung
ToIntFunction<T> applyAsInt(T t) Gibt int von einem T-Typ-Wert zurück
ToIntBiFunction<T, U> applyAsInt(T t, U u) Gibt int von T- und U-Werten zurück
ToLongFunction<T> applyAsLong(T t) Gibt lange von einem T-Wert zurück
ToLongBiFunction<T, U> applyAsLong(T t, U u) Gibt lange von T- und U-Werten zurück
ToDoubleFunction<T> applyAsDouble(T t) Gibt ein Double von einem T-Wert zurück
ToDoubleBiFunction<T, U> applyAsDouble(T t, U u) Gibt das Doppelte von T- und U-Werten zurück

Methodenreferenz

Sammlung

Arrays#asList

Die Art der Sammlungsklasse und wie man sie unterscheidet

Die Art der Warteschlangenschnittstelle

Die Art der Deque-Schnittstelle

Generika

Generika und Typparameter

Platzhalter

Wo ein Kompilierungsfehler auftritt, wenn Platzhalter für Typparameter verwendet werden

Vergleichbar und Komparator

Vergleichbare -Schnittstelle

Komparator -Schnittstelle

Stream API

Generieren Sie einen Stream mit einer endlichen Anzahl von Elementen

Generieren Sie einen Stream mit unendlich vielen Elementen

Beide Methoden von java.util.stream.Stream

Stream-Beendigungsoperation

Stream # Rückgabewert reduzieren

Stream # redu ist eine Methode zum Aggregieren des Inhalts von Stream. In der Methode, die den Anfangswert im ersten Argument festlegt, ist der Rückgabewert nicht "Optional"

Abbruchoperation mit optionalem Rückgabewert

Erstellen Sie eine Instanz von Optional

Optional # ifPresent und Optional # isPresent

  1. isPresent ()… Bestimmt das Vorhandensein oder Fehlen eines Wertes
  2. ifPresent (Consumer)… Führen Sie Consumer aus, wenn ein Wert vorhanden ist

Es gibt mehrere Methoden zum Abrufen eines Werts aus Optional

Die Methode zum Abrufen des Werts von "Optional " lautet wie folgt. Wenn ein Wert vorhanden ist, wird dieser Wert erhalten, aber wenn er nicht vorhanden ist, ist das Verhalten anders.

Optionale Typen, die für einen bestimmten Datentyp spezifisch sind

Die Methode zum Abrufen der zugehörigen Klasse und des Werts von "Optional " lautet wie folgt

Typkonvertierung zwischen Stream und XXXStream

Stream # collect () -Methode und Collector-Klasse

Ausnahme

Error、Exception、 RuntimeException

Befehl, Ausnahmen zu fangen

Ausnahme Multi-Catch

Ausnahme neu werfen

//In SE7 und höher können Sie zwei Ausnahmen zusammen abfangen.
//IllegalAccessException und ArighmeticException anstelle von Exception werden von der Ausführung ausgelöst
private void execute(int number) throws IllegalAccessException, ArithmeticException {
    try {
        switch (number) {
            case 1:
                throw new IllegalAccessException();
            case 2:
                throw new ArithmeticException();
            default:
                System.out.println("No exception");
        }
    } catch (Exception e) {
        throw e;
    }
}

Überschreiben Sie die Methode, die die Ausnahme auslöst

Versuchen Sie ~ mit ~ Ressourcenanweisung

  1. try block
  2. Schließen Sie die Ressourcen in umgekehrter Reihenfolge der Deklaration (der folgende Code wird in der Reihenfolge von N bis 1 geschlossen).
  3. Block fangen
  4. endlich blockieren
// (1) ->Schließen Sie in der Reihenfolge von Ressource N bis 1() -> (2) -> (3)In der Reihenfolge ausführen
try (Resource1; Resource2; ...; ResourceN) {
    (1)
} catch (Exception e) {
    (2)

    // getSuppressed()Sie können ein Throwable-Array mit nehmen
    for (Throwable th : e.getSuppressed()) { ... }
} finally {
    (3)
}

Behauptungen und wie man sie benutzt

Date and Time API

Klassenliste

  1. LocalDate… Datum
  2. LocalTime… Zeit
  3. LocalDateTime… Datum + Uhrzeit
  4. OffsetTime… Zeit einschließlich der Differenz von UTC / GMT in“ + hh: mm ”
  5. OffsetDateTime… Datum und Uhrzeit einschließlich der Differenz zu UTC / GMT in„ + hh: mm “
  6. ZonedDateTime… Datum + Uhrzeit einschließlich der Differenz von UTC / GMT in der Zeitzonen-ID

Liste der Aufzählungstypen

  1. Monat: Repräsentiert den Monat JANUARY, FEBRUARY, MARCH, …, DECEMBER
  2. DayOfWeek: Repräsentiert den Tag SUNDAY, MONDAY, TUESDAY, …, SATURDAY

Instanziierung von LocalDate / LocalTime / LocalDateTime

  1. now()
  2. of(year, month, dayOfMonth, ...)
    Erstellen Sie eine Instanz mit einem Wert, der von jeder Klasse als Argument behandelt werden kann Sie können das Argument Monat auf den Aufzählungswert "Monat" anstelle einer Ganzzahl setzen. Nur "LocalDateTime" hat eine Überladung, die "LocalDate" und "LocalTime" als Argumente verwendet. Es kann Jahr, Monat, Tag, Stunde, Minute, Sekunde, Millisekunde als Argumente dauern
  3. parse(String)parse(String, DateTimeFormatter)
    Generieren Sie eine Instanz aus einer Zeichenfolge Wenn Sie "DateTimeFormatter" zusammen verwenden, können Sie eine beliebige Formatzeichenfolge verwenden.

Überladung von LocalDate # of und LocalTime # of

  1. Das zweite Argument ist int
  2. Das zweite Argument ist der Aufzählungswert "Monat"
  1. Nur Stunden
  2. Geben Sie zusätzlich zu Stunden und Minuten Sekunden an
  3. Geben Sie zusätzlich zu Stunden und Minuten Sekunden und Nanosekunden an

java.time.format.DateTimeFormatter

  1. ofPattern(String)
    Geben Sie das Formatmuster an
  2. ofLocalizedDate(FormatStyle)
    Geben Sie die Datumsformatmethode an
  3. ofLocalizedTime(FormatStyle)
    Geben Sie die Zeitformatmethode an
  4. ofLocalizedDateTime(FormatStyle)
    Geben Sie die Datums- und Uhrzeitformatmethode an
  5. ofLocalizedDateTime(FormatStyle, FormatStyle)
    Geben Sie die Datums- und Uhrzeitformatmethode für Datum und Uhrzeit separat an
  6. statischer vordefinierter Formatierer BASIC_ISO_DATE etc.

java.time.format.FormatStyle

Es gibt 4 Arten von FormatStyle

LocalDateTime dateTime = LocalDateTime.of(2020, 8, 14, 9, 54, 30);
ZonedDateTime zDateTime =
    ZonedDateTime.of(dateTime, ZoneId.systemDefault());

// FormatStyle.VOLL… “14. August 2020 9:54:30”
println(fmt1.format(zDateTime));

// FormatStyle.LONG … 『2020/08/14 9:54:30 JST』
println(fmt2.format(zDateTime));

// FormatStyle.MEDIUM … 『2020/08/14 9:54:30』
println(fmt3.format(dateTime));

// FormatStyle.SHORT … 『20/08/14 9:54』
println(fmt4.format(dateTime));

Zeichenfolge für das Datums- und Uhrzeit-API-Format

Addition / Subtraktion von Datum / Uhrzeit

Add ... plus (Zeitbetrag ToAdd) Subtrahieren… minus (zeitlicher Betrag zum Subtrahieren)

Sommerzeit

Zeitraum: Datum

//Addition von Jahren mit Periode
LocalDateTime dt = LocalDateTime.now();
Period p = Period.ofYears(1);

//Dies entspricht den folgenden zwei Zeilen (Methodenkette ist bedeutungslos)
// Period p1 = Period.ofDays(1);
// Period p = Period.ofYears(2);
Period p = Period.ofDays(1).ofYears(2);

Dauer: Stunde, Minute und Sekunde

java.time.Instant

Input-Output

Lesen mit java.io.Reader

Schreiben mit java.io.Writer

Lesen Sie die Positionssteuerung von java.io.Reader und java.io.InputStream

//Der Inhalt der Datei"01234567"
//Das Ausführungsergebnis ist"025676"
try (BufferedReader br =
        new BufferedReader(new FileReader("sample.txt"))) {
    for (int i = 0; i < 3; i++) {
        br.skip(i); //Überspringe i Bytes
        System.out.print((char)br.read());
    }
    br.mark(3); //gegenwärtiger Ort("6"INDEX mit=5 Plätze)Kennzeichen
    System.out.print(br.readLine());
    br.reset(); //Markierte Position(INDEX=5 Plätze)Zurück zu
    System.out.println((char)br.read());
} catch (IOException e) {
    e.printStackTrace();
}

java.io.PrintWriter

java.io.Console

Vorsichtsmaßnahmen bezüglich der Serialisierung

  1. statische Variable
  2. Transient deklarierte Mitgliedsvariablen
  1. Es ist selbst "serialisierbar", aber die Oberklasse ist nicht "serialisierbar"
  2. Superklasse hat einen Konstruktor ohne Argumente
  3. Der Unterklassenkonstruktor ruft den übergeordneten Konstruktor nicht explizit auf

NIO2

java.nio.file.Path (Funktion)

java.nio.file.Path (Methode)

String sp1 = "/tmp/work1/sample.txt";
String sp2 = "/tmp/work2/dummy.txt";
Path p1 = Paths.get(sp1);
Path p2 = FileSystems.getDefault().getPath(sp2);
println(p1.getRoot());      // "/"
println(p1.subpath(0, 2));  // "tmp/work1"
println(p1.relativize(p2)); // "../../work2/dummy.txt"
println(p1.getName(0));     // "tmp"

Path rp = p1.resolve("../dat");
println(rp);                // "/tmp/work1/sample.txt/../dat"
println(rp.normalize());    // "/tmp/work1/dat"

//Für Windows
Path wp = Paths.get("C:¥¥temp¥¥work¥¥sample.txt");
println(wp.getRoot());      // "C:¥"

java.nio.file.FileSystem

Bietet eine Schnittstelle zum Dateisystem. Holen Sie sich mit der statischen Methode der Klasse "FileSystems"

java.nio.file.Files (Dateivorgang)

Das Folgende sind alle statischen Methoden

  1. Der Inhalt des Verzeichnisses wird nicht kopiert
  2. Wenn im Kopierziel eine Datei mit demselben Namen vorhanden ist, wird eine Ausnahme gemacht, wenn in CopyOption keine Überschreibspezifikation vorhanden ist.
  3. Das Standardverhalten ist, dass beim Kopieren einer Datei keine Attribute kopiert werden
  4. Wenn Sie einen symbolischen Link ohne Angabe von CopyOption kopieren, wird der durch den Link angegebene Stoff kopiert.
  5. Der dem Argument angegebene Pfad ist nicht der Ort zum Kopieren / Verschieben, sondern der Pfad nach dem Verschieben / Kopieren

java.nio.file.Files (Manipulation von Verzeichnissen)

Das Folgende sind alle statischen Methoden

java.nio.file.Files (Suchverzeichnis)

Das Folgende sind alle statischen Methoden

java.nio.file.attribute

Ein Paket mit Klassen, die die Attribute einer Datei darstellen (Erstellungszeit, Zugriffszeit, Eigentümer usw.). Enthält auch eine Attributansichtsschnittstelle, die eine Reihe von Attributinformationen anzeigt

Parallelverarbeitung

Vom Dienstprogramm für die Parallelverarbeitung bereitgestellte Funktionen

  1. Thread-Pool Thread-Erstellung und Wiederverwendung
  2. Parallele Sammlung Eine Sammlung, die den parallelen Zugriff von mehreren Threads ordnungsgemäß verarbeiten kann
  3. Atomvariablen Implementierte eine Reihe unteilbarer Operationen, um Wertinkonsistenzen aufgrund von parallelem Zugriff zu vermeiden (wie synchronisiert).
  4. Semapho zählen Sie können die Anzahl der Threads frei festlegen, die parallel auf eine begrenzte Anzahl von Ressourcen zugreifen können.

Parallele Sammlung

java.util.concurrent.ConcurrentMap-Schnittstelle

//Der Inhalt der Karte[1, "One"], [2, "Two.2"], [3, "Three"]
Map<Integer, String> map = new ConcurrentHashMap<>();
map.put(1, "One");
map.putIfAbsent(1, "One.2"); //Nicht hinzufügen(KEY=1 Element existiert bereits)
map.put(2, "Two");
map.replace(2, "Two.2");           //Ersatz
map.replace(2, "Two.22", "Two.3"); //Nicht ersetzen(Das zweite Argument unterscheidet sich vom vorhandenen Wert)
map.put(3, "Three");     //Löschen
map.remove(3, "Three2"); //Nicht löschen(Das zweite Argument unterscheidet sich vom vorhandenen Wert)

java.util.concurrent.CopyOnWriteArrayList-Klasse

java.util.concurrent.CyclicBarrier-Klasse

//Weil es 3 Fäden für 2 Barrieren gibt
// "wait wait wait finish finish"Und der Prozess stoppt
ExecutorService service = Executors.newCachedThreadPool();
CyclicBarrier barrier = new CyclicBarrier(2);
for (int i = 0; i < 3; i++) {
    service.execute(() -> {
        try {
            System.out.print("wait ");
            barrier.await();
            System.out.println("finish ");
        } catch (BarrierBrokenException | InterruptedException ignore) {
        }
    });
}
service.shutdown();

ExecutorService-Vererbungsbeziehung

Executors-Methoden und entsprechende ExecutorService-Spezifikationen

ExecutorService#execute

ExecutorService#submit

Runnable und Callable

java.util.concurrent.Future-Schnittstelle

Paralleler Stream

//Parallele Stream-Generierung
Arrays.asList(1, 2, 3).parallelStream().forEach(System.out::println);

//Generieren Sie einen parallelen Stream aus einem sequentiellen Stream
Stream.of("a", "b", "c").parallel().forEach(System.out::println);

//Generieren Sie einen sequentiellen Stream aus einem parallelen Stream
Arrays.asList("A", "B", "C").parallelStream().sequential().forEach(System.out::println);

Fork / Join-Framework

Atomvariablen

JDBC

Abfrage ausführen

  1. Holen Sie sich "Verbindung" mit "DriverManager # getConnection (URL, ID, Pass)"
  2. Holen Sie sich "Statement" mit "Connection # createStatement ()"
  3. Holen Sie sich "ResultSet" mit "Statement # executeQuery (sql)"
  4. Extrahieren Sie das Ergebnis der Abfrage aus ResultSet

Ordnungsgemäße Verwendung der Methoden in Statement

Erwerb und Eigenschaften von ResultSet

ResultSet-Bildlaufmethode

Aktualisierbares ResultSet

Lokalisierung und Formatierung

Holen Sie sich das Objekt java.util.Locale

  1. Locale#getDefault()
    Gebietsschema der Java-Ausführungsumgebung
  2. new Locale(String)
    Das Argument ist "Sprachcode"
  3. new Loacle(String, String)
    Das Argument ist "Sprachcode, Ländercode"
  4. new Loacle(String, String, String)
    Das Argument lautet "Sprachcode, Ländercode, Variante"
  5. Stellen Sie den entsprechenden Wert für "Locale.Builder" ein, der von new generiert wurde, und generieren Sie ihn mit "build ()"

java.util.Properties

java.util.ListResourceBundle

  1. Definieren Sie eine öffentliche Klasse, die ListResourceBundle erbt Überschreiben Sie public Object [] [] getContents () Der vollständig qualifizierte Name (Paketname + Klassenname) dieser Klasse ist der Basisname, und diese Klasse ist für das Standardgebietsschema. Beispiel: Der Klassenname lautet "MyResource".
  2. Definieren Sie eine Klasse für ein anderes Gebietsschema als 1, indem Sie "ListResourceBundle" erben Die Namensregel lautet ** "base name_language code_country code" ** Beispiel: Der Klassenname für das englische Gebietsschema lautet "MyResource_en_US".
  3. Holen Sie sich das ListResourceBundle-Objekt mit ResourceBundle # getBundle (Basisname [, Gebietsschema])
  4. Holen Sie sich den Wert mit "ResourceBundle # getXXXXX (Schlüsselzeichenfolge)"

java.util.PropertyResourceBundle

  1. Erstellen Sie eine Eigenschaftendatei für das Standardgebietsschema
  1. Erstellen Sie eine Datei für ein anderes Gebietsschema als 1
  1. Holen Sie sich das PropertyResourceBundle-Objekt mit ResourceBundle # getBundle (Basisname [, Gebietsschema])
  1. Verwenden Sie die folgende Methode, um den Wert abzurufen. Es gibt kein GetInt

Priorität der verwendeten Ressourcenpakete

  1. Sprachcode und Ländercode stimmen überein
  2. Sprachcode abgleichen
  3. Passen Sie das Standardgebietsschema an

Formatieren Sie Zahlen mit NumberFormat

Änderungsprotokoll

Recommended Posts

Java Programmer Gold SE 8 Qualifikationsübersicht (für diejenigen, die mit Java vertraut sind)
[Zertifizierter Java-Programmierer, Gold SE 11] Impressionen, gute und schlechte Punkte für diejenigen, die von nun an lernen
[Qualifikationstest] (Java SE8 Gold) Lernbericht & Zusammenfassung
Erhaltener Oracle Certified Java Programmer, Gold SE 8
Tagebuch für Java SE 8 Silber Qualifikation
Hinweise für diejenigen, die mit JMockit leben
[Qualifikationstest] Zusammenfassung der Java SE 8 Silver-Lernmethode
Java Se 8 Programmierer Ⅰ Memo
[Für diejenigen, die Portfolios erstellen] Mit Ransack erstellte Suchfunktion
Stackdriver-Protokollierungsprotokolle sind in GAE SE für Java 8 falsch ausgerichtet
So ändern Sie das Argument in der [Java] -Methode (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind)
Ich habe Java SE8 Gold genommen.
[PHP] Für diejenigen, die sich Sorgen um das Gewicht machen ~ Privater Sonderfall ~
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker