Ngôn ngữ lập trình Java

Java là một ngôn ngữ lập trình hướng đối tượng (OOP) và dựa trên các lớp (class). Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy.

James Gosling, Mike Sheridan và Patrick Naughton khởi xướng dự án ngôn ngữ Java vào tháng 6 năm 1991. Java ban đầu được thiết kế cho truyền hình tương tác, nhưng nó quá tiên tiến đối với ngành truyền hình cáp kỹ thuật số vào thời điểm đó. Ban đầu ngôn ngữ này được gọi là Oak theo tên một cây sồi bên ngoài văn phòng của Gosling. Sau đó, dự án có tên là Green và cuối cùng được đổi tên thành Java, từ cà phê Java, loại cà phê đến từ Indonesia. Gosling đã thiết kế Java với cú pháp kiểu C/C++ mà các lập trình viên hệ thống và ứng dụng đã quen thuộc.

Sun Microsystems đã phát hành bản triển khai công khai đầu tiên dưới dạng Java 1.0 vào năm 1996. Nó hứa hẹn khả năng Viết một lần, Chạy mọi nơi (WORA), cung cấp thời gian chạy miễn phí trên các nền tảng phổ biến. Khá an toàn và có tính năng bảo mật có thể định cấu hình, nó cho phép các hạn chế truy cập mạng và tệp. Các trình duyệt web lớn đã sớm kết hợp khả năng chạy các ứng dụng Java trong các trang web và Java nhanh chóng trở nên phổ biến. Trình biên dịch Java 1.0 được viết lại bằng Java bởi Arthur van Hoff để tuân thủ nghiêm ngặt đặc tả ngôn ngữ Java 1.0. Với sự ra đời của Java 2 (ban đầu được phát hành với tên gọi J2SE 1.2 vào tháng 12 năm 1998 – 1999), các phiên bản mới có nhiều cấu hình được xây dựng cho các loại nền tảng khác nhau. J2EE bao gồm các công nghệ và API cho các ứng dụng doanh nghiệp thường chạy trong môi trường máy chủ, trong khi các API đặc trưng của J2ME được tối ưu hóa cho các ứng dụng di động. Phiên bản dành cho máy tính để bàn được đổi tên thành J2SE. Năm 2006, vì mục đích tiếp thị, Sun đã đổi tên các phiên bản J2 mới lần lượt là Java EE, Java ME và Java SE.

Năm 1997, Sun Microsystems đã tiếp cận cơ quan tiêu chuẩn ISO/IEC JTC 1 và sau đó là Ecma International để chính thức hóa Java, nhưng sau đó công ty nhanh chóng rút khỏi quy trình này. Java vẫn là một tiêu chuẩn thực tế, được kiểm soát thông qua Quy trình cộng đồng Java. Đã có lúc, Sun cung cấp hầu hết các triển khai Java của mình mà không tính phí, bất chấp trạng thái phần mềm độc quyền của họ. Sun đã tạo ra doanh thu từ Java thông qua việc bán giấy phép cho các sản phẩm chuyên biệt như Hệ thống Doanh nghiệp Java.

Vào ngày 13 tháng 11 năm 2006, Sun đã phát hành phần lớn máy ảo Java (JVM) của mình dưới dạng phần mềm mã nguồn mở và miễn phí (FOSS), theo các điều khoản của Giấy phép Công cộng GNU (GPL). Vào ngày 8 tháng 5 năm 2007, Sun đã hoàn thành quá trình, cung cấp tất cả mã cốt lõi của JVM theo các điều khoản phân phối phần mềm miễn phí / nguồn mở, ngoại trừ một phần nhỏ mã mà Sun không giữ bản quyền.

Phó chủ tịch Rich Green của Sun nói rằng vai trò lý tưởng của Sun đối với Java là như một nhà truyền giáo. Sau khi Tập đoàn Oracle mua lại Sun Microsystems vào năm tháng 10 năm 2009, Oracle đã tự mô tả mình là người quản lý công nghệ Java với cam kết không ngừng thúc đẩy cộng đồng tham gia và minh bạch. Điều này không ngăn được Oracle đệ đơn kiện Google ngay sau đó vì đã sử dụng Java bên trong Android SDK.

Ngày 2 tháng 4 năm 2010, James Gosling từ chức tại Oracle.

Vào tháng 1 năm 2016, Oracle đã thông báo rằng môi trường thời gian chạy Java dựa trên JDK 9 sẽ ngừng cung cấp plugin trình duyệt.

Phần mềm Java chạy trên mọi thứ, từ máy tính xách tay đến trung tâm dữ liệu, bảng điều khiển trò chơi đến siêu máy tính khoa học.

Tính đến năm 2019 Java là một trong những ngôn ngữ lập trình phổ biến nhất được sử dụng theo GitHub, đặc biệt cho các ứng dụng web máy khách-máy chủ, với 9 triệu nhà phát triển đã được báo cáo.

Tháng 9 năm 2020, phiên bản mới nhất là Java 15, với Java 11, một phiên bản hỗ trợ dài hạn (LTS), được phát hành vào 25 tháng 9 năm 2018. Oracle phát hành bản cập nhật miễn phí cho công chúng với phiên bản kế thừa Java 8 LTS vào tháng 1 năm 2019 cho mục đích sử dụng thương mại, mặc dù nếu không nó sẽ vẫn hỗ trợ Java 8 với các bản cập nhật công khai cho mục đích sử dụng cá nhân vô thời hạn. Các nhà cung cấp khác đã bắt đầu cung cấp các bản miễn phí của OpenJDK 8 và 11 mà vẫn đang nhận được bảo mật và các nâng cấp khác.

Oracle (và những công ty khác) khuyên người dùng nên gỡ cài đặt các phiên bản Java đã lỗi thời vì những rủi ro nghiêm trọng do các vấn đề bảo mật chưa được giải quyết. Vì Java 9, 10, 12, 13 và 14 không còn được hỗ trợ, Oracle khuyên người dùng nên chuyển ngay sang phiên bản mới nhất (hiện tại là Java 15) hoặc bản phát hành LTS.

Là một ngôn ngữ lập trình hướng đối tượng vì vậy Java cũng có 4 đặc điểm chung sau đây:

  • Tính trừu tượng (Abstraction): Là tiến trình xác định và nhóm các thuộc tính, các hành động liên quan đến một thực thể đặc thù, xét trong mối tương quan với ứng dụng đang phát triển.
  • Tính đa hình (Polymorphism): Cho phép một phương thức có các tác động khác nhau trên nhiều loại đối tượng khác nhau. Với tính đa hình, nếu cùng một phương thức ứng dụng cho các đối tượng thuộc các lớp khác nhau thì nó đưa đến những kết quả khác nhau. Bản chất của sự việc chính là phương thức này bao gồm cùng một số lượng các tham số.
  • Tính kế thừa (Inheritance): Đều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại.
  • Tính đóng gói (Encapsulation): Là tiến trình che giấu việc thực thi những chi tiết của một đối tượng đối với người sử dụng đối tượng ấy.

Ngôn ngữ lập trình java có các tính năng sau:

Hướng đối tượng

Trong quá trình tạo ra một ngôn ngữ mới phục vụ cho mục đích chạy được trên nhiều nền tảng, các kỹ sư của Sun MicroSystem muốn tạo ra một ngôn ngữ dễ học và quen thuộc với đa số người lập trình. Vì vậy họ đã sử dụng lại các cú pháp của C và C++.

Tuy nhiên, trong Java thao tác với con trỏ bị lược bỏ nhằm đảo bảo tính an toàn và dễ sử dụng hơn. Các thao tác overload, goto hay các cấu trúc như struct và union cũng được loại bỏ khỏi Java.

Nền tảng độc lập

Một chương trình viết bằng ngôn ngữ Java có thể chạy tốt ở nhiều môi trường khác nhau. Gọi là khả năng “cross-platform”. Khả năng độc lập phần cứng và hệ điều hành được thể hiện ở 2 cấp độ là cấp độ mã nguồn và cấp độ nhị phân.

Ở cấp độ mã nguồn: Kiểu dữ liệu trong Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau. Java có riêng một bộ thư viện để hỗ trợ vấn đề này. Chương trình viết bằng ngôn ngữ Java có thể biên dịch trên nhiều loại máy khác nhau mà không gặp lỗi.

Ở cấp độ nhị phân: Một mã biên dịch có thể chạy trên nhiều nền tảng khác nhau mà không cần dịch lại mã nguồn. Tuy nhiên cần có Java Virtual Machine để thông dịch đoạn mã này.

Đơn giản

Java là một phiên bản đơn giản của ngôn ngữ C ++, và do đó, nó cũng rất quen thuộc. Hơn nữa, nó loại bỏ tất cả các mã thừa và không đáng tin cậy. Không hỗ trợ con trỏ, tệp tiêu đề bộ xử lý trước, nạp chồng toán tử và nhiều kế thừa trong Java. Điều này làm cho Java dễ dàng hơn so với C ++.

An toàn

  • Ngôn ngữ lập trình Java yêu cầu chặt chẽ về kiểu dữ liệu.
  • Dữ liệu phải được khai báo tường minh.
  • Không sử dụng con trỏ và các phép toán với con trỏ.
  • Java kiểm soát chặt chẽ việc truy nhập đến mảng, chuỗi. Không cho phép sử dụng các kỹ thuật tràn. Do đó các truy nhập sẽ không vượt quá kích thước của mảng hoặc chuỗi.
  • Quá trình cấp phát và giải phóng bộ nhớ được thực hiện tự động.
  • Cơ chế xử lý lỗi giúp việc xử lý và phục hồi lỗi dễ dàng hơn.

Bảo mật

  • Java không hỗ trợ các con trỏ giúp Java mạnh mẽ và an toàn.
  • Tất cả các chương trình Java đều chạy bên trong hộp cát của máy ảo.
  • Môi trường thời gian chạy Java (JRE) có một trình nạp lớp để tải động các lớp vào Máy ảo Java.
  • Trình xác minh Bytecode của Java kiểm tra các phần mã để kiểm tra mã bất hợp pháp có thể bỏ qua quyền truy cập.
  • Trình quản lý bảo mật của Java quyết định tài nguyên nào sẽ phân bổ cho một lớp. Quyền truy cập như vậy bao gồm đọc và ghi vào tệp.
  • Java cũng giúp phát triển các hệ thống không có vi rút.

Kiến trúc - trung lập

Trình biên dịch Java tạo ra định dạng tệp đối tượng kiến trúc trung lập, làm cho mã biên dịch được thực thi trên nhiều bộ vi xử lý, với sự hiện diện của hệ điều hành Java.

Portable

Là kiến trúc tập trung và không có khía cạnh thực hiện phụ thuộc của đặc tả này làm cho Java khả chuyển. Trình biên dịch trong Java được viết bằng ANSI C, đó là một tập con POSIX.

Mạnh mẽ

Java làm nỗ lực để loại trừ các tình huống dễ bị lỗi bằng cách kiểm tra lỗi tại thời gian biên dịch và kiểm tra lỗi tại runtime.

Đa luồng

Java là một ngôn ngữ đa luồng có nghĩa là nó có thể xử lý các tác vụ khác nhau đồng thời. Java hỗ trợ các chương trình đa luồng, trong đó không cần đợi một tác vụ hoàn thành để bắt đầu một tác vụ khác. Tính năng này của Java cải thiện đáng kể hiệu suất tương tác của các ứng dụng đồ họa.

Thông dịch

Ngôn ngữ lập trình thường được chia ra làm 2 loại (tùy theo các hiện thực hóa ngôn ngữ đó) là ngôn ngữ thông dịch và ngôn ngữ biên dịch.

  • Thông dịch (Interpreter): Nó dịch từng lệnh rồi chạy từng lệnh, lần sau muốn chạy lại thì phải dịch lại.
  • Biên dịch (Compiler): Code sau khi được biên dịch sẽ tạo ra 1 file thường là .exe, và file .exe này có thể đem sử dụng lại không cần biên dịch nữa.

Ngôn ngữ lập trình Java thuộc loại ngôn ngữ thông dịch. Chính xác hơn, Java là loại ngôn ngữ vừa biên dịch vừa thông dịch. Cụ thể như sau: Khi viết mã, hệ thống tạo ra một tệp .java. Khi biên dịch mã nguồn của chương trình sẽ được biên dịch ra mã byte code. Máy ảo Java (Java Virtual Machine) sẽ thông dịch mã byte code này thành machine code  (hay native code) khi nhận được yêu cầu chạy chương trình.

Hiệu năng cao

Với việc sử dụng trình biên dịch Just-In-Time, Java cho phép thực hiện hiệu năng cao.

Phân tán

Java được thiết kế cho môi trường phân tán của Internet.

Năng động

Java là năng động hơn C hoặc C++ vì nó được thiết kế để thích nghi với môi trường đang phát triển. Các chương trình Java có thể mang một lượng lớn thông tin tại runtime mà có thể được sử dụng để xác minh và giải quyết các truy cập vào các đối tượng tại runtime.

Cấu ​​trúc của Java và các thành phần chính của nó như JRE, JVM và JDK. Sơ đồ sau đây cho thấy cấu ​​trúc của Java:

Cấu trúc và môi trường của Java. (Nguồn: t3h.com.vn)

JVM (Java Virtual Machine - Máy ảo Java)

Máy ảo Java (JVM) cung cấp một môi trường thời gian chạy trong đó bytecode thực thi. Máy ảo Java phụ thuộc vào nền tảng. JVM thực hiện các nhiệm vụ sau:

  • Tải mã.
  • Xác minh mã.
  • Thực thi mã.
  • Cung cấp môi trường thời gian chạy.

JRE(Java Runtime Environment - Môi trường thời gian chạy Java)

JRE là một tập hợp các công cụ cho phép phát triển các ứng dụng và cung cấp môi trường thời gian chạy để chạy các chương trình Java. JVM là một phần của JRE. JRE cũng phụ thuộc vào nền tảng. JRE hỗ trợ thực thi các chương trình Java và bao gồm JVM, thư viện lớp Thời gian chạy, bộ công cụ giao diện người dùng, Công nghệ triển khai, plugin Java, v.v.

JDK (Java Development Kit - Bộ phát triển Java)

Java Development Kit là một bộ cung cấp môi trường để phát triển và thực thi một chương trình Java. JDK bao gồm các công cụ phát triển nhằm cung cấp môi trường để phát triển các chương trình Java. Nó cũng chứa JRE chạy mã Java của bạn. JDK cũng chứa các tài nguyên khác như trình thông dịch / trình tải, trình biên dịch (javac), trình lưu trữ (jar) và trình tạo tài liệu (Javadoc). Các thành phần này cùng nhau giúp bạn xây dựng các chương trình Java.

Bộ phát triển Java bao gồm:

  • appletviewer (để xem các applet Java).
  • javac (trình biên dịch Java).
  • java (trình thông dịch Java).
  • javap (trình tháo gỡ Java).
  • javah (dành cho tệp tiêu đề C).
  • javadoc (để tạo tệp HTML).
  • jdb (trình gỡ lỗi Java).

Các phiên bản của Java. (Nguồn: topdev.vn)

  • Java Standard Edition (Java SE): Là một nền tảng cơ bản cho phép phát triển giao diện điều khiển, các ứng dụng mạng và các ứng dụng dạng Win Form.
  • Java Enterprise Edition (Java EE): Được xây dựng trên nền tảng Java SE, giúp phát triển các ứng dụng web, các ứng dụng ở cấp doanh nghiệp, …
  • Java Mobile Edition (Java ME): Là một nền tảng cho phép phát triển các ứng dụng nhúng vào các thiết bị điện tử như mobile,…

7.1. Ưu điểm

  • Nó là một ngôn ngữ độc lập với nền tảng vì chúng ta có thể chạy mã Java trên bất kỳ máy nào mà không cần bất kỳ phần mềm đặc biệt nào.
  • Nó là một ngôn ngữ hướng đối tượng vì các lớp và đối tượng của nó. Lập trình hướng đối tượng làm tăng khả năng phát triển mã dễ dàng và tăng hiệu quả.
  • Nó là một ngôn ngữ an toàn và lý do đằng sau sự an toàn là con trỏ, Java không sử dụng con trỏ.
  • Nó hỗ trợ đa luồng; chúng ta có thể thực hiện đồng thời nhiều chương trình.
  • Java là một ngôn ngữ mạnh mẽ vì nó có nhiều tính năng như tự động thu gom rác, không sử dụng con trỏ rõ ràng, xử lý ngoại lệ, v.v.
  • Java là một ngôn ngữ lập trình cấp cao giúp dễ học và dễ hiểu.
  • Nó cung cấp khả năng quản lý bộ nhớ hiệu quả.

7.2. Nhược điểm

  • Java là một ngôn ngữ cấp cao. Do đó Java phải xử lý các mức biên dịch và trừu tượng của một máy ảo.
  • Java thể hiện hiệu suất kém vì bộ thu gom rác, cấu hình bộ nhớ đệm sai và bế tắc giữa các quy trình.
  • Java có rất ít trình xây dựng GUI (Giao diện người dùng đồ họa) như Swing, SWT, JSF và JavaFX.
  • Cuối cùng chúng ta có thể viết những đoạn mã dài và phức tạp nếu chúng ta cố gắng thực hiện một tập hợp các hoạt động đơn giản. Điều này ảnh hưởng đến khả năng đọc của mã.

Java đã được sử dụng trong các lĩnh vực khác nhau. Ví dụ:

  • Desktop App như acrobat reader, media player, antivirus, ...
  • Web App như irctc.co.in, javatpoint.com, ...
  • Enterprise App như các ứng dụng về xử lý nghiệp vụ ngân hàng, ...
  • Thiết bị Mobile như các ứng dụng Android.
  • Hệ thống nhúng.
  • Smart Card.
  • Robot.
  • Game App.

Các ứng dụng yêu cầu tính bảo mật cao

Các ứng dụng sử dụng trong giao dịch của các ngân hàng yêu cầu tính bảo mật cao. Họ cần bảo mật tối đa thông tin tài khoản của khách hàng. Trên thế giới đã có các ngân hàng sử dụng Java để viết các hệ thống giao dịch điện tử như Goldman Sachs, Citigroup, Barclays, Standard Chartered … Ngoài viết các ứng dụng giao dịch, họ còn sử dụng Java trong việc khác như hệ thống xác nhận và kiểm toán, các dự án xử lý dữ liệu …

Ngôn ngữ lập trình Java được đánh giá là một ngôn ngữ có độ bảo mật cao. Chính vì vậy, nó thường được sử dụng vào các ứng dụng của ngành dịch vụ tài chính hay ngân hàng.

Các ứng dụng cho hệ điều hành Android

Java hỗ trợ tối đa cho hệ điều hành Android. Vì thế ngôn ngữ lập trình này được áp dụng rất nhiều vào các ứng dụng dành cho Android.. Số người sử dụng Android chiếm hơn một nửa thị phần vì vậy có thể thấy, nhu cầu sử dụng các ứng dụng là rất lớn.

Nếu trong tay bạn đang cầm một chiếc điện thoại chạy trên hệ điều hành Android thì đừng bất ngờ, bất cứ một ứng dụng nào trên đó cũng đều được hình thành và phát triển trên nền tảng Java. Chính điều này đã tạo ra cơ hội lớn cho các lập trình viên Java: nếu họ học tốt và có kỹ năng thì chắc chắn những lập trình Java sẽ không bao giờ sợ thất nghiệp.

Điện toán đám mây

Cũng giống như Internet vạn vật (IoT), điện toán đám mây là một miếng bánh béo bở mà bất kỳ công ty nào cũng muốn chiếm thị phần. Java với tính năng di động của nó sẽ là chìa khóa giúp bạn quản lý các giải pháp điện toán đám mây. Ngoài ra, Java là ngôn ngữ lập trình đa mục đích. Nó cho phép bạn làm việc trên ứng dụng di động, máy tính để bàn và ứng dụng đám mây. Ví dụ, Heroku cung cấp một nền tảng đám mây sử dụng Java. Ngoài ra, có rất nhiều PaaS giúp bạn đi sâu vào điện toán đám mây. Cả Google Cloud Platform và Microsoft Azure đều có các điều khoản để lưu trữ các ứng dụng Java và quản lý chúng một cách hiệu quả.

Không gian nhúng

Ban đầu Java được phát triển để phục vụ cho các thiết bị nhúng. Nhưng sau đó ngày càng được phát triển mở rộng ra các lĩnh vực khác. Châm ngôn “viết một lần, chạy mọi nơi” cho thấy rằng Java đang mang lại nhiều lợi ích to lớn.

Trong lĩnh vực giao dịch chứng khoán

Java có một lợi thế nữa đó là sử dụng phù hợp với các hệ thống có hiệu suất cao. Mặc dù hiệu suất có thua chút ít so với ngôn ngữ native. Nhưng bạn lại có được sự an toàn, linh động và bảo trì với tốc độ nhanh hơn.

Ngoài các ứng dụng trên thì lập trình Java còn được sử dụng trong các ứng dụng khoa học, công nghệ big data hay các công cụ phần mềm. Java là một ngôn ngữ lập trình có thể được ứng dụng trong nhiều lĩnh vực khác nhau. Bạn có thể xem xét đến điều này để thấy rằng Java là một ngôn ngữ lập trình đáng để học.

Có 4 kiểu ứng dụng chính của Java App:

Standalone App

Standalone App cũng được biết đến như Desktop App hoặc Window-based App. Để tạo ra ứng dụng kiểu này người ta thường sử dụng AWT, Swing hoặc JavaFX framework.

Web App

Web App là ứng dụng chạy trên server và tạo được các trang động. Hiện nay, servlet, jsp, struts, jsf, spring... là những công nghệ được sử dụng để tạo Web App trong java.

Enterprise App

Một ứng dụng dạng như Banking App, có lợi thế là tính bảo mật cao, cân bằng tải (load balancing) và clustering. Trong java, EJB được sử dụng để tạo các Enterprise App.

Mobile App

Mobile App là ứng dụng được tạo ra cho các thiết bị di động. Hiện nay Android và Java ME được sử dụng để chạy các ứng dụng này.

Có 4 nền tảng Java Platforms:

Java SE (Java Standard Edition)

Java SE là một nền tảng lập trình Java. Nó bao gồm các API lập trình Java như java.lang, java.io, java.net, java.util, java.sql, java.math, v.v. Nó bao gồm các chủ đề cốt lỗi như OOPs, String, Regex, Exception, Inner classes, Multithreading, I/O Stream, Networking, AWT, Swing, Reflection, Collection, v.v.

Java EE (Java Enterprise Edition)

Đây là một nền tảng doanh nghiệp chủ yếu được sử dụng để phát triển các ứng dụng web và doanh nghiệp. Nó được xây dựng trên nền tảng Java SE. Nó bao gồm các chủ đề như Servlet, JSP, Web Services, EJB, JPA , v.v.

Java ME (Java Micro Edition)

Đây là một nền tảng vi mô chủ yếu được sử dụng để phát triển các ứng dụng di động.

JavaFX

JavaFX là một nền tảng phần mềm phát triển các ứng dụng Internet phong phú (Rich Internet Applications – RIAs) có thể chạy trên nhiều loại thiết bị, nhiều hệ điều hành khác nhau. JavaFX là một giải pháp công nghệ cho GUI trên nền tảng Java nhằm tạo giao diện đồ họa người dùng dựa trên Swing và Java2D.