Résumé de la qualification Java Programmer Gold SE 8 (pour ceux qui connaissent Java)

Objet de l'article

Nous avons résumé le contenu de l'examen Java Programmer Gold SE 8. C'est pour le créneau, "Je fais Java depuis longtemps, mais je ne sais pas grand-chose sur SE8."

Comment avez-vous écrit cet article?

L'autre jour, j'ai pris et passé le Java SE 8 Programmer II (1Z0-809) et j'ai obtenu le Oracle Certified Java Programmer, Gold SE 8. Je l'ai acquis une fois lorsque j'étais en Java2, mais il était clairement différent du niveau de connaissances requis par le monde aujourd'hui, alors j'ai décidé de réétudier dans le sens de mettre à jour mes propres connaissances. La connaissance de SE8 devient essentielle même dans le développement Android. Il y a quelque chose qui résume la portée de l'examen pour moi lorsque je passe l'examen, mais je ne supporte pas de le garder tel quel une fois l'examen terminé, alors j'ai décidé de le laisser sous forme d'article. Je serais très heureux si cela pouvait profiter à n'importe qui.

Résumé des points

Les bases de Java

Préfixe littéral numérique

Le préfixe ajouté au début du numéro détermine le numéro de base.

Délai d'initialisation de la variable finale

Les variables d'instance avec le modificateur final doivent être initialisées dans le constructeur

Ordre d'initialisation par initialiseur et constructeur

Le traitement lié à l'initialisation des objets est exécuté dans l'ordre suivant

  1. initialiseur statique Lors du chargement d'une classe
  2. Initialiseur d'instance Lors de la création d'une instance, avant d'exécuter le constructeur La déclaration d'une variable ne l'exécute pas. Besoin d'instanciation
  3. Constructeur

Héritage de valeur d'énumération et implémentation d'interface

Remarques sur les valeurs énumérées

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

    //Si vous ne déclarez pas final, vous pouvez modifier cette valeur
    int index;
    private Direction(int index) { this.index = index; }
}

//Exemple de modification du champ d'index de Direction
Direction d = Direction.North;
System.out.println(d.index);    // 0
d.index = 10;
System.out.println(d.index);    // 10

hashCode () et equals ()

  1. Vérifiez si les valeurs de hachage sont les mêmes
  2. Comparez avec ʻequals () ʻuniquement pour ceux avec la même valeur de hachage

Méthode d'interface

interface Sample {
    // "public abstract"Compile avec ou sans
    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 {
    //Ne pas commenter cela éliminera l'erreur de compilation
    // default void execute() { System.out.println("C"); }
}

Conditions pour que la dérogation soit maintenue

  1. Nom de la méthode
  2. Type d'argument
  3. Ordre des arguments

Classe locale de méthode

Style Lambda

  1. Le type de données d'argument peut être omis
  2. S'il y a un argument, "()" peut être omis
  3. S'il y a une expression sur le côté droit, "{}" peut être omis, qu'il y ait ou non une valeur de retour du côté droit.
  4. S'il y a une expression sur le côté droit et qu'une valeur de retour est renvoyée, return peut être omis.

Interface fonctionnelle

Relatif à la fonction

Interface Méthode Type de retour
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

Lié aux consommateurs

Interface Méthode Type de retour
Consumer<T> accept(T t) void
BiConsumer<T, U> accept(T t, U u) void

Lié au prédicat

Interface Méthode Type de retour
Predicate<T> test(T t) boolean
BiPredicate<T, U> test(T t, U u) boolean

Supplier

Interface Méthode Type de retour
Supplier<T> get() T

Interface fonctionnelle qui accepte les types primitifs

Type de données 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 - -

Interface fonctionnelle qui renvoie un type primitif

Nom de l'interface Méthode La description
ToIntFunction<T> applyAsInt(T t) Renvoie un entier à partir d'une valeur de type T
ToIntBiFunction<T, U> applyAsInt(T t, U u) Renvoie un entier à partir des valeurs T et U
ToLongFunction<T> applyAsLong(T t) Renvoie long à partir d'une valeur de type T
ToLongBiFunction<T, U> applyAsLong(T t, U u) Renvoie long à partir des valeurs T et U
ToDoubleFunction<T> applyAsDouble(T t) Renvoie un double à partir d'une valeur de type T
ToDoubleBiFunction<T, U> applyAsDouble(T t, U u) Renvoie le double des valeurs T et U

Référence de la méthode

collection

Arrays#asList

La nature de la classe de collection et comment la distinguer

La nature de l'interface de file d'attente

La nature de l'interface Deque

Génériques

Génériques et paramètres de type

Caractère générique

Où une erreur de compilation se produit lors de l'utilisation de caractères génériques pour les paramètres de type

Comparable et comparateur

Interface comparable

Interface du comparateur

Stream API

Générer un flux avec un nombre fini d'éléments

Générer un flux avec un nombre infini d'éléments

Les deux méthodes de java.util.stream.Stream

Opération de terminaison de flux

Stream # réduire la valeur de retour

Stream # reduction est une méthode pour agréger le contenu de Stream. Dans la méthode qui définit la valeur initiale dans le premier argument, la valeur de retour n'est pas ʻOptional`

Opération de terminaison avec une valeur de retour facultative

Créer une instance de facultatif

Facultatif # ifPresent et Facultatif # isPresent

  1. ʻisPresent () `… Détermine la présence ou l'absence d'une valeur
  2. ʻifPresent (Consumer) … Exécutez Consumer` s'il y a une valeur

Il existe plusieurs méthodes pour récupérer une valeur à partir de Facultatif

«La méthode pour obtenir la valeur de Option » est la suivante. Si une valeur existe, cette valeur est obtenue, mais si elle n'existe pas, le comportement est différent.

Types facultatifs spécifiques à un type de données particulier

«La méthode pour récupérer la classe et la valeur de Optional » est la suivante

Conversion de type entre Stream et XXXStream

Méthode Stream # collect () et classe Collector

exception

Error、Exception、 RuntimeException

Ordre pour attraper les exceptions

Exception multi-capture

Relance d'exception

//Dans SE7 et versions ultérieures, vous pouvez intercepter deux exceptions ensemble.
//IllegalAccessException et ArighmeticException au lieu de Exception sont levés depuis execute
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;
    }
}

Remplacez la méthode qui lève l'exception

essayez ~ avec ~ instruction de ressources

  1. Bloc try
  2. Fermez les ressources dans l'ordre inverse de la déclaration (le code ci-dessous ferme dans l'ordre de N à 1)
  3. bloc de capture
  4. Bloc enfin
// (1) ->Fermer dans l'ordre de la ressource N à 1() -> (2) -> (3)Exécutez dans l'ordre de
try (Resource1; Resource2; ...; ResourceN) {
    (1)
} catch (Exception e) {
    (2)

    // getSuppressed()Vous pouvez prendre un tableau Throwable avec
    for (Throwable th : e.getSuppressed()) { ... }
} finally {
    (3)
}

Assertions et comment les utiliser

Date and Time API

Liste de classe

  1. «LocalDate»… Date
  2. LocalTime… Heure
  3. LocalDateTime… Date + heure
  4. ʻOffsetTime`… Heure avec la différence par rapport à UTC / GMT en “+ hh: mm”
  5. ʻOffsetDateTime`… Date et heure avec la différence par rapport à UTC / GMT en «+ hh: mm»
  6. ZonedDateTime… Date + heure, y compris la différence par rapport à UTC / GMT dans l'ID de fuseau horaire

Liste des types d'énumération

  1. Month: représente le mois JANUARY, FEBRUARY, MARCH, …, DECEMBER
  2. DayOfWeek: Représente le jour SUNDAY, MONDAY, TUESDAY, …, SATURDAY

Instanciation de LocalDate / LocalTime / LocalDateTime

  1. now()
  2. of(year, month, dayOfMonth, ...)
    Créer une instance avec une valeur qui peut être gérée par chaque classe comme argument Vous pouvez définir l'argument month sur la valeur énumérée «Month» au lieu d'un entier. Seul LocalDateTime a une surcharge qui prend LocalDate et LocalTime comme arguments. Cela peut prendre une année, un mois, un jour, une heure, une minute, une seconde, une milliseconde comme arguments
  3. parse(String)parse(String, DateTimeFormatter)
    Générer une instance à partir d'une chaîne Si vous utilisez DateTimeFormatter ensemble, vous pouvez utiliser n'importe quelle chaîne de caractères de format.

Surcharge de LocalDate # of et LocalTime # of

  1. Le deuxième argument est int
  2. Le deuxième argument est la valeur d'énumération "Month"
  1. Heures seulement
  2. Spécifiez les secondes en plus des heures et des minutes
  3. Spécifiez les secondes et nanosecondes en plus des heures et des minutes

java.time.format.DateTimeFormatter

  1. ofPattern(String)
    Spécifier le modèle de format
  2. ofLocalizedDate(FormatStyle)
    Spécifiez la méthode de format de date
  3. ofLocalizedTime(FormatStyle)
    Spécifiez la méthode de format de l'heure
  4. ofLocalizedDateTime(FormatStyle)
    Spécifiez la méthode de format de la date et de l'heure
  5. ofLocalizedDateTime(FormatStyle, FormatStyle)
    Spécifiez la méthode de format de la date et de l'heure séparément pour la date et l'heure
  6. formateur prédéfini statique BASIC_ISO_DATE etc.

java.time.format.FormatStyle

Il existe 4 types de FormatStyle

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

// FormatStyle.COMPLET… "14 août 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));

Chaîne de format de l'API de date et d'heure

Addition / soustraction de date / heure

Ajouter ... plus (Montant temporel à ajouter) Soustraire… moins (Montant temporel à soustraire)

Heure d'été

Période: Date

//Ajout d'années en utilisant la période
LocalDateTime dt = LocalDateTime.now();
Period p = Period.ofYears(1);

//Cela équivaut aux deux lignes suivantes (la chaîne de méthodes n'a pas de sens)
// Period p1 = Period.ofDays(1);
// Period p = Period.ofYears(2);
Period p = Period.ofDays(1).ofYears(2);

Durée: heure, minute et seconde

java.time.Instant

Entrée sortie

Lecture avec java.io.Reader

Ecrire avec java.io.Writer

Contrôle de la position de lecture de java.io.Reader et java.io.InputStream

//Le contenu du fichier"01234567"
//Le résultat de l'exécution est"025676"
try (BufferedReader br =
        new BufferedReader(new FileReader("sample.txt"))) {
    for (int i = 0; i < 3; i++) {
        br.skip(i); //Passer i octets
        System.out.print((char)br.read());
    }
    br.mark(3); //emplacement actuel("6"INDEX avec=5 lieux)marque
    System.out.print(br.readLine());
    br.reset(); //Position marquée(INDEX=5 lieux)Retour à
    System.out.println((char)br.read());
} catch (IOException e) {
    e.printStackTrace();
}

java.io.PrintWriter

java.io.Console

Précautions concernant la sérialisation

  1. variable statique
  2. Variables membres déclarées transitoires
  1. Il est «sérialisable» lui-même, mais la superclasse n'est pas «sérialisable»
  2. Superclass a un constructeur sans argument
  3. Le constructeur de sous-classe n'appelle pas explicitement le constructeur parent

NIO2

java.nio.file.Path (fonctionnalité)

java.nio.file.Path (méthode)

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"

//Pour les fenêtres
Path wp = Paths.get("C:¥¥temp¥¥work¥¥sample.txt");
println(wp.getRoot());      // "C:¥"

java.nio.file.FileSystem

Fournit une interface avec le système de fichiers. Obtenir avec la méthode statique de la classe FileSystems

java.nio.file.Files (opération de fichier)

Ce qui suit sont toutes des méthodes statiques

  1. Le contenu du répertoire n'est pas copié
  2. Lorsqu'un fichier portant le même nom existe dans la destination de copie, une exception est faite s'il n'y a pas de spécification d'écrasement dans CopyOption.
  3. Le comportement par défaut est que la copie d'un fichier ne copie pas les attributs
  4. Si vous copiez un lien symbolique sans spécifier CopyOption, la substance indiquée par le lien sera copiée.
  5. Le chemin donné à l'argument n'est pas l'endroit à copier / déplacer, mais le chemin après le déplacement / la copie

java.nio.file.Files (manipulation de répertoires)

Ce qui suit sont toutes des méthodes statiques

java.nio.file.Files (répertoire de recherche)

Ce qui suit sont toutes des méthodes statiques

java.nio.file.attribute

Un package contenant des classes qui représentent les attributs d'un fichier (heure de création, heure d'accès, propriétaire, etc.). Comprend également une interface de vue d'attribut qui affiche un ensemble d'informations d'attribut

Traitement parallèle

Fonctions fournies par l'utilitaire de traitement parallèle

  1. Pool de threads Création et réutilisation de threads
  2. Collecte parallèle Une collection qui peut gérer correctement l'accès parallèle à partir de plusieurs threads
  3. Variables atomiques Implémentation d'une série d'opérations indivisibles pour éviter les incohérences de valeur dues à l'accès parallèle (identique à synchronisé)
  4. Compter le semapho Vous pouvez définir librement le nombre de threads qui peuvent accéder à un nombre fini de ressources en parallèle.

Collecte parallèle

Interface java.util.concurrent.ConcurrentMap

//Le contenu de la carte[1, "One"], [2, "Two.2"], [3, "Three"]
Map<Integer, String> map = new ConcurrentHashMap<>();
map.put(1, "One");
map.putIfAbsent(1, "One.2"); //Ne pas ajouter(KEY=1 élément existe déjà)
map.put(2, "Two");
map.replace(2, "Two.2");           //Remplacement
map.replace(2, "Two.22", "Two.3"); //Ne remplacez pas(Le deuxième argument est différent de la valeur existante)
map.put(3, "Three");     //Effacer
map.remove(3, "Three2"); //Ne pas supprimer(Le deuxième argument est différent de la valeur existante)

Classe java.util.concurrent.CopyOnWriteArrayList

Classe java.util.concurrent.CyclicBarrier

//Puisque le nombre de barrières est de 2 et le nombre de fils est de 3.
// "wait wait wait finish finish"Et le processus s'arrête
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();

Relation d'héritage ExecutorService

Méthodes des exécuteurs et spécifications ExecutorService correspondantes

ExecutorService#execute

ExecutorService#submit

Exécutable et appelable

Interface java.util.concurrent.Future

Flux parallèle

//Génération de flux parallèle
Arrays.asList(1, 2, 3).parallelStream().forEach(System.out::println);

//Générer un flux parallèle à partir d'un flux séquentiel
Stream.of("a", "b", "c").parallel().forEach(System.out::println);

//Générer un flux séquentiel à partir d'un flux parallèle
Arrays.asList("A", "B", "C").parallelStream().sequential().forEach(System.out::println);

Cadre Fork / Join

Variables atomiques

JDBC

Exécuter l'ordre

  1. Obtenez Connection avec DriverManager # getConnection (url, id, pass)
  2. Obtenez Statement avec Connection # createStatement ()
  3. Obtenez ResultSet avec Statement # executeQuery (sql)
  4. Extrayez le résultat de la requête de «ResultSet»

Utilisation correcte des méthodes dans Statement

Acquisition et propriétés de ResultSet

Méthode de défilement ResultSet

ResultSet actualisable

Localisation et formatage

Obtient l'objet java.util.Locale

  1. Locale#getDefault()
    Paramètres régionaux de l'environnement d'exécution Java
  2. new Locale(String)
    L'argument est "code de langue"
  3. new Loacle(String, String)
    L'argument est "code de langue, code de pays"
  4. new Loacle(String, String, String)
    Les arguments sont "code de langue, code de pays, variante"
  5. Définissez la valeur appropriée pour Locale.Builder généré par new et générez-le avec build ()

java.util.Properties

java.util.ListResourceBundle

  1. Définissez une classe publique qui hérite de ListResourceBundle Remplacer objet public [] [] getContents () Le nom complet (nom du package + nom de la classe) de cette classe sera le nom de base, et cette classe sera pour les paramètres régionaux par défaut. Exemple: le nom de la classe est "MyResource"
  2. Définissez une classe pour une langue différente en héritant de ListResourceBundle La règle de dénomination est ** "nom de base_langue code_code pays" ** Exemple: le nom de classe pour les paramètres régionaux anglais est "MyResource_en_US"
  3. Récupérez l'objet ListResourceBundle avec ResourceBundle # getBundle (nom de base [, locale])
  4. Obtenez la valeur avec ResourceBundle # getXXXXX (key string)

java.util.PropertyResourceBundle

  1. Créez un fichier de propriétés pour les paramètres régionaux par défaut
  1. Créez un fichier pour une langue différente de 1
  1. Récupérez l'objet PropertyResourceBundle avec ResourceBundle # getBundle (nom de base [, locale])
  1. Utilisez la méthode suivante pour récupérer la valeur. il n'y a pas de getInt

Priorité des ensembles de ressources utilisés

  1. Le code de langue et le code de pays correspondent
  2. Faire correspondre le code de langue
  3. Faire correspondre les paramètres régionaux par défaut

Mettre en forme les nombres à l'aide de NumberFormat

Journal des modifications

Recommended Posts

Résumé de la qualification Java Programmer Gold SE 8 (pour ceux qui connaissent Java)
[Programmeur Java certifié, Gold SE 11] Impressions, bons points, mauvais points pour ceux qui étudient désormais
[Test de qualification] (Java SE8 Gold) Évaluation et résumé de l'apprentissage
Reçu un programmeur Java certifié Oracle, Gold SE 8
Agenda pour la qualification Java SE 8 Silver
Notes pour ceux qui vivent avec JMockit
[Test de qualification] Résumé de la méthode d'apprentissage Java SE 8 Silver
java se 8 programmeur Ⅰ mémo
[Pour ceux qui créent des portefeuilles] Fonction de recherche créée avec ransack
Les journaux Stackdriver Logging ne sont pas alignés dans GAE SE pour Java 8
Comment changer les arguments dans la méthode [Java] (pour ceux qui sont confus en passant par valeur, passant par référence, passant par référence)
J'ai pris Java SE8 Gold.
[PHP] Pour ceux qui s'inquiètent du poids ~ Cas particulier privé ~
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker