1. Lịch sử các phiên bản Java

Lịch sử của Java bắt đầu vào năm 1991, khi một nhóm lập trình viên của Sun quyết định tạo ra một ngôn ngữ cho các thiết bị nhỏ: điều khiển từ xa của TV, máy pha cà phê, lò nướng bánh, thẻ ngân hàng, v.v.

Các nhà sản xuất các thiết bị này đã sử dụng các bộ xử lý rất khác nhau để điều khiển sản phẩm của họ, do đó, việc gắn với kiến ​​trúc của một bộ xử lý hoặc HĐH cụ thể trở nên rất quan trọng.

Những người tạo ra Java đã quyết định chia vấn đề thành hai phần: Các chương trình của họ sẽ không được biên dịch thành mã máy cho một bộ xử lý cụ thể mà thành một mã trung gian đặc biệt. Đổi lại, mã trung gian đó sẽ được thực thi bởi một chương trình đặc biệt gọi là máy ảo .

Hầu hết các lập trình viên coi máy tính là một cỗ máy.

Hấp dẫn.

C++ được lấy làm nền tảng cho ngôn ngữ Java và đã được đơn giản hóa và tiêu chuẩn hóa rất nhiều. Nếu C++ cho phép bạn làm điều gì đó theo 10 cách, thì Java chỉ giữ lại một trong số đó. Theo một cách nào đó, nó giống như sự chuyển đổi từ chữ tượng hình sang bảng chữ cái.

Phiên bản đầu tiên của Java được phát hành vào năm 1996. Kể từ thời điểm đó, Java bắt đầu cuộc diễu hành khải hoàn trên khắp thế giới, điều này đã kích thích sự phát triển và phát triển của chính ngôn ngữ này. Ngày nay, hàng triệu thư viện và hàng tỷ dòng mã được viết bằng Java và các phiên bản Java mới được phát hành 6 tháng một lần:

Tên Năm Số lớp
JDK 1.0 1996 211
JDK 1.1 1997 477
J2SE 1.2 1998 1.524
J2SE 1.3 2000 1.840
J2SE 1.4 2002 2,723
J2SE 5.0 2004 3,279
Java SE 6 2006 3,793
Java SE 7 2011 4,024
JavaSE 8 2014 4.240
Java SE 9 2017 6,005
Java SE 10 2018 6.002
Java SE 11 2018 4,411
Java SE 12 2019 4,433
Java SE 13 2019 4,515

Mặc dù các phiên bản của Java được phát hành thường xuyên, nhưng không phải tất cả chúng đều có ý nghĩa như nhau đối với các lập trình viên: Java đã phát triển phù hợp và bắt đầu.


2.Java 2

Bước nhảy vọt đầu tiên xảy ra với việc phát hành JDK 1.2. Nó có nhiều đổi mới đến nỗi những người tạo ra Java đã đổi tên nó thành Java 2 Platform Standard Edition hay viết tắt là J2SE 1.2.

Những đổi mới chính là:

  • strictfptừ khóa
  • Thư viện Swing để làm việc với đồ họa
  • Trình biên dịch JIT, giúp tăng tốc thực thi các chương trình Java
  • Một bộ sưu tập khổng lồ
  • Hỗ trợ Unicode đầy đủ: tiếng Nhật, tiếng Trung và tiếng Hàn.

Ngày nay, những đổi mới này dường như không quá lớn, nhưng mọi dự án lớn đều phát triển từ một dự án nhỏ. Java sẽ không phổ biến như ngày nay nếu một nhóm nhỏ các lập trình viên không tiếp tục cải tiến ngôn ngữ này 20 năm trước.


3.Java 5

JDK 1.5 được phát hành vào tháng 9 năm 2004. Nó cũng giới thiệu rất nhiều cải tiến, vì vậy nó không thể không xứng đáng với một cái tên mới: thay vì các phiên bản 1.5, 1.6 và 1.7, họ quyết định sử dụng 5.0, 6.0 và 7.0. Vì vậy, tên đầy đủ của JDK 1.5 là Java 2 Standard Edition 5.0

Bản cập nhật này bao gồm những thứ mà nếu không có nó thì sự phát triển xa hơn của ngôn ngữ sẽ không thể thực hiện được.

Chú thích . Một nửa số khung hiện đại chính được xây dựng trên các chú thích, từ Spring và Hibernate đến JUnit.

Thuốc generic . Generics đã đưa sức mạnh của các bộ sưu tập (và nhiều hơn nữa) lên một tầm cao mới. Mã đã trở nên đơn giản hơn, nhỏ gọn hơn và an toàn hơn.

Autoboxing/unboxing là chuyển đổi tự động giữa các loại nguyên thủy và các loại trình bao bọc của chúng. Điều này làm cho việc viết và đọc mã trở nên dễ dàng hơn nhiều, đồng thời làm cho các bộ sưu tập trở nên phổ biến hơn.

Vòng foreachlặp hiện chiếm ít nhất một nửa số vòng lặp mà các lập trình viên viết. Và, tất nhiên, nó không thể thiếu khi làm việc với các bộ sưu tập.

Enum là một tính năng mới thú vị khác . Nó cho phép nhiều thứ được đơn giản hóa một cách đẹp đẽ.

Đây không phải là tất cả những đổi mới: hàng trăm lớp mới đã được thêm vào. Điều quan trọng là chúng chỉ là những đổi mới phù hợp và đã tạo ra một động lực mạnh mẽ khác cho sự phổ biến của Java.


4.Java6

Java 6 được nhớ đến với một số lượng lớn các cải tiến nhỏ và việc loại bỏ số 2 trong tên: nó không còn là "Java 2 Standard Edition 6.0" mà chỉ đơn giản là "Java Standard Edition 6.0".

Dưới đây là một số đổi mới thú vị:

API Trình biên dịch Java giúp có thể gọi trình biên dịch Java trực tiếp từ mã. Điều đó có nghĩa là chương trình của bạn bây giờ có thể tạo văn bản đại diện cho mã lớp, biên dịch nó bằng cách gọi các phương thức của API Trình biên dịch Java và sau đó ngay lập tức bắt đầu gọi các phương thức của lớp đã biên dịch. Có toàn bộ các lĩnh vực phát triển mà khả năng này đơn giản hóa rất nhiều cuộc sống.

Có thể thực thi JavaScript trực tiếp bên trong chương trình Java. Tính năng này xuất hiện vì JavaSE 6 bao gồm công cụ JavaScript Rhino.


5.Java 7

Java 7 được phát hành vào tháng 7 năm 2011. Lẽ ra phải có nhiều cải tiến trong đó, nhưng các lập trình viên chỉ bổ sung được một phần nhỏ so với kế hoạch. Đặc biệt, họ đã thêm những thứ như:

Một thư viện mới để làm việc với đầu vào và đầu ra dữ liệu. Được gọi là API Đầu ra Đầu vào Mới , nó nằm trong java.niogói.

Suy luận kiểu tự động của trình biên dịch Java tại thời điểm biên dịch cho phép các lập trình viên viết ít mã hơn. Trình biên dịch trở nên thông minh hơn và đó mới chỉ là bước khởi đầu.

Câu lệnh chuyển đổi đã đạt được khả năng sử dụng các chuỗi làm giá trị trường hợp.

Quản lý tài nguyên tự động cũng được cải thiện đáng kể: Với try-with-resourcescấu trúc, một chương trình Java có thể đóng các luồng dữ liệu cho bạn khi chúng không còn cần thiết.

Có nhiều thay đổi khác, nhưng chúng không quá quan trọng ở giai đoạn học Java hiện tại của chúng ta.


6. Java8

Java 8 ra mắt vào tháng 3 năm 2014 và là bản cập nhật mạnh nhất gần đây của Java.

Trên hết, các lập trình viên nhớ nó vì nó bổ sung các biểu thức lambda và giao diện chức năng ( @FunctionalInterfacechú thích). Chúng tôi sẽ kiểm tra chúng ở Cấp độ 21. Mã của bạn sẽ không bao giờ giống như cũ nữa.

Các luồng cũng được thêm vào cho các bộ sưu tập, kết hợp với các biểu thức lambda, giúp viết mã gọn gàng hơn nhiều. Mặc dù không phải lúc nào cũng dễ đọc hơn nhiều.

Hấp dẫn.

Và thay đổi lớn thứ ba là việc Java 8 giới thiệu một API hoàn toàn mới để làm việc với ngày và giờ — API Ngày Giờ . Chúng tôi sẽ nghiên cứu nó trong tương lai gần.


7. Java 9

Java 9 được phát hành vào tháng 9 năm 2017. Kể từ thời điểm đó, những người tạo ra Java đã quyết định phát hành các phiên bản mới thường xuyên hơn — sáu tháng một lần. Có lẽ họ đã bị ấn tượng bởi cách tiếp cận được các nhà phát triển trình duyệt Google Chrome áp dụng.

Bản phát hành Java 9 tập trung nhiều hơn vào phần bên trong của máy Java. Điều quan trọng nhất mà nó mang lại cho các lập trình viên bình thường là khả năng chia chương trình thành các mô-đun. Điều này rất thuận tiện khi bạn có hàng chục nghìn lớp hoặc khi mã của bạn tự động hủy tải các plugin.

Nhưng nó có lẽ sẽ ít được sử dụng cho chúng ta trong tương lai gần.


8. Java 11

Sáu tháng sau khi phát hành Java 9, Java 10 ra mắt và sáu tháng sau, Java 11 ra mắt.

Rất nhiều cải tiến nhỏ đã được thực hiện trong thời gian này, nhưng hầu như bạn sẽ chỉ nhớ hai cải tiến:

Nó đã thêm hỗ trợ cho Unicode 10. Giờ đây, bạn có thể sử dụng biểu tượng cảm xúc trong các chương trình Java của mình. Bạn có thể làm việc với chúng giống như cách bạn làm việc với kiểu boolean:

Loại suy luận đã được cải thiện và vartừ khóa mà bạn chắc chắn sẽ thích đã xuất hiện.

Bây giờ bạn có thể viết như sau:

var str = "Hello";

Và trình biên dịch chuyển đổi nó thành:

String str = "Hello";

Nhưng cũng có một số mất mát. Những người tạo ra Java đã loại bỏ các thư viện như JavaFX, Java EE và CORBA khỏi JDK 11.


9. Tầm quan trọng của tính tương thích

Khi một phiên bản mới được phát hành, các lập trình viên thường muốn bắt đầu lại từ đầu. Rốt cuộc, ai muốn sửa một loạt lỗi cũ khi họ hoàn toàn khẳng định rằng mã nên được viết ngay từ đầu như thế nào?

Nhưng lịch sử không ủng hộ cách tiếp cận như vậy. Mỗi khi các lập trình viên phát hành phiên bản mới của chương trình, 90% người dùng của nó đang sử dụng phiên bản cũ. Họ có thể sử dụng hoặc bỏ qua các tính năng mới của chương trình, nhưng điều mà người dùng ghét là khi thứ từng hoạt động tốt ngừng hoạt động.

Nhiều sản phẩm tuyệt vời đã chết khi các lập trình viên phát hành phiên bản mới không tương thích. Hoặc đơn giản là khi họ thực hiện những thay đổi lớn. Ví dụ, ý tưởng bỏ nút Start trong Windows 8 không hấp dẫn người dùng. Việc phát hành Windows 10 đã mang lại một nửa những gì đã bị loại bỏ trong Windows 8.

Hơn nữa, Windows cho phép bạn chạy các chương trình được viết cách đây 20 năm cho Windows 95 hoặc thậm chí được viết cách đây 30 năm cho MS DOS 3.0 — chúng sẽ hoạt động. Đây là một trong những lý do tại sao Windows vẫn phổ biến.

Và Java sẽ không phổ biến như bây giờ nếu các nhà phát triển của nó không quan tâm đến khả năng tương thích. Bất cứ khi nào có phiên bản mới của máy Java, phiên bản SDK mới hoặc thay đổi lớn đối với các lớp, tất cả mã Java được viết từ tháng 1 năm 1996 vẫn tiếp tục hoạt động.

Điều này thường đạt được bằng cách chỉ thêm các phương thức, lớp và gói mới mà không xóa bất kỳ thứ gì. Cách tiếp cận này có ưu và nhược điểm của nó.

Một mặt, Java kéo theo một đống hành lý ở dạng mã cũ, không tối ưu và không cần thiết. Mặt khác, dự án của bạn được viết bằng Java 11 luôn có thể sử dụng thư viện được viết bằng Java 8 sử dụng các thư viện được viết bằng Java 5 và Java 2. Nhóm mã hỗn hợp này sẽ hoạt động tốt.

Với ngôn ngữ C++, các thư viện được biên dịch cho cả nền tảng 32 bit và 64 bit không thể được sử dụng trong cùng một dự án. Và bạn sẽ vô cùng đau đầu nếu đột nhiên phát hiện ra rằng charkiểu được sử dụng trong một thư viện sử dụng một byte, trong khi một thư viện khác sử dụng hai byte.


10. Không dùng nữa

Vì vậy, những người tạo ra Java đã quyết định không xóa bất kỳ thứ gì mà chỉ thêm các lớp và gói mới. Nhưng làm thế nào để họ cho các lập trình viên biết rằng có một giải pháp thay thế xứng đáng mới cho một giải pháp dưới mức tối ưu hiện có?

Để làm điều này, họ đã đưa ra @Deprecatedchú thích.

Nếu một số phương thức hoặc lớp không được dùng nữa, thì chú thích này sẽ được thêm vào bên cạnh phần khai báo của nó. Nó có nghĩa là các lập trình viên không được khuyến khích sử dụng mã.

Bạn vẫn có thể sử dụng một lớp hoặc phương thức không dùng nữa, nhưng nó không được khuyến khích.

Và mọi người thường làm những điều không được khuyến khích như thế nào? Hầu như luôn luôn 🙂

Nhiều lớp đã không còn được dùng nữa trong 20 năm — chúng đã được sử dụng và vẫn đang được sử dụng. Mọi người đã quen thuộc với họ hoặc họ chỉ thuận tiện. Nhưng có rủi ro là chúng sẽ bị xóa vào một lúc nào đó, vì vậy tốt hơn là không nên sử dụng chúng.

Tất cả các IDE hiện đại, bao gồm cả IntelliJ IDEA, đều có thể xử lý @Deprecatedchú thích. Tên của các lớp và phương thức không dùng nữa được hiển thị bằng cách sử dụng định dạng gạch ngang . Một cái gì đó như thế này:

Date date = new Date();
int day = date.getDay();

Các lớp không dùng nữa rất phổ biến và thường được tìm thấy trong mã, vì vậy chúng ta sẽ sớm xem xét một số trong số chúng.