• Home
  • All about Japan
  • 5 Tính năng hàng đầu trên Java 17. Không biết là không được đâu!

5 Tính năng hàng đầu trên Java 17. Không biết là không được đâu!


Thay đổi là điều duy nhất bất biến và theo Thuyết tiến hoá của Darwin, cá thể thích nghi với thế giới đang ngày càng phát triển sẽ có khả năng sinh tồn lâu dài. Có vẻ như lý thuyết này cũng đúng với Java, vì nó liên tục phát triển và phục vụ trong hơn hai thập kỷ. 





Từ JDK 1.0 đến Java 17 (LTS), Java đã trải qua một chặng đường dài. Java 17 là bản phát hành hỗ trợ dài hạn (LTS) mới nhất cho nền tảng SE, được phát hành vào ngày 15 tháng 9 năm 2021 và có một gói tính năng mà chúng ta không nên bỏ qua nếu chưa tự tay khám phá.





Việc bổ sung tính năng trong bất kỳ ngôn ngữ lập trình nào sẽ cải thiện hiệu suất của nó và do đó giúp cho code phức tạp trở nên dễ dàng. Chẳng hạn, C# ban đầu là một bản sao của Java nhưng việc thêm nhiều tính năng hơn vào nó đã sinh ra C#. 





Mặc dù có nhiều tính năng được giới thiệu trong Java 17, nhưng trong bài viết này, chúng ta sẽ thảo luận về…





5 Tính năng hàng đầu của Java 17










Dừng lại chút nào, nếu bạn đang #open_to_work, thử nghía qua các công việc đang tuyển trên Gamba nhé. Vào LINK NÀY để xem các job cần đến kỹ năng về Java hoặc scan QR Code ở bên dưới nhé.





Xem và ứng tuyển các job Java
Xem và ứng tuyển các job Java









1. Hạn chế triển khai với các Sealed classes và Giao diện





Sealed class là một tính năng xem trước trong JDK 15 và giờ đây đã trở thành một tính năng hoàn chỉnh trong JDK 17. 





Khi tính kế thừa (inheritance) được giới thiệu, mọi người đã có nhiều ý kiến ​​trái chiều vì nó không hạn chế số lượng triển khai. Các sealed class chấm dứt điều này vì đây là một tính năng mà người ta có thể hạn chế việc triển khai. 





Để giải quyết vấn đề, sealed class cho chúng ta đặc quyền kiểm soát những lớp hoặc mô hình nào có thể triển khai hoặc mở rộng giao diện / lớp đó tương ứng. Nó đại diện cho các hệ thống phân cấp lớp bị hạn chế cung cấp quyền kiểm soát đối với tính kế thừa. 





Đối với một sealed class, tất cả các lớp con trực tiếp cần phải được biết tại thời điểm biên dịch và ứng dụng khách bên thứ ba không thể mở rộng sealed class trong code của chúng. 





Để tạo một lớp Java, một sealed Java class, cứ thêm sealed modifier vào khai báo của nó và từ khóa cho phép được đặt để chỉ ra các lớp được phép đối với sealed class đã cho.





Lớp niêm phong Fruit chỉ định ba lớp con được phép, Square, Rectangle, và Circle:










package com.geeksforgeeks.example.figures

public sealed class Shape permits, Square, Rectangle, Circle { }









2. Sử dụng Null trong Switch Case hiện đã hợp lệ





Trước đây, việc giữ biểu thức bộ chọn là null trong câu lệnh chuyển đổi và biểu thức được sử dụng để ném NullPointerException (NPE, một ngoại lệ xảy ra khi lập trình viên tham chiếu đến đối tượng nhưng nó không có vị trí bộ nhớ) và về cơ bản chúng ta phải ném Null Pointer Exception vào phía an toàn hơn. 





Để giải quyết vấn đề này, Java 17 đã đưa ra một tính năng mà trong đó chúng ta có thể đặt null làm biểu thức bộ chọn (selector expression) trong biểu thức switch case. Hãy xem ví dụ dưới đây, nơi chúng ta có thể chuyển null làm biểu thức bộ chọn.










switch(checkNumber) {

case 1,7 -> System.out.println(“odd number”) ;

case 2,8 -> System.out.println(“even number”) ;

case null -> System.out.println(“Not defined”) ;

default -> System.out.println(“not a number”) ;
}









Ở đây, biến checkNumber lấy một số làm đầu vào. Nếu null được truyền dưới dạng đầu vào, thì “Không được định nghĩa” được hiển thị dưới dạng đầu ra. 





Lưu ý rằng, đối với trường hợp 1,7 và trường hợp 2,8, các số chẵn và lẻ khác cũng sẽ được sử dụng trong biểu thức bộ chọn để mã hoạt động đúng. Chỉ một số ít được thực hiện để duy trì tính đơn giản của ví dụ.





3. Chấm dứt việc đoán nguyên nhân của NPE





Có thể nó hoạt động với các danh sách được liên kết hoặc chỉ một đoạn mã có tham chiếu đến một đối tượng, luôn có nguy cơ tham chiếu đến một đối tượng rỗng có thể khiến mọi thứ trở nên tồi tệ nếu không được xử lý tốt. 





Debugging và nhật ký Java có thể hữu ích nhưng bản thân debugging là một nhiệm vụ mất thời gian và nhật ký java không tốt trong việc cung cấp thông tin chi tiết về đối tượng thủ phạm đã gây ra NullPointerException. 





Ở đây, tính năng hướng dẫn NullPointerException của Java 17 thực sự là một người bạn vì nó cung cấp tên chính xác của biến null từ stack trace (báo cáo) của ngoại lệ. 





Do đó, tính năng này giúp chúng ta tránh khỏi rắc rối khi gỡ lỗi và kết thúc trò chơi mò mẫm tìm ra con trỏ không có giá trị.





4. Định nghĩa lại các biểu thức câu lệnh Switch (switch statement)





Quên một dấu ngắt giữa nhiều dòng câu lệnh switch-case hoàn toàn không phải là điều hay ho gì. Hơn nữa, mô hình case-break-case-break dường như không phải là một thỏa thuận tốt khi xử lý nhiều switch case. 





Nhưng giờ thì chúng ta không cần phải break với việc sử dụng break thường xuyên nữa! Java đã giải quyết mối lo ngại này và ở đây chúng ta trình bày các biểu thức câu lệnh chuyển đổi mới trong Java 17. 





Các biểu thức chuyển đổi mới ít bị lỗi hơn vì nó sạch và đơn giản hơn. Việc sử dụng các biểu tượng mũi tên không chỉ loại bỏ chức năng không chạy mà còn làm cho nó dễ đọc hơn và dễ gỡ lỗi hơn.





Chúng ta có thể đưa vào nhiều hơn một giá trị trong cùng một khối bằng dấu phẩy phân tách chúng. 





Một trong những tính năng quan trọng là việc giới thiệu yield keyword. Trong đoạn code, khi thực thi câu lệnh mặc định, System.out.println() sẽ thực thi và biến identifyTyres sẽ kết thúc bằng “Unknown vehicle” vì đây là kết quả mặc định có nghĩa là mang lại.










String identifyTyres = switch (vehicle) {  

case Car -> “four”;

case Bike, Cycle -> “two”;

case Autorickshaw -> “three”;

default -> { System.out.println(“The vehicle could not be found.”);

yield “Unknown Vehicle”;

};









5. Giảm dòng có với Lớp bản ghi (Record classes)





Các record class đã được xem trước trong Java 14. Mã POJO phức tạp và xấu nhất trông đẹp hơn khi được triển khai với Bản ghi. Cả hai đều bất biến và cuối cùng. Các trường của Bản ghi không thể thay đổi sau khi tạo và phần mở rộng của lớp Bản ghi cũng không được phép. Chúng chính là các lớp chỉ chứa dữ liệu quản lý mã soạn sẵn của POJO. 





Bản ghi rất hữu ích bởi tất cả những gì chúng ta muốn là tạm thời giữ dữ liệu không thay đổi. 





Trong đoạn mã, Dữ liệu là một bản ghi và a và b được gọi là các thành phần của bản ghi Dữ liệu. Khi định nghĩamột bản ghi, chúng ta nhận được một phương thức equals(), phương thức hashcode() đã được triển khai và triển khai phương thức toString() để in các thành phần bản ghi cùng với tên thành phần.










record Data(long a, long b) { }










Dữ liệu Bản ghi ở trên tương đương với các dòng mã sau:











public final class Data {

private final long a;

private final long b;

Public Data(long a, long b) {

this.a = a;

this.b = b;

}

long a() { return this.a; }

long b() { return this.b; }

// Implementation of equals() and hashCode(), which specify

public boolean equals…

public int hashCode…

// An implementation of toString() that returns a string

public String toString() {…}

}










Trên đây là 5 tính năng hàng đầu của Java 17 LTE.





Hãy thừa nhận rằng chúng ta luôn quan tâm đến các tính năng mới, có thể là điện thoại di động, tivi, máy giặt, v.v. Java cũng không kém trong trường hợp này và nó luôn khiến chúng ta ngạc nhiên với những cải tiến và giới thiệu các tính năng mới. 





Việc thử nghiệm các tính năng mới trong mã Java không chỉ nâng cao kiến ​​thức của chúng tôi trong lĩnh vực Java mà còn giúp chúng tôi có động lực học hỏi và nâng cao kỹ năng bản thân. Java 17 LTE là một điểm cộng lớn vì các tính năng này có thể chấp nhận được và giúp các nhà phát triển Java thực hiện các tác vụ dễ dàng hơn.





Tham khảo: GeeksforGeeks