JavaRush /Blog Java /Random-PL /Przerwa kawowa #93. Jak działa klasa String w Javie. Dowi...

Przerwa kawowa #93. Jak działa klasa String w Javie. Dowiedz się, jak zaimplementować interfejs WWW w Javie

Opublikowano w grupie Random-PL

Jak działa klasa String w Javie

Źródło: DZone Niedawno natknąłem się na następujące pytanie na forum: „Ile obiektów String zostało tutaj utworzonych ? Jeden lub dwa?".
String langName = new String("Java");
Byłem ciekaw, jak odpowiedzieli na to inni, wiedząc, że jest to złożone pytanie, zwłaszcza jeśli nie ma się zbyt dużej wiedzy na temat działania klasy String w Javie. I tak zagłębiłem się w sekcję komentarzy. Przerwa kawowa #93.  Jak działa klasa String w Javie.  Dowiedz się, jak zaimplementować interfejs WWW w Javie - 1Ku mojemu zaskoczeniu wśród komentujących znalazły się osoby, które jako prawidłową odpowiedź wybrały „Jeden”, ale znacznie więcej osób odpowiedziało „Dwa”. Przez sekundę zacząłem nawet wątpić w swoją wiedzę na temat Strings . Prawidłowa odpowiedź jest taka, że ​​wszystko zależy od okoliczności. Pytanie nie jest wystarczająco jasne i pozostawia pole do dyskusji. Sformułowałbym to w ten sposób:

1. Ile obiektów Java String jest tworzonych w pamięci podczas wykonywania tej instrukcji?

Jest tylko jedna odpowiedź.

Ile obiektów Java String pozostanie w pamięci po wykonaniu tej instrukcji?

Odpowiedź brzmi: dwa. Mam nadzieję, że niepewność zniknęła, gdy sprawdziłem zrzut pamięci programu za pomocą instrukcji takiej jak w powyższym przykładzie. Przerwa kawowa #93.  Jak działa klasa String w Javie.  Dowiedz się, jak zaimplementować interfejs sieciowy w języku Java - 2Zrzut pamięci programu na powyższym obrazku pokazuje istnienie dwóch obiektów String o tej samej zawartości. Dowodzi to, że wywołanie konstruktora klasy String i przekazanie literału ciągu jako argumentu skutkuje dodaniem dwóch obiektów do sterty pamięci: jednego w zwykłej (innej niż pula) pamięci, a drugiego w puli stałej ciągów (SCP), obszar pamięci, który jest również częścią sterty. Trudności zaczynają się po dodaniu. Wywołanie konstruktora zawsze skutkuje umieszczeniem nowego obiektu w obszarze innym niż basen. Ale argument konstruktora, który jest literałem ciągu, jest także obiektem i jest tworzony i przechowywany w SCP podczas ładowania klasy, pod warunkiem, że pula ciągów nie zawiera ciągów o tej samej treści. Specyfikacja języka Java stwierdza, że ​​„literały łańcuchowe – lub bardziej ogólnie ciągi znaków będące wartościami wyrażeń stałych (§15.28) – są „internowane” w celu współdzielenia unikalnych instancji przy użyciu metody String .intern . Ponieważ ciąg znaków w Javie jest dosłowny i dlatego reprezentuje wartość wyrażenia stałego, jest on łączony. Aby było to jeszcze bardziej oczywiste, przepiszemy kod zaprezentowany na początku artykułu w następujący sposób:
String java = "Java";
String langName = new String(java);
Wróćmy teraz do głównego pytania. Czy poniższa instrukcja utworzy jeden czy dwa obiekty String :
String langName = new String("Java");
Aby odpowiedzieć na to pytanie i rozwiać wszelkie podejrzenia, spójrzmy na kod bajtowy głównej metody:
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
W linii 6 możesz zobaczyć polecenie LDC (Load Constant). Ładuje element z puli stałych łańcuchowych na stos. Oznacza to, że w momencie wywołania konstruktora literał Java, który jest jednocześnie obiektem, został już dodany do puli. Stało się to podczas ładowania klasy. Zatem wywołanie konstruktora klasy String z literałem łańcuchowym tworzy tylko jeden obiekt i umieszcza go w lokalizacji pamięci niebędącej w puli.

Dowiedz się, jak zaimplementować interfejs WWW w Javie

Źródło: Dev.to Świat JavaScript oferuje przydatne i zabawne frameworki internetowe, nie ma co do tego wątpliwości. Istnieje interesująca alternatywa dla programistów Java - framework Vaadin o otwartym kodzie źródłowym . Dzięki niemu możesz łatwo wdrożyć graficzny interfejs użytkownika (GUI) dla Internetu, używając wyłącznie języka programowania Java i niczego więcej. Nie musisz pisać ani jednej linii kodu HTML ani JavaScript. Obraz jest wart tysiąca słów: Przerwa kawowa #93.  Jak działa klasa String w Javie.  Dowiedz się, jak zaimplementować interfejs WWW w Javie - 3

Jak działa Vaadin?

Po lewej stronie zrzutu ekranu widzisz klasę Java. Ten kod działa na serwerze takim jak Apache Tomcat, Eclipse Jetty lub dowolnym innym kontenerze serwletów. Możesz używać interfejsu API udostępnianego przez platformę do tworzenia komponentów interfejsu użytkownika (UI) , takich jak pola tekstowe, pola kombi, siatki danych, selektory dat, pola przesyłania i wiele innych. Możesz połączyć te komponenty, aby utworzyć widok (zwany także stroną lub interfejsem użytkownika), używając układów do rozmieszczenia komponentów interfejsu użytkownika (UI) w pionie, poziomie lub w dowolny inny sposób za pomocą CSS. W poprzednim przykładzie utworzyliśmy TextField i Button, dodając je do VerticalLayout . Gdy widok będzie gotowy, możesz go otworzyć za pomocą adresu URL, korzystając z adnotacji @Route . W tym przykładzie udostępniliśmy go pod adresem http://localhost:8080/hello za pomocą @Route("hello") . Aplikacja Vaadin jest aplikacją internetową w języku Java. Struktura zapewnia implementację serwletu ( VaadinServlet ), która obsługuje żądania i odpowiedzi HTTP za Ciebie. Ten serwlet skanuje klasy Java oznaczone adnotacją @Route , aby wyświetlić prawidłowy widok w przeglądarce. Kiedy po raz pierwszy żądana jest aplikacja Vaadin, Vaadin odpowiada lekkim plikiem JavaScript, który służy jako silnik klienta. Silnik ten zajmuje się przetwarzaniem zdarzeń w przeglądarce i wysyłaniem ich na serwer jako wiadomości JSON. Obiekt VaadinServlet przetwarza żądania i podobnie zwraca odpowiedzi JSON do silnika po stronie klienta. Następnie silnik wykorzystuje ten komunikat do aktualizacji elementów strony, które wymagają aktualizacji, jeśli takie istnieją. Vaadin używa sesji HTTP do przechowywania drzewa komponentów zawierającego stan interfejsu użytkownika. Rzeczy takie jak komponenty tworzą reprezentację i ich stany (włączone/wyłączone, podpis, wartość itp.). Wszystko to zapewnia poziom bezpieczeństwa, o którym warto wspomnieć. Ponieważ logika interfejsu użytkownika znajduje się na serwerze, nie jest dostępna dla atakujących. Sprawdzanie odbywa się na serwerze. Na przykład, jeśli Button jest wyłączony przy użyciu setEnabled(false) , to nie jest to tylko kosmetyczna funkcja w przeglądarce - serwer nie będzie uruchamiał żadnej logiki w detektorach kliknięć dodanych do wyłączonego przycisku, uniemożliwiając atakującym wykorzystanie narzędzi programistycznych w przeglądarce aby zmienić stan włączony lub wywołać VaadinServlet w celu symulacji kliknięcia myszą (zdarzenie kliknięcia).

Czy korzystanie z Vaadin jest darmowe?

Tak. Vaadin to platforma open source opublikowana na licencji Apache 2.0. Nie musisz niczego kupować, aby tworzyć za jego pomocą pełnoprawne aplikacje internetowe. Istnieją komercyjne komponenty, które poprawiają wydajność, ale nie są one wymagane. Na przykład dostępny jest projektant wizualny i komponent CRUD, które pomagają jeszcze szybciej tworzyć widoki. Możesz wypróbować te komponenty za darmo przed subskrypcją.

Czy Vaadin zastępuje JSP i JSF?

Tak. Może być używany jako zamiennik JSP, JSF, a nawet frameworków JavaScript, takich jak Angular. Wielu klientów Vaadin pomyślnie przeszło migrację z tych technologii do Vaadin.

Czy Vaadin obsługuje Spring i Jakarta EE?

Tak. Vaadin ma oficjalną integrację ze Springiem i Jakarta EE (dawniej Java EE). Możesz dodać Vaadin jako zależność podczas tworzenia nowego projektu Spring Boot przy użyciu Spring Individualizr. W przypadku Jakarta EE możesz pobrać prosty przykład Hello, World wykorzystujący Jakarta EE. W chwili pisania tego artykułu obsługiwana jest tylko wersja Jakarta EE 8.

Kto używa Vaadin?

Z Vaadina korzysta wiele firm z listy Fortune 500, a także odnoszące sukcesy start-upy i ponad 200 tysięcy programistów na całym świecie. Zapoznaj się z Przewodnikiem szybkiego startu i inną dokumentacją Vaadin .
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION