Recent Posts

Những tính năng mới trong java 8

-

Giới thiệu về Java 8

tinh nang moi trong java 8
java 8

2 năm rưỡi sau khi phiên bản Java 7 ra đời, ngày 18/3/2014, Oracle chính thức giới thiệu thế hệ tiếp theo- Java 8. Phiên bản mới này được xem là Java-7-hoàn-thiện-hơn bởi vì nhiều tính năng quan trọng trong Java 8 theo kế hoạch ban đầu thì thuộc về Java 7, nhưng các chậm trễ trong quá trình phát triển đã khiến Oracle quyết định ra đời Java 7 gọn nhẹ hơn, với lời hứa sẽ giới thiệu những tính năng còn thiếu trong phiên bản kế tiếp. Tuy nhiên, Java 8 hiện tại không còn hỗ trợ Windows XP, một tin không vui cho Lập trình viên nào quen thuộc với phiên bản này. Bài viết dưới đây xin giới thiệu những điểm nổi bật nhất trong phiên bản Java 8. Tuy nhiên, trước khi đến với phần chính, có một vài gợi ý sau có thể hữu ích cho bạn:
Tải về JDK™ 8 tại website của Oracle. Một khuyến cáo hiện tại từ kinh nghiệm cá nhân, bạn chỉ nên sử dụng bản x86 (32 bit) bất kể máy bạn chạy hệ điều hành 32 hay 64 bit.
Trường hợp muốn dùng IDE đầy đủ, có thể tải về NetBeans
Các đặc điểm mới nhất của Java 8 được mô tả tại ĐÂY (nhiều nội dung trong bài viết cũng tham khảo từ đây)
Trường hợp chỉ muốn chạy phiên bản mới nhất, có thể tải về JRE 8

1.Lamda Expressions


Tính năng đầu tiên, đồng thời là tính năng nổi bật nhất của Java8: hỗ trợ cú pháp Lambda,  đây dường như là cải tiến lớn nhất trong cú pháp lập trình Java kể từ thời điểm phát hành Generics  và Annotations trong Java 5.
Nó đã xóa bỏ tất cả các đoạn code rườm ra hiển nhiên. Cú pháp:
(argtype arg...) -> { return some expression.. probably using these arguments }
Áp dụng Lambda, một thread có thể được thay đổi như sau:
Runnable oldRunner = new Runnable(){
    public void run(){
        System.out.println("I am running");
    }
};
Runnable java8Runner = () ->{
    System.out.println("I am running");
};
Cú pháp Lambda trong Java cho phép tự suy luận kiểu dữ liệu. Hãy xem xét các ví dụ có sẵn sau đây:
Comparator c = (a, b) -> Integer.compare(a.length(), b.length());
Ở đây, các kiểu của a, b được suy luận thành kiểu String khi phương pháp so sánh Integer.compare được thực hiện.
Nếu bạn thành thạo ngôn ngữ Scala thì dấu “->” trong Lambdas được sử dụng để tách các khối lệnh là khá giống với dấu “=>” trong Scala.

2. Kiểu dữ liệu chung Generic

Lấy cảm hứng từ Lambdas, một tập hợp kiểu dữ liệu chung được sử dụng trong một phạm vi nhất định. Bạn không cẩn phải thực hiện ép kiểu trước khi gọi một phương thức của kiểu đó. Ví dụ:
SomeClass.method();
Có thể được gọi mà không cần quan tâm đến kiểu dữ liệu:
Kiểu dữ liệu được tự động suy luận giúp việc gọi các phương thức lồng nhau một cách tiện lợi hơn:
myCollection.sort().removeUseless().beautify();

3. Kiểu Stream Collection (java.util.stream)

Stream trở thành một iterator cho phép chạy tuần tự thông qua collection của nó. Cùng với Lambdas, đây là một tính năng đáng chú ý để xem. Bạn có thể sử dụng các stream để thực hiện các chức năng tính toán như Filter hoặc Map/reduce thông qua collection. Streams có thể chạy tuần tự hoặc song song theo ý muốn của lập trình viên. Chế độ song song được sử dụng để tích hợp, liên lạc các framework hoặc tận dụng tối đa sức mạnh của chíp đa nhân.Ví dụ:
List guys = list.getStream.collect(Collectors.toList())
cũng có thể được thực hiện song song như sau:
List guys = list.getStream.parallel().collect(Collectors.toList()
Một ví dụ khác rất tốt để thực hiện reduce một colletion thành một giá trị bằng cách gọi giải thuật reduce.
int sum = numberList.stream().reduce(0, (x, y) -> x+y);
hoặc,
int sum = numberList.stream().reduce(0, Integer::sum);

4. Giao diện chức năng (java.util.function)

Các giao diện này có chứa một số phương thức mặc định mà không cần phải được thực hiện cho phép chạy trực tiếp từ giao diện. Điều này rất hữu ích với các mã có sẵn – thay đổi giao diện không yêu cầu tất cả các Class cài đặt các phương thức mới. Điều này cũng tương tự như đặc điểm trong Scala..

5. Nashorn – Node.js trên JVM

Đây là javascript engine cho phép chúng ta chạy javascript trên một JVM. Nó tương tự như engine V8 cung cấp bởi chrome dùng để chạy Node.js. Nó tương thích với các ứng dụng Node.js trong khi đồng thời hỗ trợ các thư viện lập trình Java được gọi thông qua mã javascript chạy trên máy chủ. Thật thú vị khi nó kết hợp khả năng mở rộng và tính không đồng bộ của Node.js với tính an toàn và phổ biến rộng rãi của ngôn ngữ Java.

6. Thay đổi Date/Time (java.time)

http://download.java.net/jdk8/docs/api/java/time/package-summary.html
Date / Time API được chuyển đến gói java.time cùng với định dạng thời gian Joda.

7. Kiểu Annotations

Với Java 8 các annotation có thể được sử dụng để mô tả các kiểu dữ liệu chung.
Ví dụ:
List<@Nullable String>
Cách khai báo này là hữu ích trong một số trường hợp. Ngoài mô tả các kiểu dữ liệu chung, nó còn được sử dụng trong các hàm khởi tạo và ép kiểu chuyển đổi.
new @NonEmpty @Readonly List(myNonEmptyStringSet)
new @Interned MyObject()
 
myString = (@NonNull String) myObject;
Ngay cả trong các khai báo mảng dữ liệu:
@NotNull String[] arr;
Các thuộc tính RuntimeVisibleTypeAnnotations và RuntimeInvisibleTypeAnnotations được sử dụng để quyết định việc file .class lưu các thông tin annotations.

8. Những thay đổi tích cực khác

Reflection api được cải tiến nhẹ với sự hỗ trợ của TypeName, GenericString,…
Phương pháp String.Join () là một bổ sung tích cực. ví dụ:
String abc= String.join(" ", "Java", "8");
Trong gói Collections, các giao diện Comparator được cải tiến và bổ sung phương thức ví dụ như reversed (đảo ngược), giúp việc so sánh trở nên tuỳ biến dễ dàng trên nhiều lĩnh vực. Các thư viện khác như truy cập đồng thời và NIO cũng đã được cập nhật nhưng không có gì đáng chú ý để theo dõi và phù hợp với những thay đổi trong api.
Nhìn chung, Java8 nhận được đánh giá tốt lấy cảm hứng từ những ý tưởng tốt đẹp của Scala / Clojure cho việc cải thiện cú pháp của nó và tăng khả năng tìm kiếm.




Klik untuk melihat kode: :) =( :s :D :-D ^:D ^o^ 7:( :Q :p T_T @@, :-a :W *fck* x@