JavaRush /Java Blog /Random-ID /Rehat kopi #93. Bagaimana kelas String bekerja di Java. P...

Rehat kopi #93. Bagaimana kelas String bekerja di Java. Pelajari cara mengimplementasikan antarmuka web di Java

Dipublikasikan di grup Random-ID

Bagaimana kelas String bekerja di Java

Sumber: DZone Saya baru-baru ini menemukan pertanyaan berikut di forum: “Berapa banyak objek String yang dibuat di sini ? Satu atau dua?".
String langName = new String("Java");
Saya penasaran bagaimana orang lain menjawabnya, mengetahui bahwa ini adalah pertanyaan yang kompleks, terutama jika seseorang tidak terlalu paham tentang cara kerja kelas String di Java. Jadi, saya terjun ke bagian komentar. Rehat kopi #93.  Bagaimana kelas String bekerja di Java.  Pelajari cara mengimplementasikan antarmuka web di Java - 1Yang mengejutkan saya, di antara pemberi komentar ada yang memilih “Satu” sebagai jawaban yang benar, namun lebih banyak lagi yang menjawab “Dua”. Untuk sesaat, saya bahkan mulai meragukan pengetahuan saya tentang Strings . Jawaban yang benar adalah semuanya tergantung pada keadaan. Pertanyaannya tidak cukup jelas dan menyisakan ruang untuk perdebatan. Saya akan mengulanginya seperti ini:

1. Berapa banyak objek Java String yang dibuat di memori saat pernyataan ini dijalankan?

Hanya ada satu jawaban.

Berapa banyak objek Java String yang tersisa di memori setelah menjalankan pernyataan ini?

Jawabannya ada dua. Semoga ketidakpastian itu hilang setelah saya memeriksa dump memori program dengan pernyataan seperti contoh di atas. Rehat kopi #93.  Bagaimana kelas String bekerja di Java.  Pelajari cara mengimplementasikan antarmuka web di Java - 2Dump memori program pada gambar di atas menunjukkan keberadaan dua objek String dengan konten yang sama. Hal ini membuktikan bahwa memanggil konstruktor kelas String dan meneruskan string literal sebagai argumen menghasilkan dua objek yang ditambahkan ke tumpukan memori: satu di memori biasa (non-pool), dan yang lainnya di String Constant Pool (SCP), dan area di memori yang juga merupakan bagian dari heap. Kesulitan dimulai setelah penambahan. Memanggil konstruktor selalu menghasilkan objek baru yang ditempatkan di area non-kumpulan. Namun argumen konstruktor, yang merupakan string literal, juga merupakan objek, dan dibuat serta disimpan di SCP selama pemuatan kelas, asalkan kumpulan string tidak berisi string dengan konten yang sama. Spesifikasi Bahasa Java menyatakan bahwa “string literal—atau, lebih umum, String yang merupakan nilai ekspresi konstan (§15.28)—adalah “diinternir” untuk berbagi instance unik menggunakan metode String .intern " . Karena string di Java bersifat literal dan karenanya mewakili nilai ekspresi konstan, maka string tersebut dikumpulkan. Agar lebih jelas lagi, mari kita tulis ulang kode yang disajikan di awal artikel sebagai berikut:
String java = "Java";
String langName = new String(java);
Sekarang mari kita kembali ke pertanyaan utama. Apakah pernyataan berikut akan membuat satu atau dua objek String :
String langName = new String("Java");
Untuk menjawab pertanyaan ini dan menghilangkan kecurigaan, mari kita lihat bytecode dari metode 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 dapat melihat perintah LDC (Load Constant). Ini memuat elemen dari kumpulan konstan string ke tumpukan. Ini berarti bahwa pada saat konstruktor dipanggil, literal Java, yang juga merupakan sebuah objek, telah ditambahkan ke kumpulan. Ini terjadi saat memuat kelas. Jadi, memanggil konstruktor kelas String dengan literal string hanya akan membuat satu objek dan menempatkannya di lokasi memori yang tidak dikumpulkan.

Pelajari cara mengimplementasikan antarmuka web di Java

Sumber: Dev.to Dunia JavaScript menawarkan kerangka web yang berguna dan menyenangkan, tidak ada keraguan tentang hal itu. Ada alternatif menarik untuk pengembang Java - kerangka Vaadin open source . Dengannya, Anda dapat dengan mudah mengimplementasikan antarmuka pengguna grafis (GUI) untuk web hanya dengan menggunakan bahasa pemrograman Java dan tidak ada yang lain. Anda tidak perlu menulis satu baris pun HTML atau JavaScript. Sebuah gambar bernilai ribuan kata: Rehat kopi #93.  Bagaimana kelas String bekerja di Java.  Pelajari cara mengimplementasikan antarmuka web di Java - 3

Bagaimana cara kerja Vaadin?

Di sebelah kiri tangkapan layar Anda melihat kelas Java. Kode ini berjalan di server seperti Apache Tomcat, Eclipse Jetty atau container servlet lainnya. Anda dapat menggunakan API yang disediakan oleh platform untuk membuat komponen antarmuka pengguna (UI) seperti kolom teks, kotak kombo, kisi data, pemilih tanggal, kolom unggah, dan banyak lainnya. Anda dapat menggabungkan komponen-komponen ini untuk membuat tampilan (juga dikenal sebagai halaman atau UI), menggunakan tata letak untuk menyusun komponen antarmuka pengguna (UI) secara vertikal, horizontal, atau cara lain apa pun menggunakan CSS. Pada contoh sebelumnya, kita membuat TextField dan Button dengan menambahkannya ke VerticalLayout . Setelah tampilan siap, Anda dapat membukanya melalui URL menggunakan anotasi @Route . Dalam contoh ini, kami menyediakannya di http://localhost:8080/hello menggunakan @Route("hello") . Aplikasi Vaadin adalah aplikasi web di Java. Kerangka kerja ini menyediakan implementasi Servlet ( VaadinServlet ) yang menangani permintaan dan respons HTTP untuk Anda. Servlet ini memindai kelas Java yang ditandai dengan anotasi @Route untuk menampilkan tampilan yang benar di browser. Saat aplikasi Vaadin pertama kali diminta, Vaadin merespons dengan file JavaScript ringan yang berfungsi sebagai mesin klien. Mesin ini menangani pemrosesan peristiwa di browser dan mengirimkannya ke server sebagai pesan JSON. Objek VaadinServlet memproses permintaan dan juga mengembalikan respons JSON ke mesin sisi klien. Mesin kemudian menggunakan pesan ini untuk memperbarui elemen pada halaman yang perlu diperbarui, jika ada. Vaadin menggunakan sesi HTTP untuk menyimpan pohon komponen yang berisi status antarmuka pengguna. Hal-hal seperti komponen membentuk representasi dan statusnya (diaktifkan/dinonaktifkan, keterangan, nilai, dll.). Ini semua memberikan tingkat keamanan yang patut disebutkan. Karena logika antarmuka pengguna ada di server, maka tidak dapat diakses oleh penyerang. Pemeriksaan dilakukan di server. Misalnya, jika Tombol dinonaktifkan menggunakan setEnabled(false) , maka ini bukan hanya fitur kosmetik di browser - server tidak akan menjalankan logika apa pun di pendengar klik yang ditambahkan ke tombol yang dinonaktifkan, sehingga mencegah penyerang mengeksploitasi alat pengembang di browser untuk mengubah status yang diaktifkan atau panggil VaadinServlet untuk mensimulasikan klik mouse (acara klik).

Apakah Vaadin gratis untuk digunakan?

Ya. Vaadin adalah kerangka kerja sumber terbuka yang diterbitkan di bawah Lisensi Apache 2.0. Anda tidak perlu membeli apa pun untuk membuat aplikasi web lengkap dengannya. Ada komponen komersial yang meningkatkan kinerja, namun tidak diperlukan. Misalnya, ada desainer visual dan komponen CRUD untuk membantu Anda membuat tampilan lebih cepat. Anda dapat mencoba komponen ini secara gratis sebelum berlangganan.

Apakah Vaadin merupakan pengganti JSP dan JSF?

Ya. Ini dapat digunakan sebagai pengganti kerangka kerja JSP, JSF dan bahkan JavaScript seperti Angular. Banyak pelanggan Vaadin yang berhasil bermigrasi dari teknologi ini ke Vaadin.

Apakah Vaadin memiliki dukungan untuk Spring dan Jakarta EE?

Ya. Vaadin memiliki integrasi resmi dengan Spring dan Jakarta EE (sebelumnya Java EE). Anda dapat menambahkan Vaadin sebagai ketergantungan saat membuat proyek Spring Boot baru menggunakan Spring Initializr. Untuk Jakarta EE, Anda dapat mendownload contoh Hello, World sederhana yang menggunakan Jakarta EE. Pada saat artikel ini ditulis, hanya Jakarta EE versi 8 yang didukung.

Siapa yang menggunakan Vaadin?

Banyak perusahaan Fortune 500 menggunakan Vaadin, serta startup sukses dan lebih dari 200 ribu pengembang di seluruh dunia. Lihat Panduan Memulai Cepat dan dokumentasi Vaadin lainnya.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION