JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 93. So funktioniert die String-Klasse in ...

Kaffeepause Nr. 93. So funktioniert die String-Klasse in Java. Erfahren Sie, wie Sie eine Webschnittstelle in Java implementieren

Veröffentlicht in der Gruppe Random-DE

So funktioniert die String-Klasse in Java

Quelle: DZone Kürzlich bin ich in einem Forum auf folgende Frage gestoßen: „Wie viele String- Objekte werden hier erstellt ?“ Ein oder zwei?".
String langName = new String("Java");
Ich war neugierig, wie andere darauf geantwortet haben, da ich wusste, dass es sich um eine komplexe Frage handelt, insbesondere wenn man nicht sehr gut über die Funktionsweise der String- Klasse in Java Bescheid weiß. Und so tauchte ich in den Kommentarbereich ein. Kaffeepause Nr. 93.  So funktioniert die String-Klasse in Java.  Erfahren Sie, wie Sie eine Weboberfläche in Java implementieren - 1Zu meiner Überraschung gab es unter den Kommentatoren Leute, die „Eins“ als richtige Antwort wählten, aber viel mehr Leute antworteten „Zwei“. Für eine Sekunde begann ich sogar an meinem Wissen über Strings zu zweifeln . Die richtige Antwort ist, dass alles von den Umständen abhängt. Die Frage ist nicht klar genug und lässt Raum für Debatten. Ich würde es so umformulieren:

1. Wie viele Java-String-Objekte werden im Speicher erstellt, wenn diese Anweisung ausgeführt wird?

Es gibt nur eine Antwort.

Wie viele Java-String-Objekte verbleiben nach der Ausführung dieser Anweisung im Speicher?

Die Antwort ist zwei. Hoffentlich ist die Unsicherheit verschwunden, nachdem ich den Speicherauszug des Programms mit einer Anweisung wie dem obigen Beispiel überprüft habe. Kaffeepause Nr. 93.  So funktioniert die String-Klasse in Java.  Erfahren Sie, wie Sie eine Webschnittstelle in Java implementieren – 2Der Programmspeicherauszug im obigen Bild zeigt die Existenz von zwei String- Objekten mit demselben Inhalt. Dies beweist, dass der Aufruf des String- Klassenkonstruktors und die Übergabe eines String-Literals als Argument dazu führt, dass zwei Objekte zum Speicher-Heap hinzugefügt werden: eines im regulären (Nicht-Pool-)Speicher und das andere im String Constant Pool (SCP), an Bereich im Speicher, der auch Teil des Heaps ist. Nach dem Hinzufügen beginnen die Schwierigkeiten. Der Aufruf des Konstruktors führt immer dazu, dass ein neues Objekt in einem Nicht-Pool-Bereich platziert wird. Aber auch das Konstruktorargument, bei dem es sich um ein String-Literal handelt, ist ein Objekt und wird beim Laden der Klasse in SCP erstellt und gespeichert, sofern der String-Pool keine Strings mit demselben Inhalt enthält. In der Java-Sprachspezifikation heißt es, dass „String-Literale – oder allgemeiner Strings, die die Werte konstanter Ausdrücke sind (§15.28) – „interniert“ werden, um eindeutige Instanzen mithilfe der String-Methode zu teilen. intern “. Da ein String in Java ein Literal ist und daher den Wert eines konstanten Ausdrucks darstellt, wird er gepoolt. Um dies noch deutlicher zu machen, schreiben wir den am Anfang des Artikels vorgestellten Code wie folgt um:
String java = "Java";
String langName = new String(java);
Kommen wir nun zurück zur Hauptfrage. Erstellt die folgende Anweisung ein oder zwei String -Objekte :
String langName = new String("Java");
Um diese Frage zu beantworten und jeden Verdacht auszuräumen, schauen wir uns den Bytecode der Hauptmethode an:
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
In Zeile 6 sehen Sie den LDC-Befehl (Load Constant). Es lädt ein Element aus dem String-Konstantenpool auf den Stapel. Dies bedeutet, dass zum Zeitpunkt des Aufrufs des Konstruktors das Java-Literal, das auch ein Objekt ist, bereits zum Pool hinzugefügt wurde. Dies geschah beim Laden einer Klasse. Wenn Sie also den String- Klassenkonstruktor mit einem String-Literal aufrufen, wird nur ein Objekt erstellt und an einem nicht gepoolten Speicherort abgelegt.

Erfahren Sie, wie Sie eine Webschnittstelle in Java implementieren

Quelle: Dev.to Die Welt von JavaScript bietet nützliche und unterhaltsame Web-Frameworks, daran besteht kein Zweifel. Für Java-Entwickler gibt es eine interessante Alternative – das Open-Source -Framework Vaadin . Damit können Sie ganz einfach eine grafische Benutzeroberfläche (GUI) für das Web implementieren, indem Sie nur die Programmiersprache Java und nichts anderes verwenden. Sie müssen keine einzige Zeile HTML oder JavaScript schreiben. Ein Bild sagt mehr als tausend Worte: Kaffeepause Nr. 93.  So funktioniert die String-Klasse in Java.  Erfahren Sie, wie Sie eine Webschnittstelle in Java - 3 implementieren

Wie funktioniert Vaadin?

Links im Screenshot sehen Sie eine Java-Klasse. Dieser Code läuft auf einem Server wie Apache Tomcat, Eclipse Jetty oder einem anderen Servlet-Container. Sie können die von der Plattform bereitgestellte API verwenden, um Komponenten der Benutzeroberfläche (UI) wie Textfelder, Kombinationsfelder, Datenraster, Datumsauswahl, Upload-Felder und viele andere zu erstellen. Sie können diese Komponenten kombinieren, um eine Ansicht (auch als Seite oder UI bezeichnet) zu erstellen, indem Sie Layouts verwenden, um Benutzeroberflächenkomponenten (UI) vertikal, horizontal oder auf andere Weise mithilfe von CSS anzuordnen. Im vorherigen Beispiel haben wir ein TextField und einen Button erstellt , indem wir sie zum VerticalLayout hinzugefügt haben . Sobald die Ansicht fertig ist, können Sie sie mithilfe der @Route- Annotation über eine URL öffnen . In diesem Beispiel haben wir es unter http://localhost:8080/hello mit @Route("hello") verfügbar gemacht . Die Vaadin-Anwendung ist eine Webanwendung in Java. Das Framework stellt eine Servlet-Implementierung ( VaadinServlet ) bereit, die HTTP-Anfragen und -Antworten für Sie verarbeitet. Dieses Servlet scannt Java-Klassen, die mit der @Route- Annotation markiert sind , um die richtige Ansicht im Browser anzuzeigen. Wenn eine Vaadin-Anwendung zum ersten Mal angefordert wird, antwortet Vaadin mit einer kompakten JavaScript-Datei, die als Client-Engine dient. Diese Engine kümmert sich darum, Ereignisse im Browser zu verarbeiten und sie als JSON-Nachrichten an den Server zu senden. Das VaadinServlet- Objekt verarbeitet Anfragen und gibt auf ähnliche Weise JSON-Antworten an die clientseitige Engine zurück. Die Engine verwendet diese Nachricht dann, um gegebenenfalls die Elemente auf der Seite zu aktualisieren, die aktualisiert werden müssen. Vaadin verwendet eine HTTP-Sitzung, um einen Komponentenbaum zu speichern, der den Status der Benutzeroberfläche enthält. Dinge wie Komponenten bilden die Darstellung und ihre Zustände (aktiviert/deaktiviert, Beschriftung, Wert usw.). Dies alles bietet ein erwähnenswertes Maß an Sicherheit. Da sich die Logik der Benutzeroberfläche auf dem Server befindet, ist sie für Angreifer nicht zugänglich. Die Prüfungen werden auf dem Server durchgeführt. Wenn beispielsweise eine Schaltfläche mithilfe von setEnabled(false) deaktiviert wird, handelt es sich nicht nur um eine kosmetische Funktion im Browser – der Server führt keine Logik in Klick-Listenern aus, die der deaktivierten Schaltfläche hinzugefügt wurden, wodurch Angreifer daran gehindert werden, Entwicklertools im Browser auszunutzen um den aktivierten Status zu ändern oder VaadinServlet aufzurufen , um einen Mausklick (Klickereignis) zu simulieren.

Ist die Nutzung von Vaadin kostenlos?

Ja. Vaadin ist ein Open-Source-Framework, das unter der Apache-Lizenz 2.0 veröffentlicht wird. Sie müssen nichts kaufen, um damit vollwertige Webanwendungen zu erstellen. Es gibt kommerzielle Komponenten, die die Leistung verbessern, aber sie sind nicht erforderlich. Es gibt beispielsweise einen visuellen Designer und eine CRUD-Komponente, mit denen Sie Ansichten noch schneller erstellen können. Sie können diese Komponenten vor dem Abonnieren kostenlos testen.

Ist Vaadin ein Ersatz für JSP und JSF?

Ja. Es kann als Ersatz für JSP, JSF und sogar JavaScript-Frameworks wie Angular verwendet werden. Viele Vaadin-Kunden sind erfolgreich von diesen Technologien zu Vaadin migriert.

Unterstützt Vaadin Spring und Jakarta EE?

Ja. Vaadin verfügt über eine offizielle Integration mit Spring und Jakarta EE (ehemals Java EE). Sie können Vaadin als Abhängigkeit hinzufügen, wenn Sie mit Spring Initializr ein neues Spring Boot-Projekt erstellen. Für Jakarta EE können Sie ein einfaches Hello, World-Beispiel herunterladen, das Jakarta EE verwendet. Zum Zeitpunkt des Schreibens dieses Artikels wird nur Jakarta EE Version 8 unterstützt.

Wer nutzt Vaadin?

Viele Fortune-500-Unternehmen sowie erfolgreiche Startups und über 200.000 Entwickler weltweit nutzen Vaadin. Schauen Sie sich die Kurzanleitung und andere Vaadin- Dokumentation an .
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION