JavaRush /Blog Java /Random-FR /Pause café #93. Comment fonctionne la classe String en Ja...

Pause café #93. Comment fonctionne la classe String en Java. Apprenez à implémenter une interface Web en Java

Publié dans le groupe Random-FR

Comment fonctionne la classe String en Java

Source : DZone Je suis récemment tombé sur la question suivante sur un forum : « Combien d'objets String sont créés ici ? Un ou deux?".
String langName = new String("Java");
J'étais curieux de savoir comment les autres y répondaient, sachant que c'est une question complexe, surtout si l'on ne connaît pas très bien le fonctionnement de la classe String en Java. Et donc, j'ai plongé dans la section commentaires. Pause café #93.  Comment fonctionne la classe String en Java.  Apprendre à implémenter une interface Web en Java - 1À ma grande surprise, parmi les commentateurs, certaines personnes ont choisi « Un » comme bonne réponse, mais beaucoup plus de personnes ont répondu « Deux ». Pendant une seconde, j'ai même commencé à douter de mes connaissances sur Strings . La bonne réponse est que tout dépend des circonstances. La question n'est pas assez claire et laisse place au débat. Je reformulerais ainsi :

1. Combien d’objets Java String sont créés en mémoire lorsque cette instruction est exécutée ?

Il n'y a qu'une seule réponse.

Combien d’objets Java String resteront en mémoire après l’exécution de cette instruction ?

La réponse est deux. J'espère que l'incertitude aura disparu une fois que j'aurai vérifié l'image mémoire du programme avec une instruction comme dans l'exemple ci-dessus. Pause café #93.  Comment fonctionne la classe String en Java.  Apprendre à implémenter une interface Web en Java - 2L'image mémoire du programme dans l'image ci-dessus montre l'existence de deux objets String avec le même contenu. Cela prouve qu'appeler le constructeur de classe String et passer une chaîne littérale comme argument entraîne l'ajout de deux objets au tas de mémoire : l'un dans la mémoire normale (non pool) et l'autre dans le pool de constantes de chaîne (SCP), un zone en mémoire qui fait également partie du tas. Les difficultés commencent après l'ajout. L’appel du constructeur entraîne toujours le placement d’un nouvel objet dans une zone hors pool. Mais l'argument constructeur, qui est une chaîne littérale, est également un objet, et il est créé et stocké dans SCP lors du chargement de la classe, à condition que le pool de chaînes ne contienne pas de chaînes avec le même contenu. La spécification du langage Java indique que « les chaînes littérales — ou, plus généralement, les chaînes qui sont les valeurs d'expressions constantes (§15.28) — sont « internées » pour partager des instances uniques à l'aide de la méthode String .intern " . Puisqu’une chaîne en Java est littérale et représente donc la valeur d’une expression constante, elle est regroupée. Pour rendre cela encore plus évident, réécrivons le code présenté au début de l'article comme suit :
String java = "Java";
String langName = new String(java);
Revenons maintenant à la question principale. L'instruction suivante créera-t-elle un ou deux objets String :
String langName = new String("Java");
Pour répondre à cette question et lever tout soupçon, regardons le bytecode de la méthode main :
public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 11 L0
    NEW java/lang/String
    DUP
    LDC "Java"
    INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V
    ASTORE 1

   L1
    LINENUMBER 14 L1
   FRAME APPEND [java/lang/String]
    GOTO L1

   L2
    LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
    LOCALVARIABLE langName Ljava/lang/String; L1 L2 1
    MAXSTACK = 3
    MAXLOCALS = 2
Sur la ligne 6 vous pouvez voir la commande LDC (Load Constant). Il charge un élément du pool de constantes de chaîne sur la pile. Cela signifie qu'au moment où le constructeur est appelé, le littéral Java, qui est également un objet, a déjà été ajouté au pool. Cela s'est produit lors du chargement d'une classe. Ainsi, appeler le constructeur de classe String avec une chaîne littérale crée un seul objet et le place dans un emplacement mémoire non poolé.

Apprenez à implémenter une interface Web en Java

Source : Dev.to Le monde de JavaScript offre des frameworks web utiles et amusants, cela ne fait aucun doute. Il existe une alternative intéressante pour les développeurs Java : le framework open source Vaadin . Avec lui, vous pouvez facilement implémenter une interface utilisateur graphique (GUI) pour le Web en utilisant uniquement le langage de programmation Java et rien d'autre. Vous n'avez pas besoin d'écrire une seule ligne de HTML ou de JavaScript. Une image vaut mieux que mille mots: Pause café #93.  Comment fonctionne la classe String en Java.  Apprendre à implémenter une interface web en Java - 3

Comment fonctionne Vaadin ?

Sur la gauche de la capture d'écran, vous voyez une classe Java. Ce code s'exécute sur un serveur tel qu'Apache Tomcat, Eclipse Jetty ou tout autre conteneur de servlet. Vous pouvez utiliser l'API fournie par la plateforme pour créer des composants d'interface utilisateur (UI) tels que des champs de texte, des zones de liste déroulante, des grilles de données, des sélecteurs de date, des champs de téléchargement et bien d'autres. Vous pouvez combiner ces composants pour créer une vue (également appelée page ou interface utilisateur), en utilisant des mises en page pour organiser les composants de l'interface utilisateur (UI) verticalement, horizontalement ou de toute autre manière à l'aide de CSS. Dans l'exemple précédent, nous avons créé un TextField et un Button en les ajoutant au VerticalLayout . Une fois la vue prête, vous pouvez l'ouvrir via une URL en utilisant l' annotation @Route . Dans cet exemple, nous l'avons rendu disponible sur http://localhost:8080/hello en utilisant @Route("hello") . L'application Vaadin est une application web en Java. Le framework fournit une implémentation de servlet ( VaadinServlet ) qui gère les requêtes et les réponses HTTP pour vous. Cette servlet analyse les classes Java marquées de l' annotation @Route pour afficher la vue correcte dans le navigateur. Lorsqu'une application Vaadin est demandée pour la première fois, Vaadin répond avec un fichier JavaScript léger qui sert de moteur client. Ce moteur se charge de traiter les événements dans le navigateur et de les envoyer au serveur sous forme de messages JSON. L' objet VaadinServlet traite les requêtes et renvoie de la même manière les réponses JSON au moteur côté client. Le moteur utilise ensuite ce message pour mettre à jour les éléments de la page qui doivent être mis à jour, le cas échéant. Vaadin utilise une session HTTP pour stocker une arborescence de composants contenant l'état de l'interface utilisateur. Des éléments tels que les composants forment la représentation et leurs états (activé/désactivé, légende, valeur, etc.). Tout cela offre un niveau de sécurité qui mérite d’être mentionné. Puisque la logique de l’interface utilisateur se trouve sur le serveur, elle n’est pas accessible aux attaquants. Des contrôles sont effectués sur le serveur. Par exemple, si un bouton est désactivé à l'aide de setEnabled(false) , il ne s'agit pas simplement d'une fonctionnalité esthétique du navigateur : le serveur n'exécutera aucune logique dans les écouteurs de clic ajoutés au bouton désactivé, empêchant ainsi les attaquants d'exploiter les outils de développement du navigateur. pour changer l'état activé ou appeler VaadinServlet pour simuler un clic de souris (événement de clic).

L'utilisation de Vaadin est-elle gratuite ?

Oui. Vaadin est un framework open source publié sous la licence Apache 2.0. Vous n'avez rien besoin d'acheter pour créer des applications Web à part entière avec. Il existe des composants commerciaux qui améliorent les performances, mais ils ne sont pas obligatoires. Par exemple, il existe un concepteur visuel et un composant CRUD pour vous aider à créer des vues encore plus rapidement. Vous pouvez essayer ces composants gratuitement avant de vous abonner.

Vaadin remplace-t-il JSP et JSF ?

Oui. Il peut être utilisé en remplacement des frameworks JSP, JSF et même JavaScript comme Angular. De nombreux clients Vaadin ont migré avec succès de ces technologies vers Vaadin.

Vaadin prend-il en charge Spring et Jakarta EE ?

Oui. Vaadin a une intégration officielle avec Spring et Jakarta EE (anciennement Java EE). Vous pouvez ajouter Vaadin en tant que dépendance lors de la création d'un nouveau projet Spring Boot à l'aide de Spring Initializr. Pour Jakarta EE, vous pouvez télécharger un exemple simple Hello, World qui utilise Jakarta EE. Au moment de la rédaction de cet article, seule la version 8 de Jakarta EE est prise en charge.

Qui utilise Vaadin ?

De nombreuses entreprises Fortune 500 utilisent Vaadin, ainsi que des startups à succès et plus de 200 000 développeurs dans le monde. Consultez le guide de démarrage rapide et les autres documentations Vaadin .
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION