JavaRush /Java Blog /Random-IT /Pausa caffè #93. Come funziona la classe String in Java. ...

Pausa caffè #93. Come funziona la classe String in Java. Scopri come implementare un'interfaccia web in Java

Pubblicato nel gruppo Random-IT

Come funziona la classe String in Java

Fonte: DZone Recentemente mi sono imbattuto nella seguente domanda su un forum: “Quanti oggetti String vengono creati qui ? Uno o due?".
String langName = new String("Java");
Ero curioso di sapere come hanno risposto gli altri, sapendo che è una domanda complessa, soprattutto se non si è molto informati su come funziona la classe String in Java. E così, mi sono tuffato nella sezione commenti. Pausa caffè #93.  Come funziona la classe String in Java.  Scopri come implementare un'interfaccia web in Java - 1Con mia sorpresa, tra i commentatori c'erano persone che hanno scelto “Uno” come risposta corretta, ma molte più persone hanno risposto “Due”. Per un secondo ho persino iniziato a dubitare della mia conoscenza di Strings . La risposta corretta è che tutto dipende dalle circostanze. La questione non è abbastanza chiara e lascia spazio al dibattito. Lo riformulerei così:

1. Quanti oggetti Java String vengono creati in memoria quando viene eseguita questa istruzione?

C'è solo una risposta.

Quanti oggetti Java String rimarranno in memoria dopo aver eseguito questa istruzione?

La risposta è due. Spero che l'incertezza sia scomparsa una volta controllato il dump della memoria del programma con un'istruzione come nell'esempio sopra. Pausa caffè #93.  Come funziona la classe String in Java.  Scopri come implementare un'interfaccia web in Java - 2Il dump della memoria del programma nell'immagine sopra mostra l'esistenza di due oggetti String con lo stesso contenuto. Ciò dimostra che chiamando il costruttore della classe String e passando una stringa letterale come argomento si ottengono due oggetti aggiunti all'heap di memoria: uno nella memoria normale (non pool) e l'altro nello String Constant Pool (SCP), un area in memoria che fa anche parte dell'heap. Le difficoltà iniziano dopo l'aggiunta. La chiamata al costruttore comporta sempre il posizionamento di un nuovo oggetto in un'area non pool. Ma anche l'argomento del costruttore, che è una stringa letterale, è un oggetto e viene creato e archiviato in SCP durante il caricamento della classe, a condizione che il pool di stringhe non contenga stringhe con lo stesso contenuto. La specifica del linguaggio Java afferma che “le stringhe letterali – o, più in generale, le stringhe che sono i valori di espressioni costanti (§15.28) – vengono “internate” per condividere istanze univoche utilizzando il metodo String . intern ". Poiché una stringa in Java è letterale e quindi rappresenta il valore di un'espressione costante, viene raggruppata. Per renderlo ancora più evidente, riscriviamo il codice presentato all'inizio dell'articolo come segue:
String java = "Java";
String langName = new String(java);
Ora torniamo alla domanda principale. La seguente istruzione creerà uno o due oggetti String :
String langName = new String("Java");
Per rispondere a questa domanda e togliere ogni sospetto, diamo un'occhiata al bytecode del metodo 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
Alla riga 6 puoi vedere il comando LDC (Load Constant). Carica un elemento dal pool di costanti di stringa nello stack. Ciò significa che nel momento in cui viene chiamato il costruttore, il valore letterale Java, che è anche un oggetto, è già stato aggiunto al pool. Ciò è accaduto durante il caricamento di una classe. Pertanto, la chiamata al costruttore della classe String con una stringa letterale crea un solo oggetto e lo inserisce in una posizione di memoria non in pool.

Scopri come implementare un'interfaccia web in Java

Fonte: Dev.to Il mondo di JavaScript offre framework web utili e divertenti, su questo non ci sono dubbi. Esiste un'alternativa interessante per gli sviluppatori Java: il framework Vaadin open source . Con esso, puoi facilmente implementare un'interfaccia utente grafica (GUI) per il web utilizzando solo il linguaggio di programmazione Java e nient'altro. Non è necessario scrivere una singola riga di HTML o JavaScript. Un'immagine vale più di mille parole: Pausa caffè #93.  Come funziona la classe String in Java.  Scopri come implementare un'interfaccia web in Java - 3

Come funziona Vaadin?

A sinistra dello screenshot vedi una classe Java. Questo codice viene eseguito su un server come Apache Tomcat, Eclipse Jetty o qualsiasi altro contenitore servlet. Puoi utilizzare l'API fornita dalla piattaforma per creare componenti dell'interfaccia utente (UI) come campi di testo, caselle combinate, griglie di dati, selettori di date, campi di caricamento e molti altri. Puoi combinare questi componenti per creare una vista (nota anche come pagina o interfaccia utente), utilizzando i layout per disporre i componenti dell'interfaccia utente (UI) in verticale, in orizzontale o in qualsiasi altro modo utilizzando i CSS. Nell'esempio precedente, abbiamo creato un TextField e un Button aggiungendoli a VerticalLayout . Una volta che la vista è pronta, puoi aprirla tramite un URL utilizzando l' annotazione @Route . In questo esempio, lo abbiamo reso disponibile su http://localhost:8080/hello utilizzando @Route("hello") . L'applicazione Vaadin è un'applicazione web in Java. Il framework fornisce un'implementazione Servlet ( VaadinServlet ) che gestisce le richieste e le risposte HTTP per te. Questo servlet esegue la scansione delle classi Java contrassegnate con l' annotazione @Route per visualizzare la visualizzazione corretta nel browser. Quando viene richiesta per la prima volta un'applicazione Vaadin, Vaadin risponde con un file JavaScript leggero che funge da motore client. Questo motore si occupa di elaborare gli eventi nel browser e di inviarli al server come messaggi JSON. L' oggetto VaadinServlet elabora le richieste e allo stesso modo restituisce risposte JSON al motore lato client. Il motore utilizza quindi questo messaggio per aggiornare gli elementi della pagina che devono essere aggiornati, se presenti. Vaadin utilizza una sessione HTTP per memorizzare un albero dei componenti che contiene lo stato dell'interfaccia utente. Cose come i componenti formano la rappresentazione e i loro stati (abilitato/disabilitato, didascalia, valore, ecc.). Tutto ciò fornisce un livello di sicurezza che vale la pena menzionare. Poiché la logica dell'interfaccia utente si trova sul server, non è accessibile agli aggressori. I controlli vengono eseguiti sul server. Ad esempio, se un pulsante viene disabilitato utilizzando setEnabled(false) , non si tratta solo di una funzionalità estetica nel browser: il server non eseguirà alcuna logica nei listener di clic aggiunti al pulsante disabilitato, impedendo agli aggressori di sfruttare gli strumenti di sviluppo nel browser per modificare lo stato abilitato o chiamare VaadinServlet per simulare un clic del mouse (evento clic).

Vaadin è gratuito?

SÌ. Vaadin è un framework open source pubblicato sotto la licenza Apache 2.0. Non è necessario acquistare nulla per creare applicazioni web complete. Esistono componenti commerciali che migliorano le prestazioni, ma non sono necessari. Ad esempio, c'è un visual designer e un componente CRUD per aiutarti a creare visualizzazioni ancora più velocemente. Puoi provare questi componenti gratuitamente prima di iscriverti.

Vaadin è un sostituto di JSP e JSF?

SÌ. Può essere utilizzato in sostituzione di framework JSP, JSF e persino JavaScript come Angular. Molti clienti Vaadin sono migrati con successo da queste tecnologie a Vaadin.

Vaadin supporta Spring e Jakarta EE?

SÌ. Vaadin ha un'integrazione ufficiale con Spring e Jakarta EE (precedentemente Java EE). Puoi aggiungere Vaadin come dipendenza quando crei un nuovo progetto Spring Boot utilizzando Spring Inizializr. Per Jakarta EE, puoi scaricare un semplice esempio Hello, World che utilizza Jakarta EE. Al momento della stesura di questo articolo, è supportata solo la versione 8 di Jakarta EE.

Chi usa Vaadin?

Molte aziende Fortune 500 utilizzano Vaadin, così come startup di successo e oltre 200mila sviluppatori in tutto il mondo. Consulta la Guida rapida e altra documentazione Vaadin .
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION