JavaRush /Blog Java /Random-VI /Nghỉ giải lao #93. Lớp String hoạt động như thế nào trong...

Nghỉ giải lao #93. Lớp String hoạt động như thế nào trong Java. Tìm hiểu cách triển khai giao diện web trong Java

Xuất bản trong nhóm

Lớp String hoạt động như thế nào trong Java

Nguồn: DZone Gần đây tôi đã gặp câu hỏi sau trên một diễn đàn: “Có bao nhiêu đối tượng String được tạo ở đây ? Một hoặc hai?".
String langName = new String("Java");
Tôi tò mò muốn biết người khác trả lời câu hỏi đó như thế nào, biết rằng đó là một câu hỏi phức tạp, đặc biệt nếu một người không hiểu biết nhiều về cách hoạt động của lớp String trong Java. Và vì vậy, tôi đi sâu vào phần bình luận. Nghỉ giải lao #93.  Lớp String hoạt động như thế nào trong Java.  Tìm hiểu cách triển khai giao diện web trong Java - 1Tôi rất ngạc nhiên khi trong số những người bình luận có người chọn “Một” là câu trả lời đúng nhưng lại có nhiều người chọn “Hai”. Trong một giây, tôi thậm chí còn bắt đầu nghi ngờ kiến ​​thức của mình về Strings . Câu trả lời đúng là tất cả phụ thuộc vào hoàn cảnh. Câu hỏi không đủ rõ ràng và còn chỗ để tranh luận. Tôi sẽ diễn đạt lại nó như thế này:

1. Có bao nhiêu đối tượng Chuỗi Java được tạo trong bộ nhớ khi câu lệnh này được thực thi?

Chỉ có duy nhất một đáp án.

Có bao nhiêu đối tượng Chuỗi Java sẽ còn lại trong bộ nhớ sau khi thực hiện câu lệnh này?

Câu trả lời là hai. Hy vọng rằng sự không chắc chắn sẽ biến mất sau khi tôi kiểm tra kết xuất bộ nhớ của chương trình bằng một câu lệnh như ví dụ trên. Nghỉ giải lao #93.  Lớp String hoạt động như thế nào trong Java.  Tìm hiểu cách triển khai giao diện web trong Java - 2Kết xuất bộ nhớ chương trình trong hình trên cho thấy sự tồn tại của hai đối tượng String có cùng nội dung. Điều này chứng tỏ rằng việc gọi hàm tạo của lớp String và truyền một chuỗi ký tự làm đối số sẽ dẫn đến hai đối tượng được thêm vào vùng nhớ heap: một trong bộ nhớ thông thường (không phải nhóm) và đối tượng kia trong String Constant Pool (SCP), một vùng trong bộ nhớ cũng là một phần của vùng heap. Khó khăn bắt đầu sau khi thêm. Việc gọi hàm tạo luôn dẫn đến việc một đối tượng mới được đặt vào khu vực không phải vùng chứa. Nhưng đối số hàm tạo, là một chuỗi ký tự, cũng là một đối tượng và nó được tạo và lưu trữ trong SCP trong quá trình tải lớp, với điều kiện là nhóm chuỗi không chứa các chuỗi có cùng nội dung. Đặc tả ngôn ngữ Java nêu rõ rằng “các chuỗi ký tự—hay nói chung hơn là các Chuỗi là giá trị của các biểu thức không đổi (§15.28)—được “nội bộ” để chia sẻ các phiên bản duy nhất bằng cách sử dụng phương thức Chuỗi . intern " . Vì một chuỗi trong Java là chuỗi ký tự và do đó biểu thị giá trị của một biểu thức hằng, nên nó được gộp lại. Để làm cho điều này rõ ràng hơn nữa, chúng ta hãy viết lại đoạn mã được trình bày ở đầu bài viết như sau:
String java = "Java";
String langName = new String(java);
Bây giờ chúng ta hãy quay lại câu hỏi chính. Câu lệnh sau sẽ tạo một hoặc hai đối tượng String :
String langName = new String("Java");
Để trả lời câu hỏi này và loại bỏ mọi nghi ngờ, hãy xem mã byte của phương thức chính:
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
Ở dòng 6, bạn có thể thấy lệnh LDC (Load Constant). Nó tải một phần tử từ nhóm hằng chuỗi vào ngăn xếp. Điều này có nghĩa là tại thời điểm hàm tạo được gọi, chữ Java, cũng là một đối tượng, đã được thêm vào nhóm. Điều này xảy ra trong khi tải một lớp học. Do đó, việc gọi hàm tạo của lớp String bằng một chuỗi ký tự chỉ tạo ra một đối tượng và đặt nó vào một vị trí bộ nhớ không gộp.

Tìm hiểu cách triển khai giao diện web trong Java

Nguồn: Dev.to Thế giới JavaScript cung cấp các framework web hữu ích và thú vị, không có gì phải nghi ngờ về điều đó. Có một giải pháp thay thế thú vị dành cho các nhà phát triển Java - khung Vaadin mã nguồn mở . Với nó, bạn có thể dễ dàng triển khai giao diện đồ họa người dùng (GUI) cho web chỉ bằng ngôn ngữ lập trình Java và không sử dụng ngôn ngữ nào khác. Bạn không cần phải viết một dòng HTML hoặc JavaScript. Một bưc tranh đang gia ngan lơi noi: Nghỉ giải lao #93.  Lớp String hoạt động như thế nào trong Java.  Tìm hiểu cách triển khai giao diện web trong Java - 3

Vaadin hoạt động như thế nào?

Ở bên trái ảnh chụp màn hình, bạn thấy một lớp Java. Mã này chạy trên một máy chủ như Apache Tomcat, Eclipse Jetty hoặc bất kỳ vùng chứa servlet nào khác. Bạn có thể sử dụng API do nền tảng cung cấp để tạo các thành phần giao diện người dùng (UI) chẳng hạn như trường văn bản, hộp tổ hợp, lưới dữ liệu, bộ chọn ngày, trường tải lên và nhiều thành phần khác. Bạn có thể kết hợp các thành phần này để tạo chế độ xem (còn được gọi là trang hoặc giao diện người dùng), sử dụng bố cục để sắp xếp các thành phần giao diện người dùng (UI) theo chiều dọc, chiều ngang hoặc bất kỳ cách nào khác bằng CSS. Trong ví dụ trước, chúng ta đã tạo TextFieldButton bằng cách thêm chúng vào VerticalLayout . Khi chế độ xem đã sẵn sàng, bạn có thể mở chế độ xem qua URL bằng chú thích @Route . Trong ví dụ này, chúng tôi đã cung cấp nó tại http://localhost:8080/hello bằng cách sử dụng @Route("hello") . Ứng dụng Vaadin là một ứng dụng web bằng Java. Khung này cung cấp triển khai Servlet ( VaadinServlet ) để xử lý các yêu cầu và phản hồi HTTP cho bạn. Servlet này quét các lớp Java được đánh dấu bằng chú thích @Route để hiển thị chế độ xem chính xác trong trình duyệt. Khi ứng dụng Vaadin được yêu cầu lần đầu tiên, Vaadin sẽ phản hồi bằng một tệp JavaScript nhẹ đóng vai trò là công cụ máy khách. Công cụ này đảm nhiệm việc xử lý các sự kiện trong trình duyệt và gửi chúng đến máy chủ dưới dạng tin nhắn JSON. Đối tượng VaadinServlet xử lý các yêu cầu và trả về các phản hồi JSON tương tự cho công cụ phía máy khách. Sau đó, công cụ sẽ sử dụng thông báo này để cập nhật các thành phần trên trang cần cập nhật, nếu có. Vaadin sử dụng phiên HTTP để lưu trữ cây thành phần chứa trạng thái của giao diện người dùng. Những thứ như thành phần tạo thành biểu diễn và trạng thái của chúng (bật/tắt, chú thích, giá trị, v.v.). Tất cả điều này cung cấp một mức độ bảo mật đáng được đề cập. Vì logic giao diện người dùng nằm trên máy chủ nên kẻ tấn công không thể truy cập được. Kiểm tra được thực hiện trên máy chủ. Ví dụ: nếu một Nút bị vô hiệu hóa bằng cách sử dụng setEnabled(false) thì đây không chỉ là một tính năng mang tính thẩm mỹ trong trình duyệt - máy chủ sẽ không chạy bất kỳ logic nào trong trình nghe nhấp chuột được thêm vào nút bị vô hiệu hóa, ngăn chặn kẻ tấn công khai thác các công cụ dành cho nhà phát triển trong trình duyệt để thay đổi trạng thái kích hoạt hoặc gọi VaadinServlet để mô phỏng một cú nhấp chuột (sự kiện nhấp chuột).

Vaadin có được sử dụng miễn phí không?

Đúng. Vaadin là một framework mã nguồn mở được xuất bản theo Giấy phép Apache 2.0. Bạn không cần phải mua bất cứ thứ gì để tạo các ứng dụng web hoàn chỉnh với nó. Có những thành phần thương mại giúp cải thiện hiệu suất, nhưng chúng không bắt buộc. Ví dụ: có một trình thiết kế hình ảnh và thành phần CRUD để giúp bạn tạo các chế độ xem nhanh hơn nữa. Bạn có thể dùng thử miễn phí các thành phần này trước khi đăng ký.

Vaadin có phải là sự thay thế cho JSP và JSF không?

Đúng. Nó có thể được sử dụng để thay thế cho JSP, JSF và thậm chí cả các khung JavaScript như Angular. Nhiều khách hàng của Vaadin đã chuyển đổi thành công từ các công nghệ này sang Vaadin.

Vaadin có hỗ trợ cho Spring và Jakarta EE không?

Đúng. Vaadin đã tích hợp chính thức với Spring và Jakarta EE (trước đây là Java EE). Bạn có thể thêm Vaadin làm phần phụ thuộc khi tạo dự án Spring Boot mới bằng Spring Khởi tạo. Đối với Jakarta EE, bạn có thể tải xuống một ví dụ Hello, World đơn giản sử dụng Jakarta EE. Tại thời điểm viết bài này, chỉ hỗ trợ Jakarta EE phiên bản 8.

Ai sử dụng Vaadin?

Nhiều công ty Fortune 500 sử dụng Vaadin, cũng như các công ty khởi nghiệp thành công và hơn 200 nghìn nhà phát triển trên toàn thế giới. Hãy xem Hướng dẫn bắt đầu nhanh và tài liệu Vaadin khác.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION