Java 10 - Các Tính Năng Mới

Xin chào các nhà phát triển Java đang theo đuổi! Tôi rất vui mừng được hướng dẫn các bạn qua các tính năng mới thú vị được giới thiệu trong Java 10. Là người đã dạy Java trong nhiều năm, tôi có thể đảm bảo với các bạn rằng những cập nhật này sẽ làm cho hành trình lập код của các bạn trở nên thú vị và hiệu quả hơn. Hãy cùng nhau khám phá nhé!

Java 10 - New Features

Giới Thiệu Về Java 10

Java 10 được phát hành vào tháng 3 năm 2018, mang lại nhiều cải tiến cho ngôn ngữ. Mặc dù nó có thể không đột phá như một số phiên bản khác, nhưng nó đã giới thiệu một số tính năng hữu ích có thể cải thiện đáng kể trải nghiệm lập код của bạn.

Phán Định Loại Biến Cục Bộ

Một trong những tính năng được thảo luận nhiều nhất trong Java 10 là phán định loại biến cục bộ. Tính năng này cho phép bạn khai báo các biến cục bộ mà không cần xác định rõ loại của chúng. Thay vào đó, bạn có thể sử dụng từ khóa var, và trình biên dịch sẽ suy ra loại dựa trên phần tử khởi tạo.

Hãy xem một ví dụ:

// Trước Java 10
String message = "Hello, Java 10!";

// Với Java 10
var message = "Hello, Java 10!";

Trong ví dụ này, trình biên dịch tự động suy ra rằng message là một String. Tính năng này có thể làm cho mã của bạn trở nên ngắn gọn và dễ đọc hơn, đặc biệt khi làm việc với các loại phức tạp.

Khi Nào Sử Dụng var

Mặc dù var là một tính năng mạnh mẽ, nhưng rất quan trọng là phải sử dụng nó một cách thận trọng. Dưới đây là một số hướng dẫn:

  1. Sử dụng var khi loại có thể dễ dàng suy ra từ bên phải của phép gán.
  2. Tránh sử dụng var khi loại không rõ ràng, vì nó có thể làm giảm khả năng đọc mã.

Hãy xem một ví dụ phức tạp hơn:

// Trước Java 10
Map<String, List<String>> userFruits = new HashMap<>();

// Với Java 10
var userFruits = new HashMap<String, List<String>>();

Trong trường hợp này, sử dụng var làm cho mã sạch sẽ hơn mà không hy sinh tính rõ ràng.

Cải Tiến API

Java 10 cũng giới thiệu một số cải tiến cho các API hiện có. Hãy cùng khám phá một số trong số đó.

Optional.orElseThrow()

Lớp Optional, được giới thiệu trong Java 8, đã nhận được một phương thức mới trong Java 10: orElseThrow(). Phương thức này tương tự như get(), nhưng nó rõ ràng hơn về việc ném ngoại lệ nếu Optional rỗng.

public class OptionalExample {
public static void main(String[] args) {
Optional<String> emptyOptional = Optional.empty();

try {
String result = emptyOptional.orElseThrow();
} catch (NoSuchElementException e) {
System.out.println("Optional rỗng!");
}
}
}

Trong ví dụ này, orElseThrow() ném một NoSuchElementExceptionOptional rỗng. Phương thức này giúp mã của bạn trở nên rõ ràng và dễ hiểu hơn.

Bộ Sưu Tập Không Thể Chỉnh Sửa

Java 10 đã giới thiệu các phương thức nhà máy để tạo ra các bản sao không thể chỉnh sửa của bộ sưu tập. Các phương thức này có sẵn cho List, Set và Map.

public class UnmodifiableCollectionsExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
List<String> unmodifiableFruits = List.copyOf(fruits);

try {
unmodifiableFruits.add("Date");
} catch (UnsupportedOperationException e) {
System.out.println("Không thể chỉnh sửa một danh sách không thể chỉnh sửa!");
}
}
}

Trong ví dụ này, List.copyOf() tạo ra một bản sao không thể chỉnh sửa của danh sách gốc. Bất kỳattempt nào để chỉnh sửa danh sách này sẽ kết quả trong một UnsupportedOperationException.

Cải Thiện Hiệu Suất

Java 10 cũng mang lại một số cải tiến dưới hood để cải thiện hiệu suất.

Full GC song song cho G1

Bộ thu hồi rác Garbage-First (G1), trở thành mặc định trong Java 9, đã nhận được một nâng cấp trong Java 10. Full GC (thu hồi rác) cho G1 bây giờ là song song, có thể giảm đáng kể thời gian dừng trên các heap lớn.

Mặc dù bạn có thể không tương tác trực tiếp với tính năng này trong mã của mình, nhưng điều tốt là biết rằng các ứng dụng Java của bạn có thể chạy nhanh hơn và hiệu quả hơn.

Chia Sẻ Dữ Liệu Lớp Ứng Dụng

Java 10 đã mở rộng tính năng Chia Sẻ Dữ Liệu Lớp (CDS) hiện có để cho phép các lớp ứng dụng được đặt trong档案 chia sẻ. Điều này có thể cải thiện thời gian khởi động và giảm足迹 bộ nhớ, đặc biệt khi nhiều JVM đang chạy cùng một ứng dụng trên cùng một máy.

Để sử dụng tính năng này, bạn cần chạy ứng dụng của mình với các tham số JVM cụ thể. Dưới đây là một ví dụ:

# Bước 1: Tạo một档案 chia sẻ
java -Xshare:dump -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.lst -cp myapp.jar MyApp

# Bước 2: Chạy ứng dụng sử dụng档案 chia sẻ
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=classes.jsa -cp myapp.jar MyApp

Tính năng này đặc biệt hữu ích cho các microservices và ứng dụng dựa trên container nơi thời gian khởi động nhanh là rất quan trọng.

Kết Luận

Java 10, mặc dù là một phiên bản nhỏ, đã mang lại một số tính năng giá trị có thể cải thiện trải nghiệm lập mã của bạn. Từ sự tiện lợi của phán định loại biến cục bộ đến cải tiến hiệu suất với full GC song song cho G1 và chia sẻ dữ liệu lớp ứng dụng, các tính năng này đóng góp vào việc làm cho Java trở thành một ngôn ngữ hiệu quả và thân thiện với người phát triển hơn.

Nhớ rằng, cách tốt nhất để học các tính năng này là thực hành. Hãy thử tích hợp chúng vào các dự án của bạn, và bạn sẽ sớm thấy cách chúng có thể cải thiện mã của bạn. Chúc mừng coding, và mong hành trình Java của bạn đầy những phát hiện thú vị!

Credits: Image by storyset