JavaRush /Blog Java /Random-MS /Coffee break #93. Bagaimana kelas String berfungsi di Jaw...

Coffee break #93. Bagaimana kelas String berfungsi di Jawa. Ketahui cara melaksanakan antara muka web dalam Java

Diterbitkan dalam kumpulan

Bagaimana kelas String berfungsi di Jawa

Sumber: DZone Saya baru-baru ini menemui soalan berikut di forum: "Berapa banyak objek String yang dicipta di sini ? Satu atau dua?".
String langName = new String("Java");
Saya ingin tahu bagaimana orang lain menjawabnya, mengetahui bahawa ia adalah soalan yang kompleks, terutamanya jika seseorang itu tidak begitu berpengetahuan tentang cara kelas String berfungsi di Jawa. Jadi, saya terjun ke bahagian komen. Coffee break #93.  Bagaimana kelas String berfungsi di Jawa.  Ketahui cara melaksanakan antara muka web dalam Java - 1Terkejut saya, dalam kalangan pengulas ada orang yang memilih "Satu" sebagai jawapan yang betul, tetapi ramai lagi yang menjawab "Dua". Untuk seketika, saya juga mula meragui pengetahuan saya tentang Strings . Jawapan yang betul ialah semuanya bergantung pada keadaan. Persoalannya tidak cukup jelas dan memberi ruang untuk dibahaskan. Saya akan mengulanginya seperti ini:

1. Berapa banyak objek Java String yang dicipta dalam ingatan apabila pernyataan ini dilaksanakan?

Hanya ada satu jawapan.

Berapa banyak objek Java String yang akan kekal dalam ingatan selepas melaksanakan pernyataan ini?

Jawapannya dua. Mudah-mudahan ketidakpastian itu hilang sebaik sahaja saya menyemak pembuangan memori program dengan pernyataan seperti contoh di atas. Coffee break #93.  Bagaimana kelas String berfungsi di Jawa.  Ketahui cara melaksanakan antara muka web dalam Java - 2Lambakan memori program dalam imej di atas menunjukkan kewujudan dua objek String dengan kandungan yang sama. Ini membuktikan bahawa memanggil pembina kelas String dan menghantar rentetan literal sebagai argumen mengakibatkan dua objek ditambahkan ke timbunan memori: satu dalam memori biasa (bukan kolam), dan satu lagi dalam String Constant Pool (SCP), sebuah kawasan dalam ingatan yang juga merupakan sebahagian daripada timbunan. Kesukaran bermula selepas menambah. Memanggil pembina sentiasa menyebabkan objek baru diletakkan di kawasan bukan kolam. Tetapi hujah pembina, yang merupakan rentetan literal, juga merupakan objek, dan ia dicipta dan disimpan dalam SCP semasa pemuatan kelas, dengan syarat kolam rentetan tidak mengandungi rentetan dengan kandungan yang sama. Spesifikasi Bahasa Java menyatakan bahawa "huruf rentetan—atau, lebih umum, Rentetan yang merupakan nilai ungkapan malar (§15.28)—adalah "dilatih" untuk berkongsi kejadian unik menggunakan kaedah String . intern ". Oleh kerana rentetan dalam Java adalah literal dan oleh itu mewakili nilai ungkapan malar, ia dikumpulkan. Untuk menjadikannya lebih jelas, mari kita tulis semula kod yang dibentangkan pada permulaan artikel seperti berikut:
String java = "Java";
String langName = new String(java);
Sekarang mari kita kembali kepada soalan utama. Adakah pernyataan berikut akan mencipta satu atau dua objek String :
String langName = new String("Java");
Untuk menjawab soalan ini dan membuang sebarang syak wasangka, mari lihat kod bait kaedah utama:
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
Pada baris 6 anda boleh melihat arahan LDC (Load Constant). Ia memuatkan elemen daripada kolam pemalar rentetan ke dalam timbunan. Ini bermakna bahawa pada masa pembina dipanggil, literal Java, yang juga objek, telah ditambahkan ke kolam. Ini berlaku semasa memuatkan kelas. Oleh itu, memanggil pembina kelas String dengan literal rentetan mencipta hanya satu objek dan meletakkannya di lokasi memori yang tidak terkumpul.

Ketahui cara melaksanakan antara muka web dalam Java

Sumber: Dev.to Dunia JavaScript menawarkan rangka kerja web yang berguna dan menyeronokkan, tidak ada keraguan mengenainya. Terdapat alternatif yang menarik untuk pembangun Java - rangka kerja Vaadin sumber terbuka . Dengan itu, anda boleh dengan mudah melaksanakan antara muka pengguna grafik (GUI) untuk web hanya menggunakan bahasa pengaturcaraan Java dan tiada yang lain. Anda tidak perlu menulis satu baris HTML atau JavaScript. Sekeping gambar bernilai seribu perkataan: Coffee break #93.  Bagaimana kelas String berfungsi di Jawa.  Ketahui cara melaksanakan antara muka web dalam Java - 3

Bagaimanakah Vaadin berfungsi?

Di sebelah kiri tangkapan skrin anda melihat kelas Java. Kod ini berjalan pada pelayan seperti Apache Tomcat, Eclipse Jetty atau mana-mana bekas servlet lain. Anda boleh menggunakan API yang disediakan oleh platform untuk mencipta komponen antara muka pengguna (UI) seperti medan teks, kotak kombo, grid data, pemilih tarikh, medan muat naik dan banyak lagi. Anda boleh menggabungkan komponen ini untuk membuat paparan (juga dikenali sebagai halaman atau UI), menggunakan reka letak untuk menyusun komponen antara muka pengguna (UI) secara menegak, mendatar atau apa-apa cara lain menggunakan CSS. Dalam contoh sebelumnya, kami mencipta TextField dan Button dengan menambahkannya pada VerticalLayout . Setelah paparan sedia, anda boleh membukanya melalui URL menggunakan anotasi @Route . Dalam contoh ini, kami menyediakannya di http://localhost:8080/hello menggunakan @Route("hello") . Aplikasi Vaadin ialah aplikasi web dalam Java. Rangka kerja menyediakan pelaksanaan Servlet ( VaadinServlet ) yang mengendalikan permintaan dan respons HTTP untuk anda. Servis ini mengimbas kelas Java yang ditandai dengan anotasi @Route untuk memaparkan paparan yang betul dalam penyemak imbas. Apabila aplikasi Vaadin pertama kali diminta, Vaadin membalas dengan fail JavaScript ringan yang berfungsi sebagai enjin pelanggan. Enjin ini mengurus acara pemprosesan dalam penyemak imbas dan menghantarnya ke pelayan sebagai mesej JSON. Objek VaadinServlet memproses permintaan dan begitu juga mengembalikan respons JSON kepada enjin sisi klien. Enjin kemudian menggunakan mesej ini untuk mengemas kini elemen pada halaman yang perlu dikemas kini, jika ada. Vaadin menggunakan sesi HTTP untuk menyimpan pokok komponen yang mengandungi keadaan antara muka pengguna. Perkara seperti komponen membentuk perwakilan dan keadaannya (didayakan/dilumpuhkan, kapsyen, nilai, dsb.). Ini semua menyediakan tahap keselamatan yang patut disebut. Memandangkan logik antara muka pengguna berada pada pelayan, ia tidak boleh diakses oleh penyerang. Pemeriksaan dilakukan pada pelayan. Contohnya, jika Butang dinyahdayakan menggunakan setEnabled(false) , maka ini bukan sekadar ciri kosmetik dalam penyemak imbas - pelayan tidak akan menjalankan sebarang logik dalam pendengar klik yang ditambahkan pada butang dilumpuhkan, menghalang penyerang daripada mengeksploitasi alat pembangun dalam penyemak imbas untuk menukar keadaan yang didayakan atau hubungi VaadinServlet untuk mensimulasikan klik tetikus (acara klik).

Adakah Vaadin percuma untuk digunakan?

ya. Vaadin ialah rangka kerja sumber terbuka yang diterbitkan di bawah Lesen Apache 2.0. Anda tidak perlu membeli apa-apa untuk membuat aplikasi web lengkap dengannya. Terdapat komponen komersial yang meningkatkan prestasi, tetapi ia tidak diperlukan. Sebagai contoh, terdapat pereka bentuk visual dan komponen CRUD untuk membantu anda membuat paparan dengan lebih pantas. Anda boleh mencuba komponen ini secara percuma sebelum melanggan.

Adakah Vaadin pengganti JSP dan JSF?

ya. Ia boleh digunakan sebagai pengganti JSP, JSF dan juga rangka kerja JavaScript seperti Angular. Ramai pelanggan Vaadin telah berjaya berhijrah daripada teknologi ini kepada Vaadin.

Adakah Vaadin mempunyai sokongan untuk Spring dan Jakarta EE?

ya. Vaadin mempunyai integrasi rasmi dengan Spring dan Jakarta EE (dahulunya Java EE). Anda boleh menambah Vaadin sebagai kebergantungan apabila mencipta projek Spring Boot baharu menggunakan Spring Initializr. Untuk Jakarta EE, anda boleh memuat turun contoh Hello, World yang mudah yang menggunakan Jakarta EE. Pada masa menulis artikel ini, hanya Jakarta EE versi 8 disokong.

Siapa yang menggunakan Vaadin?

Banyak syarikat Fortune 500 menggunakan Vaadin, serta syarikat permulaan yang berjaya dan lebih 200 ribu pembangun di seluruh dunia. Lihat Panduan Mula Pantas dan dokumentasi Vaadin yang lain.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION