JavaRush /Blog Java /Random-ES /Pausa para el café #93. Cómo funciona la clase String en ...

Pausa para el café #93. Cómo funciona la clase String en Java. Aprenda a implementar una interfaz web en Java

Publicado en el grupo Random-ES

Cómo funciona la clase String en Java

Fuente: DZone Hace poco me encontré con la siguiente pregunta en un foro: “¿Cuántos objetos String se crean aquí ? ¿Uno o dos?".
String langName = new String("Java");
Tenía curiosidad por saber cómo respondieron los demás, sabiendo que es una pregunta compleja, especialmente si uno no tiene mucho conocimiento sobre cómo funciona la clase String en Java. Y entonces, me sumergí en la sección de comentarios. Pausa para el café #93.  Cómo funciona la clase String en Java.  Aprenda a implementar una interfaz web en Java - 1Para mi sorpresa, entre los comentaristas hubo personas que eligieron “Uno” como respuesta correcta, pero muchas más personas respondieron “Dos”. Por un segundo, incluso comencé a dudar de mis conocimientos sobre Strings . La respuesta correcta es que todo depende de las circunstancias. La cuestión no es lo suficientemente clara y deja lugar al debate. Lo reformularía así:

1. ¿Cuántos objetos Java String se crean en la memoria cuando se ejecuta esta declaración?

Solo hay una respuesta.

¿Cuántos objetos Java String quedarán en la memoria después de ejecutar esta declaración?

La respuesta es dos. Con suerte, la incertidumbre desapareció una vez que verifiqué el volcado de memoria del programa con una declaración como la del ejemplo anterior. Pausa para el café #93.  Cómo funciona la clase String en Java.  Aprenda a implementar una interfaz web en Java - 2El volcado de memoria del programa en la imagen de arriba muestra la existencia de dos objetos String con el mismo contenido. Esto demuestra que llamar al constructor de la clase String y pasar un literal de cadena como argumento da como resultado que se agreguen dos objetos al montón de memoria: uno en la memoria normal (que no es de grupo) y el otro en el grupo constante de cadenas (SCP). área en la memoria que también es parte del montón. Las dificultades comienzan después de sumar. Llamar al constructor siempre da como resultado que se coloque un nuevo objeto en un área que no es la piscina. Pero el argumento del constructor, que es un literal de cadena, también es un objeto, y se crea y almacena en SCP durante la carga de la clase, siempre que el grupo de cadenas no contenga cadenas con el mismo contenido. La Especificación del lenguaje Java establece que “las cadenas literales, o, más generalmente, las cadenas que son los valores de expresiones constantes (§15.28), se “internan” para compartir instancias únicas utilizando el método String .intern " . Dado que una cadena en Java es literal y, por tanto, representa el valor de una expresión constante, se agrupa. Para que esto sea aún más obvio, reescribamos el código presentado al principio del artículo de la siguiente manera:
String java = "Java";
String langName = new String(java);
Ahora volvamos a la pregunta principal. ¿ La siguiente declaración creará uno o dos objetos String ?
String langName = new String("Java");
Para responder a esta pregunta y eliminar cualquier sospecha, veamos el código de bytes del método principal:
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
En la línea 6 puede ver el comando LDC (Load Constant). Carga un elemento del grupo constante de cadenas en la pila. Esto significa que en el momento en que se llama al constructor, el literal de Java, que también es un objeto, ya se ha agregado al grupo. Esto sucedió mientras cargaba una clase. Por lo tanto, llamar al constructor de la clase String con un literal de cadena crea solo un objeto y lo coloca en una ubicación de memoria no agrupada.

Aprenda a implementar una interfaz web en Java

Fuente: Dev.to El mundo de JavaScript ofrece frameworks web útiles y divertidos, de eso no hay duda. Existe una alternativa interesante para los desarrolladores de Java: el marco de código abierto Vaadin . Con él, puede implementar fácilmente una interfaz gráfica de usuario (GUI) para la web utilizando únicamente el lenguaje de programación Java y nada más. No es necesario escribir una sola línea de HTML o JavaScript. Una imagen vale mas que mil palabras: Pausa para el café #93.  Cómo funciona la clase String en Java.  Aprenda a implementar una interfaz web en Java - 3

¿Cómo funciona Vaadin?

A la izquierda de la captura de pantalla ves una clase de Java. Este código se ejecuta en un servidor como Apache Tomcat, Eclipse Jetty o cualquier otro contenedor de servlets. Puede utilizar la API proporcionada por la plataforma para crear componentes de interfaz de usuario (UI) , como campos de texto, cuadros combinados, cuadrículas de datos, selectores de fechas, campos de carga y muchos otros. Puede combinar estos componentes para crear una vista (también conocida como página o UI), usando diseños para organizar los componentes de la interfaz de usuario (UI) verticalmente, horizontalmente o de cualquier otra forma usando CSS. En el ejemplo anterior, creamos un TextField y un Button agregándolos al VerticalLayout . Una vez que la vista esté lista, puede abrirla a través de una URL usando la anotación @Route . En este ejemplo, lo pusimos a disposición en http://localhost:8080/hello usando @Route("hello") . La aplicación Vaadin es una aplicación web en Java. El marco proporciona una implementación de servlet ( VaadinServlet ) que maneja las solicitudes y respuestas HTTP por usted. Este servlet escanea las clases Java marcadas con la anotación @Route para mostrar la vista correcta en el navegador. Cuando se solicita por primera vez una aplicación Vaadin, Vaadin responde con un archivo JavaScript liviano que sirve como motor del cliente. Este motor se encarga de procesar eventos en el navegador y enviarlos al servidor como mensajes JSON. El objeto VaadinServlet procesa solicitudes y de manera similar devuelve respuestas JSON al motor del lado del cliente. Luego, el motor utiliza este mensaje para actualizar los elementos de la página que deben actualizarse, si corresponde. Vaadin utiliza una sesión HTTP para almacenar un árbol de componentes que contiene el estado de la interfaz de usuario. Cosas como componentes forman la representación y sus estados (habilitado/deshabilitado, título, valor, etc.). Todo esto proporciona un nivel de seguridad que vale la pena mencionar. Dado que la lógica de la interfaz de usuario está en el servidor, los atacantes no pueden acceder a ella. Las comprobaciones se realizan en el servidor. Por ejemplo, si un botón se deshabilita usando setEnabled(false) , entonces esto no es solo una característica cosmética en el navegador: el servidor no ejecutará ninguna lógica en los oyentes de clics agregados al botón deshabilitado, evitando que los atacantes exploten las herramientas de desarrollo en el navegador. para cambiar el estado habilitado o llamar a VaadinServlet para simular un clic del mouse (evento de clic).

¿Vaadin es de uso gratuito?

Sí. Vaadin es un marco de código abierto publicado bajo la licencia Apache 2.0. No necesita comprar nada para crear aplicaciones web completas con él. Existen componentes comerciales que mejoran el rendimiento, pero no son obligatorios. Por ejemplo, hay un diseñador visual y un componente CRUD para ayudarle a crear vistas aún más rápido. Puede probar estos componentes de forma gratuita antes de suscribirse.

¿Vaadin es un reemplazo para JSP y JSF?

Sí. Se puede utilizar como reemplazo de JSP, JSF e incluso marcos de JavaScript como Angular. Muchos clientes de Vaadin han migrado con éxito de estas tecnologías a Vaadin.

¿Vaadin tiene soporte para Spring y Jakarta EE?

Sí. Vaadin tiene integración oficial con Spring y Jakarta EE (anteriormente Java EE). Puede agregar Vaadin como dependencia al crear un nuevo proyecto Spring Boot usando Spring Initializr. Para Jakarta EE, puede descargar un ejemplo sencillo de Hello, World que utiliza Jakarta EE. Al momento de escribir este artículo, solo se admite la versión 8 de Jakarta EE.

¿Quién usa Vaadin?

Muchas empresas de Fortune 500 utilizan Vaadin, así como también empresas emergentes exitosas y más de 200 mil desarrolladores en todo el mundo. Consulte la Guía de inicio rápido y otra documentación de Vaadin .
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION