JavaRush /Java Blog /Random-TL /Coffee break #93. Paano gumagana ang klase ng String sa J...

Coffee break #93. Paano gumagana ang klase ng String sa Java. Matutunan kung paano magpatupad ng web interface sa Java

Nai-publish sa grupo

Paano gumagana ang klase ng String sa Java

Pinagmulan: DZone Kamakailan ay nakita ko ang sumusunod na tanong sa isang forum: "Ilang String object ang nilikha dito ? Isa o dalawa?".
String langName = new String("Java");
Nagtataka ako kung paano ito sinagot ng iba, alam kong ito ay isang kumplikadong tanong, lalo na kung ang isa ay hindi masyadong alam kung paano gumagana ang String class sa Java. At kaya, pumunta ako sa seksyon ng mga komento. Coffee break #93.  Paano gumagana ang klase ng String sa Java.  Matutunan kung paano magpatupad ng web interface sa Java - 1Sa aking pagtataka, sa mga nagkomento ay may mga taong pinili ang "Isa" bilang tamang sagot, ngunit mas marami ang sumagot ng "Dalawa". Sa isang segundo, nagsimula pa akong magduda sa aking kaalaman tungkol sa Strings . Ang tamang sagot ay ang lahat ay depende sa mga pangyayari. Ang tanong ay hindi sapat na malinaw at nag-iiwan ng puwang para sa debate. Irephrase ko ito ng ganito:

1. Ilang Java String object ang nilikha sa memorya kapag ang pahayag na ito ay naisakatuparan?

Isa lang ang sagot.

Ilang Java String object ang mananatili sa memorya pagkatapos isagawa ang pahayag na ito?

Dalawa ang sagot. Sana ang kawalan ng katiyakan ay nawala sa sandaling nasuri ko ang memory dump ng programa na may isang pahayag tulad ng halimbawa sa itaas. Coffee break #93.  Paano gumagana ang klase ng String sa Java.  Matutunan kung paano magpatupad ng web interface sa Java - 2Ang program memory dump sa larawan sa itaas ay nagpapakita ng pagkakaroon ng dalawang String object na may parehong nilalaman. Ito ay nagpapatunay na ang pagtawag sa String class constructor at pagpasa ng string literal bilang argument ay nagreresulta sa dalawang bagay na idinaragdag sa memory heap: ang isa sa regular (non-pool) memory, at ang isa sa String Constant Pool (SCP), isang lugar sa memorya na bahagi din ng heap. Magsisimula ang mga paghihirap pagkatapos magdagdag. Ang pagtawag sa constructor ay palaging nagreresulta sa isang bagong bagay na inilalagay sa isang non-pool area. Ngunit ang argumento ng constructor, na isang literal na string, ay isang bagay din, at ito ay nilikha at iniimbak sa SCP sa panahon ng paglo-load ng klase, sa kondisyon na ang string pool ay hindi naglalaman ng mga string na may parehong nilalaman. Ang Detalye ng Wika ng Java ay nagsasaad na ang “mga string literal—o, sa pangkalahatan, ang mga String na mga halaga ng mga pare-parehong expression (§15.28)—ay “naka-intern” upang magbahagi ng mga natatanging pagkakataon gamit ang String method . intern ". Dahil ang isang string sa Java ay literal at samakatuwid ay kumakatawan sa halaga ng isang pare-parehong expression, ito ay pinagsama-sama. Upang gawin itong mas malinaw, muling isulat natin ang code na ipinakita sa simula ng artikulo tulad ng sumusunod:
String java = "Java";
String langName = new String(java);
Ngayon bumalik tayo sa pangunahing tanong. Ang sumusunod na pahayag ba ay lilikha ng isa o dalawang String object :
String langName = new String("Java");
Upang masagot ang tanong na ito at alisin ang anumang mga hinala, tingnan natin ang bytecode ng pangunahing pamamaraan:
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
Sa linya 6 makikita mo ang utos ng LDC (Load Constant). Naglo-load ito ng elemento mula sa string constant pool papunta sa stack. Nangangahulugan ito na sa oras na tinawag ang tagabuo, ang literal na Java, na isa ring bagay, ay naidagdag na sa pool. Nangyari ito habang naglo-load ng klase. Kaya, ang pagtawag sa String class constructor na may string literal ay lumilikha lamang ng isang bagay at inilalagay ito sa isang hindi naka-pool na lokasyon ng memorya.

Matutunan kung paano magpatupad ng web interface sa Java

Pinagmulan: Dev.to Ang mundo ng JavaScript ay nag-aalok ng kapaki-pakinabang at nakakatuwang web frameworks, walang duda tungkol dito. Mayroong isang kawili-wiling alternatibo para sa mga developer ng Java - ang open source na Vaadin framework. Gamit ito, madali mong maipapatupad ang isang graphical user interface (GUI) para sa web gamit lamang ang Java programming language at wala nang iba pa. Hindi mo kailangang magsulat ng isang linya ng HTML o JavaScript. Ang isang larawan ay nagkakahalaga ng isang libong salita: Coffee break #93.  Paano gumagana ang klase ng String sa Java.  Matutunan kung paano magpatupad ng web interface sa Java - 3

Paano gumagana ang Vaadin?

Sa kaliwa ng screenshot makikita mo ang isang klase ng Java. Ang code na ito ay tumatakbo sa isang server tulad ng Apache Tomcat, Eclipse Jetty o anumang iba pang servlet container. Magagamit mo ang API na ibinigay ng platform upang lumikha ng mga bahagi ng user interface (UI) gaya ng mga text field, combo box, grids ng data, mga tagapili ng petsa, mga field sa pag-upload, at marami pang iba. Maaari mong pagsamahin ang mga bahaging ito upang lumikha ng isang view (kilala rin bilang isang pahina o UI), gamit ang mga layout upang ayusin ang mga bahagi ng user interface (UI) nang patayo, pahalang, o anumang iba pang paraan gamit ang CSS. Sa nakaraang halimbawa, gumawa kami ng TextField at isang Button sa pamamagitan ng pagdaragdag sa kanila sa VerticalLayout . Kapag handa na ang view, maaari mo itong buksan sa pamamagitan ng URL gamit ang @Route annotation . Sa halimbawang ito, ginawa naming available ito sa http://localhost:8080/hello gamit ang @Route("hello") . Ang Vaadin application ay isang web application sa Java. Nagbibigay ang framework ng pagpapatupad ng Servlet ( VaadinServlet ) na humahawak sa mga kahilingan at tugon ng HTTP para sa iyo. Ini-scan ng servlet na ito ang mga klase ng Java na may markang @Route annotation upang ipakita ang tamang view sa browser. Kapag ang isang Vaadin application ay unang hiniling, ang Vaadin ay tumugon sa isang magaan na JavaScript file na nagsisilbing client engine. Ang engine na ito ang nangangasiwa sa pagpoproseso ng mga kaganapan sa browser at pagpapadala ng mga ito sa server bilang mga mensahe ng JSON. Pinoproseso ng object ng VaadinServlet ang mga kahilingan at ibinabalik din nito ang mga tugon ng JSON sa client-side engine. Pagkatapos ay ginagamit ng makina ang mensaheng ito upang i-update ang mga elemento sa page na kailangang i-update, kung mayroon man. Gumagamit si Vaadin ng HTTP session para mag-imbak ng component tree na naglalaman ng estado ng user interface. Ang mga bagay tulad ng mga bahagi ay bumubuo sa representasyon at ang kanilang mga estado (naka-enable/na-disable, caption, value, atbp.). Ang lahat ng ito ay nagbibigay ng isang antas ng seguridad na nagkakahalaga ng pagbanggit. Dahil ang logic ng user interface ay nasa server, hindi ito naa-access ng mga umaatake. Ang mga pagsusuri ay isinasagawa sa server. Halimbawa, kung hindi pinagana ang isang Button gamit ang setEnabled(false) , hindi lang ito isang cosmetic feature sa browser - hindi tatakbo ang server ng anumang logic sa click listeners na idinagdag sa disabled na button, na pumipigil sa mga attacker na gamitin ang mga tool ng developer sa browser upang baguhin ang pinaganang estado o tawagan ang VaadinServlet upang gayahin ang isang pag-click ng mouse (kaganapan ng pag-click).

Libre bang gamitin ang Vaadin?

Oo. Ang Vaadin ay isang open source framework na inilathala sa ilalim ng Apache License 2.0. Hindi mo kailangang bumili ng kahit ano upang lumikha ng ganap na mga web application kasama nito. May mga komersyal na bahagi na nagpapahusay sa pagganap, ngunit hindi ito kinakailangan. Halimbawa, mayroong isang visual na taga-disenyo at isang bahagi ng CRUD upang matulungan kang lumikha ng mga view nang mas mabilis. Maaari mong subukan ang mga bahaging ito nang libre bago mag-subscribe.

Ang Vaadin ba ay kapalit ng JSP at JSF?

Oo. Maaari itong magamit bilang isang kapalit para sa JSP, JSF at kahit na mga balangkas ng JavaScript tulad ng Angular. Maraming mga customer ng Vaadin ang matagumpay na lumipat mula sa mga teknolohiyang ito patungo sa Vaadin.

May suporta ba si Vaadin para sa Spring at Jakarta EE?

Oo. Ang Vaadin ay may opisyal na pagsasama sa Spring at Jakarta EE (dating Java EE). Maaari mong idagdag ang Vaadin bilang dependency kapag gumagawa ng bagong proyekto ng Spring Boot gamit ang Spring Initializr. Para sa Jakarta EE, maaari kang mag-download ng simpleng halimbawa ng Hello, World na gumagamit ng Jakarta EE. Sa oras ng pagsulat ng artikulong ito, ang bersyon 8 ng Jakarta EE lamang ang sinusuportahan.

Sino ang gumagamit ng Vaadin?

Maraming Fortune 500 na kumpanya ang gumagamit ng Vaadin, pati na rin ang mga matagumpay na startup at mahigit 200 libong developer sa buong mundo. Tingnan ang Gabay sa Mabilis na Pagsisimula at iba pang dokumentasyon ng Vaadin .
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION