国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison Java javaDidacticiel JBang, l'outil de script manquant de l'écosystème Java

JBang, l'outil de script manquant de l'écosystème Java

Jan 05, 2025 am 04:01 AM

L'écosystème Java dispose déjà de deux puissants outils de gestion de projet, à savoir Maven et Gradle, mais il lui manquait un outil de script simple et puissant.
C'est là qu'intervient JBang.
C'est un lanceur de fichiers Java, Kotlin et Groovy minimaliste mais puissant.
En fait, il vous permet d'exécuter du code aussi facilement que vous exécuteriez un script.
Il fournit également de nombreuses autres fonctionnalités telles que la gestion des dépendances, des modèles et un App Store.
Explorons JBang et ses fonctionnalités dans cet article.

Installation

La ligne de commande jbang peut être installée sur Windows, Linux et macOS en utilisant différentes méthodes bien documentées ici.
Nous pouvons vérifier l'installation en exécutant jbang --version.

En plus de cela, il est préférable d'installer l'extension IDE qui l'accompagne pour notre IDE préféré.
Les extensions IDE prises en charge sont répertoriées ici.

JBang ne dépend pas d'un JDK vers JRE mais un JDK est requis pour exécuter des scripts utilisant Java.
Vous pouvez en installer un avec JBang en exécutant jbang jdk install 23 qui installera le JDK 23.

Nous sommes maintenant prêts à écrire nos premiers scripts.

Premier scénario

Créons un script simple qui imprime ??Hello, World?!?? à la console.

> jbang init helloworld.java

Cela créera un fichier nommé helloworld.java qui pourra être exécuté avec jbang helloworld.java.

> jbang helloworld.java
Hello world

Lorsque vous ouvrez le fichier, vous verrez qu'il s'agit d'un simple fichier Java avec une méthode principale et une première ligne particulière.

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

Comme nous le verrons, le script JBang est composé de trois parties?: le shebang, les propriétés facultatives et le script lui-même.
Nous utiliserons certaines propriétés dans la deuxième partie dans les sections suivantes mais concentrons-nous sur la première partie.

Cette partie ///usr/bin/env jbang "$0" "$@" ; sortir $? indique au système d'utiliser JBang pour exécuter le script.
C'est ce qu'on appelle un shebang dans l'écosystème Unix et est utilisé pour spécifier l'interprète du script.
Nous pouvons illustrer cela sur un système Unix (macOS, Linux) en exécutant chmod x helloworld.java pour rendre le script exécutable puis en exécutant ./helloworld.java.

/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

Nous pouvons désormais développer notre script comme nous le ferions avec n'importe quel fichier Java.
Une fois prêt à être publié, nous pouvons l'exporter dans différents formats comme suit :

  • Un fichier jar?: jbang export portable helloworld.java. Si votre script utilise des dépendances, les commandes suivantes sont plus recommandées.
  • Un fatjar : qui contient toutes les dépendances : jbang export fatjar helloworld.java. Cette méthode nécessite tout de même d'installer un JDK/JRE sur la machine cible. Si vous ne le souhaitez pas, les commandes suivantes sont plus recommandées.
  • Un binaire jlink qui englobe un JDK?: jbang export jlink helloworld.java. Le binaire à exécuter est soit helloworld-jlink/bin/helloworld sous Unix, soit helloworld-jlink/bin/helloworld.bat sous Windows.
  • Une imgae native?: jbang export native helloworld.java. Cela nécessite une installation GraalVM.

Le script peut également être exporté en mavenrepo avec : jbang export mavenrepo helloworld.java

Gestion du JDK

Comme vu dans un chapitre précédent, JBang peut installer des JDK sur votre machine.
Vous pouvez lister les JDK installés avec jbang jdk list, lister ceux disponibles à installer avec jbang jdk list --available --show-details, en installer un nouveau avec jbang jdk install [version]. Jbang prend également en charge l'utilisation de SDKMAN pour gérer les JDK sur les systèmes pris en charge.

De plus, il est possible de spécifier une version du JDK dans un script.
Cela se fait en ajoutant la ligne suivante aux propriétés du script : //JAVA [version] si l'on veut une version exacte ou //JAVA [version] si l'on veut au moins une version spécifique.
Dans ce cas, JBang installera automatiquement la version requise du JDK et l'utilisera uniquement pour ce script sans modifier le JDK par défaut du système.

Par exemple, le script suivant utilise Java 25 et certaines fonctionnalités d'aper?u.

> jbang init helloworld.java

Scripts sans classe "Main"

Les scripts ayant tendance à être légers, il serait préférable de les écrire sans classe ni méthode principale.
Heureusement, Java dispose d'une fonctionnalité appelée classes déclarées implicites et méthodes principales d'instance (qui est toujours en aper?u dans Java 23).
Cette fonctionnalité permet d'écrire des programmes Java et des scripts JBang sans classe ni méthode principale statique.

Le script suivant sera compilé et exécuté sans aucun problème.

> jbang helloworld.java
Hello world

Ceci est rendu possible en ajoutant les propriétés suivantes au script.

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

La première ligne, //JAVA 23, indique à JBang d'utiliser Java 23 ou une version ultérieure.
Les deuxième et troisième lignes, //COMPILE_OPTIONS --enable-preview -source 23 et //RUNTIME_OPTIONS --enable-preview, activent respectivement les fonctionnalités d'aper?u pour la compilation et l'exécution.

Une fois la fonctionnalité devenue stable, nous pouvons supprimer les 3 lignes et le script fonctionnera toujours. Propre?!

Dépendances

JBang prend en charge l'ajout de dépendances aux scripts sous la forme de dépendances de style Gradle en ajoutant une ligne //DEPS atrefact-id:atrefact-name:version pour chaque dépendance.
Par exemple, pour utiliser la bibliothèque jfiglet, on peut ajouter la ligne suivante au script : //DEPS com.github.lalyos:jfiglet:0.0.8.

> jbang init helloworld.java

Catalogues

Les catalogues dans JBang permettent d'organiser et de partager efficacement des scripts et des modèles.
Cette fonctionnalité est particulièrement utile pour les équipes ou les communautés qui souhaitent partager une collection de scripts pour des taches ou des flux de travail courants.
Il est également utile pour les enseignants qui souhaitent distribuer des codes de démarrage ou afficher les résultats d'exercices sans fournir le code source.

Un catalogue est un fichier JSON nommé jbang-catalog.json qui contient deux groupes d'éléments?: les alias et les modèles.
Les alias permettent d'exécuter des scripts à partir d'un catalogue à l'aide d'une simple commande, tandis que les modèles fournissent un point de départ pour de nouveaux scripts.
Les catalogues peuvent être distants ou locaux et il est possible d'ajouter et d'utiliser autant de référentiels locaux ou distants que nécessaire.
Il est intéressant de souligner que JBang crée, lors de sa configuration, un catalogue local avec quelques alias et modèles prêts à l'emploi.

JBang recherche les catalogues locaux dans ces répertoires dans l'ordre suivant (source JBang docs)?:

  1. Répertoire actuel, ./jbang-catalog.json
  2. Dans ./.jbang/jbang-catalog.json
  3. Dans le répertoire parent, ../jbang-catalog.json
  4. Dans le répertoire .jbang du parent, ../.jbang/jbang-catalog.json
  5. Et répéter les étapes 3 et 4 de manière récursive vers le haut jusqu'à la racine du système de fichiers
  6. Comme dernière étape, il appara?tra dans $HOME/.jbang/jbang-catalog.json

JBang recherchera à distance les catalogues dans de nombreux référentiels open source comme GitHub, GitLab, Bitbucket et autres.
J'utiliserai GitHub comme exemple dans cet article.
Pour créer un catalogue distant, vous devez ajouter jbang-catalog.json au dossier racine de votre référentiel.
Le catalogue est ensuite référencé par account/repository_name.
Si votre référentiel s'appelle jbang-catalog, vous pouvez y faire référence par compte.
Ainsi, par exemple, si mon compte GitHub s'appelle yostane et que j'ai un référentiel nommé cours-java qui contient un catalogue dont un fichier nommé jbang-catalog.json, je peux faire référence à ce catalogue par yostane/cours-java. De plus, si j'ai un jbang-catalog.json dans un référentiel nommé jbang-catalog alors je peux y faire référence par yostane/jbang-catalog ou simplement yostane.

> jbang helloworld.java
Hello world

Les chapitres suivants montreront comment utiliser les alias et les modèles d'un catalogue.

Alias

Les alias dans JBang permettent d'exécuter des scripts à partir d'un catalogue.
La syntaxe complète est jbang alias@account/repository [args] et jbang alias [args] pour respectivement un alias distant et local.

Les alias peuvent être définis dans la section alias du fichier catalogue en utilisant le format suivant?:

> jbang init helloworld.java

Voici le catalogue que j'ai utilisé lors de ma session au DevoxxMA 2024.

> jbang helloworld.java
Hello world

Vous pouvez exécuter ces alias avec les commandes suivantes?:

  • jbang palcli@yostane/cours-java madame
  • jbang palqrest@yostane/cours-java
  • jbang hellojfx@yostane/cours-java

Le compte officiel JBang GitHub fournit un catalogue avec de nombreux alias et modèles.
Lan?ons-en quelques-uns?:

  • jbang httpd@jbangdev exécute un serveur Web local.
  • jbang gavsearch@jbangdev [arg] recherchez [arg] sur search.maven.org.

Modèles

Modèles, qui sont des scripts prédéfinis qui peuvent être utilisés comme point de départ pour de nouveaux scripts.
Ils sont définis dans la section modèles du fichier catalogue au format suivant?:

///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }

Lorsqu'un modèle est utilisé, JBang crée des copies de tous les fichiers dans la propriété file-refs.
Lorsqu'une référence de fichier contient {basename}, JBang le remplace par le nom du script en cours de création.
Lorsqu'une référence de fichier utilise l'extension .qute, JBang utilise le moteur de création de modèles Qute

Voici quelques exemples de modèles disponibles prêts à l'emploi?:

  • Un script CLI qui utilise picocli?: jbang init -t cli hellocli.java
  • Une API REST Quarkus à fichier unique?: jbang init -t qrest helloqrest.java

Nous pouvons également utiliser des modèles provenant d'Internet partagés par la communauté.
Par exemple, cette commande crée un fichier de test unitaire JUnit?: jbang init -t junit@jbangdev file_to_test.java.
à partir de la commande, nous pouvons localiser le jbang-catalog.json qui a défini le modèle dans le référentiel jbangdev/jbang-catalog.

/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

Magasin d'applications

Le JBang App Store est une application web qui permet de parcourir les alias des catalogues indexés.
Il offre un moyen pratique de découvrir et d'utiliser divers outils et utilitaires sans avoir besoin de processus de configuration ou d'installation complexes.
Par exemple, lorsqu'on recherche Yostane, on devrait pouvoir retrouver les différents alias que j'ai définis dans mes différents catalogues.
L'image suivante montre le résultat de la recherche.

JBang, the missing scripting tool of the Java ecosystem

Voici quelques scripts intéressants et amusants que j'ai trouvés en parcourant l'App Store?:

  • Cowsay. Voici quelques exemples d’exécution du script?:
    • jbang cowsay@ricksbrown/cowsay MOO !
    • jbang cowsay@ricksbrown/cowsay -f dragon "Je suis Veldora Tempest !"
  • Trouver une sous-cha?ne comme grep?: jbang grep@a-services "hello" .
  • Créez un PDF à partir d'images?: images2pdf@a-services. Les commandes suivantes créeront un fichier PDF à partir de deux images?:
///usr/bin/env jbang "<pre class="brush:php;toolbar:false">  {
    "catalogs": {},
    "aliases": {
      // aliases
    },
    "templates": {
      // templates
    }
  }
" "$@" ; exit $? //DEPS com.github.lalyos:jfiglet:0.0.9 import com.github.lalyos.jfiglet.FigletFont; public class DependenciesDemo { public static void main(String... args) throws Exception { System.out.println(FigletFont.convertOneLine("JBang is amazing")); } }

Lorsque vous publiez un catalogue, il appara?tra très probablement après la prochaine indexation du JBang AppStore.
Il s'agit d'une action GitHub planifiée définie ici.

Quelques exemples avec des frameworks notables

Avec JBang, nous pouvons créer des applications à fichier unique qui utilisent des frameworks et des bibliothèques populaires.
Quelques exemples incluent Quarkus, picolcli et JavaFX.
Explorons quelques exemples dans les sections suivantes.

JavaFX (openjfx)

JavaFX est un framework de bureau et d'interface utilisateur.
Son site officiel est openjfx.io et est également pris en charge par Gluon qui fournit des composants d'interface utilisateur supplémentaires et apporte la prise en charge des applications mobiles à JavaFX.
JBang prend en charge ce framework et peut être utilisé pour créer des applications JavaFX à fichier unique.

Voici quelques exemples d'applications JavaFX créées avec JBang?:

  • Fenêtre de base
  • Plus bel exemple de jbang https://gist.github.com/FDelporte/c69a02c57acc892b4c996a9779d4f830
  • Un modèle jbang init -t javafx@yostane hellojfx

Quarkus

Quarkus est un framework Java optimisé pour les environnements Kubernetes et sans serveur.
Il offre un temps de démarrage rapide et une faible consommation de mémoire, ce qui le rend idéal pour les applications cloud natives.

Grace à JBang, nous pouvons créer des applications Quarkus à fichier unique qui exploitent la puissance de ce framework.
L'exemple suivant montre une API rest qui teste si une cha?ne est un palindrome. Il dispose d'une analyse JSON, d'une journalisation et fournit une documentation OpenAPI et Swagger.

> jbang init helloworld.java

Nous pouvons remarquer une ligne //SOURCES PalindromeService.java dans le script.
Il indique à JBang de rechercher un fichier nommé PalindromeService.java dans le même répertoire que le script.
Cela signifie que JBang prend en charge les scripts multi-fichiers.

Vous pouvez exécuter le serveur avec jbang palqrest@yostane/cours-java et appeler le point final avec curl http://localhost:8080/palindrome?input=madam.

> jbang helloworld.java
Hello world

Autres langues

JBang prend en charge l'exécution du code Java, Kotlin, JShell et Groovy.
Il peut même exécuter du code Java à partir de fichiers markdown.
Voici quelques exemples d'utilisation de JBang avec différentes langues?:

  • Kotlin?: Vous pouvez initialiser un script Kotlin avec jbang init -t hello.kt filename.kt. Veuillez noter que ceci est différent des scripts officiels .main.kts Kotlin. En fait, les scripts Kotlin créés par JBang peuvent bénéficier des fonctionnalités du catalogue et de l'App Store. Voici un exemple de script Kotlin créé avec JBang.
> jbang init helloworld.java
  • Fait intéressant?: l'idée de JBang est venue de kscript qui est destiné à l'écosystème Kotlin.
  • Kotlin prend déjà en charge les scripts natifs (avec les scripts .main.kts) mais semble manquer des fonctionnalités de catalogue, de modèle et de l'App Store.
    • Groovy?: Initialisez un script Groovy avec jbang init -t hello.groovy filename.groovy. Voici un exemple de script Groovy créé avec JBang.
> jbang helloworld.java
Hello world
  • JShell?: JBang prend en charge les scripts JShell avec les extensions .jsh ou .jshell et les scripts en ligne utilisant jbang -c 'System.out.println("Inline Java ? yay!")'. Voici un exemple de script JShell créé avec JBang.
///usr/bin/env jbang "<pre class="brush:php;toolbar:false">> chmod +x helloworld.java
> ./helloworld.java
Hello world
" "$@" ; exit $? import static java.lang.System.*; public class helloworld { public static void main(String... args) { out.println("Hello world"); } }
  • Markdown avec des blocs de code Java et JShell?: Vous pouvez exécuter des blocs de code Java et JShell directement à partir d'un fichier markdown en utilisant jbang my_markdown.md.
/// usr/bin/env jbang "<pre class="brush:php;toolbar:false">///usr/bin/env jbang "<pre class="brush:php;toolbar:false">//JAVA 23+
//COMPILE_OPTIONS --enable-preview -source 23
//RUNTIME_OPTIONS --enable-preview
" "$@" ; exit $? //JAVA 23+ //COMPILE_OPTIONS --enable-preview -source 23 //RUNTIME_OPTIONS --enable-preview void main(String... args) { System.out.println("Hello World"); } " "$@" ; exit $? //JAVA 25 //COMPILE_OPTIONS --enable-preview -source 25 //RUNTIME_OPTIONS --enable-preview import java.util.concurrent.Callable; import java.util.concurrent.StructuredTaskScope; import static java.lang.System.*; void main(String... args) { out.println("Hello Java 25"); Callable task1 = () -> { out.println("Task 1" + Thread.currentThread()); return "Task 1"; }; Callable task2 = () -> { out.println("Task 2" + Thread.currentThread()); return 2; }; try ( var scope = new StructuredTaskScope()) { StructuredTaskScope.Subtask subtask1 = scope.fork(task1); StructuredTaskScope.Subtask subtask2 = scope.fork(task2); scope.join(); } catch (Exception e) { e.printStackTrace(); } }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Techniques de programmation asynchrones dans Java moderne Techniques de programmation asynchrones dans Java moderne Jul 07, 2025 am 02:24 AM

Java prend en charge la programmation asynchrone, y compris l'utilisation de la transition complète, des flux réactifs (tels que ProjectActor) et des threads virtuels dans Java19. 1.COMPLETABLEFUTURE Améliore la lisibilité et la maintenance du code à travers les appels de cha?ne et prend en charge l'orchestration des taches et la gestion des exceptions; 2. ProjectAacteur fournit des types de mono et de flux pour implémenter une programmation réactive, avec mécanisme de contre-pression et des opérateurs riches; 3. Les fils virtuels réduisent les co?ts de concurrence, conviennent aux taches à forte intensité d'E / S et sont plus légères et plus faciles à développer que les fils de plate-forme traditionnels. Chaque méthode a des scénarios applicables, et les outils appropriés doivent être sélectionnés en fonction de vos besoins et les modèles mixtes doivent être évités pour maintenir la simplicité

Meilleures pratiques pour utiliser des énumérations en java Meilleures pratiques pour utiliser des énumérations en java Jul 07, 2025 am 02:35 AM

En Java, les énumérations conviennent à représenter des ensembles constants fixes. Les meilleures pratiques incluent: 1. Utilisez ENUM pour représenter l'état fixe ou les options pour améliorer la sécurité et la lisibilité des types; 2. Ajouter des propriétés et des méthodes aux énumérations pour améliorer la flexibilité, telles que la définition des champs, des constructeurs, des méthodes d'assistance, etc.; 3. Utilisez Enuummap et Enumset pour améliorer les performances et la sécurité des types car ils sont plus efficaces en fonction des tableaux; 4. évitez l'abus des énumérations, tels que des valeurs dynamiques, des changements fréquents ou des scénarios logiques complexes, qui doivent être remplacés par d'autres méthodes. L'utilisation correcte de l'énumération peut améliorer la qualité du code et réduire les erreurs, mais vous devez faire attention à ses limites applicables.

Comprendre Java Nio et ses avantages Comprendre Java Nio et ses avantages Jul 08, 2025 am 02:55 AM

Javanio est un nouvel IOAPI introduit par Java 1.4. 1) s'adresse aux tampons et aux canaux, 2) contient des composants de tampon, de canal et de sélecteur, 3) prend en charge le mode non bloquant et 4) gère les connexions simultanées plus efficacement que l'OI traditionnel. Ses avantages se reflètent dans: 1) IO non bloquant les réductions de la surcharge du thread, 2) le tampon améliore l'efficacité de transmission des données, 3) le sélecteur réalise le multiplexage et 4) la cartographie de la mémoire accélère la lecture et l'écriture de la lecture de fichiers. Remarque Lorsque vous utilisez: 1) le fonctionnement FLIP / clair du tampon est facile à confondre, 2) les données incomplètes doivent être traitées manuellement sans blocage, 3) l'enregistrement du sélecteur doit être annulé à temps, 4) Nio ne convient pas à tous les scénarios.

Comment un hashmap fonctionne-t-il en interne en Java? Comment un hashmap fonctionne-t-il en interne en Java? Jul 15, 2025 am 03:10 AM

HashMap implémente le stockage de paires de valeurs clés via des tables de hachage en Java, et son noyau réside dans les emplacements de données de positionnement rapidement. 1. Utilisez d'abord la méthode HashCode () de la clé pour générer une valeur de hachage et la convertir en un index de tableau via les opérations de bit; 2. Différents objets peuvent générer la même valeur de hachage, entra?nant des conflits. à l'heure actuelle, le n?ud est monté sous la forme d'une liste liée. Après JDK8, la liste liée est trop longue (longueur par défaut 8) et elle sera convertie en arbre rouge et noir pour améliorer l'efficacité; 3. Lorsque vous utilisez une classe personnalisée comme clé, les méthodes equals () et hashcode () doivent être réécrites; 4. Hashmap élargit dynamiquement la capacité. Lorsque le nombre d'éléments dépasse la capacité et se multiplie par le facteur de charge (par défaut 0,75), se développez et remaniez; 5. Hashmap n'est pas en file et concu doit être utilisé dans multithread

Utilisation efficace des énumérations Java et des meilleures pratiques Utilisation efficace des énumérations Java et des meilleures pratiques Jul 07, 2025 am 02:43 AM

Les énumérations Java représentent non seulement des constantes, mais peuvent également encapsuler le comportement, transporter des données et implémenter des interfaces. 1. L'énumération est une classe utilisée pour définir des instances fixes, telles que la semaine et l'état, ce qui est plus s?r que les cha?nes ou les entiers; 2. Il peut transporter des données et des méthodes, telles que passer des valeurs à travers les constructeurs et fournir des méthodes d'accès; 3. Il peut utiliser Switch pour gérer différentes logiques, avec une structure claire; 4. Il peut implémenter des interfaces ou des méthodes abstraites pour faire des comportements différenciés de différentes valeurs d'énumération; 5. Faites attention à éviter les abus, la comparaison du code dur, la dépendance à l'égard des valeurs ordinales et la dénomination raisonnable et la sérialisation.

Qu'est-ce qu'un modèle de conception singleton à Java? Qu'est-ce qu'un modèle de conception singleton à Java? Jul 09, 2025 am 01:32 AM

Le modèle de conception Singleton en Java garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global via des constructeurs privés et des méthodes statiques, ce qui convient au contr?le de l'accès aux ressources partagées. Les méthodes de mise en ?uvre incluent: 1. Chargement paresseux, c'est-à-dire que l'instance n'est créée que lorsque la première demande est demandée, ce qui convient aux situations où la consommation de ressources est élevée et pas nécessairement requise; 2. Traitement à filetage, garantissant qu'une seule instance est créée dans un environnement multi-thread par des méthodes de synchronisation ou le verrouillage à double vérification et la réduction de l'impact des performances; 3. Le chargement affamé, qui initialise directement l'instance pendant le chargement des cours, convient aux objets ou scénarios légers qui peuvent être initialisés à l'avance; 4. La mise en ?uvre de l'énumération, en utilisant l'énumération Java pour soutenir naturellement la sérialisation, la sécurité des filetages et prévenir les attaques réfléchissantes, est une méthode concise et fiable recommandée. Différentes méthodes de mise en ?uvre peuvent être sélectionnées en fonction des besoins spécifiques

Exemple facultatif Java Exemple facultatif Java Jul 12, 2025 am 02:55 AM

Facultatif peut clairement exprimer les intentions et réduire le bruit du code pour les jugements nuls. 1. Facultatif. Par exemple, lors de la prise de valeurs des cartes, Orelse peut être utilisée pour fournir des valeurs par défaut, afin que la logique soit plus claire et concise; 2. Utilisez des cartes d'appels de cha?ne pour atteindre les valeurs imbriquées pour éviter en toute sécurité le NPE, et terminer automatiquement si un lien est nul et renvoie la valeur par défaut; 3. Le filtre peut être utilisé pour le filtrage conditionnel, et les opérations ultérieures ne continueront à être effectuées que si les conditions sont remplies, sinon elle sautera directement à Orelse, qui convient au jugement commercial léger; 4. Il n'est pas recommandé de surutiliser facultatif, tels que des types de base ou une logique simple, ce qui augmentera la complexité, et certains scénarios reviendront directement à NU.

Comment réparer Java.io.NotSerializableException? Comment réparer Java.io.NotSerializableException? Jul 12, 2025 am 03:07 AM

La solution de contournement principale pour la rencontre de Java.io.NotSerializableException est de s'assurer que toutes les classes qui doivent être sérialisées implémentent l'interface sérialisable et de vérifier le support de sérialisation des objets imbriqués. 1. Ajouter des ouvrages ImplementSerialisables à la classe principale; 2. Assurez-vous que les classes correspondantes de champs personnalisées de la classe implémentent également sérialisables; 3. Utilisez transitoire pour marquer les champs qui n'ont pas besoin d'être sérialisés; 4. Vérifiez les types non sérialisés dans les collections ou les objets imbriqués; 5. Vérifiez quelle classe n'implémente pas l'interface; 6. Considérez la conception de remplacement pour les classes qui ne peuvent pas être modifiées, telles que la sauvegarde des données clés ou l'utilisation de structures intermédiaires sérialisables; 7. Envisagez de modifier

See all articles