Bỏ qua để đến nội dung

Tổng quan về Java

Java là một ngôn ngữ lập trình hướng đối tượng (object-oriented), kiểu tĩnh (statically typed), được thiết kế để chạy trên nhiều nền tảng khác nhau mà không cần biên dịch lại - theo triết lý nổi tiếng “Write Once, Run Anywhere” (WORA): viết một lần, chạy ở mọi nơi.

Java ra đời năm 1995 bởi James Gosling và nhóm kỹ sư tại Sun Microsystems. Sun Microsystems sau đó được Oracle mua lại vào năm 2010, và Oracle tiếp tục phát triển Java cho đến nay. Bên cạnh đó, cộng đồng mã nguồn mở phát triển OpenJDK - bản triển khai Java mã nguồn mở mà hầu hết các bản phân phối JDK hiện nay (Oracle JDK, Eclipse Temurin, Amazon Corretto…) đều dựa trên.

Ba khái niệm này thường gây nhầm lẫn cho người mới:

  • JVM (Java Virtual Machine): máy ảo thực thi bytecode Java. Mỗi hệ điều hành (Windows, macOS, Linux) có một bản JVM riêng, nhưng bytecode mà nó chạy thì giống hệt nhau trên mọi nền tảng.
  • JRE (Java Runtime Environment): gồm JVM + các thư viện chuẩn cần thiết để chạy một chương trình Java đã biên dịch.
  • JDK (Java Development Kit): gồm JRE + các công cụ để phát triển Java (javac để biên dịch, java để chạy, debugger, javadoc…). Đây là thứ bạn cần cài đặt để viết code Java.
JDK ⊃ JRE ⊃ JVM

Khi bạn biên dịch một file .java bằng javac, kết quả không phải là mã máy (machine code) như C++, mà là bytecode (.class) - một dạng mã trung gian.

HelloWorld.java --(javac)--> HelloWorld.class (bytecode) --(JVM)--> chạy trên Windows/macOS/Linux

JVM trên từng hệ điều hành sẽ đọc và thực thi bytecode này. Đây chính là cơ chế giúp cùng một file .class chạy được trên bất kỳ máy nào có cài JVM, mà không cần biên dịch lại từ mã nguồn.

  • Hướng đối tượng (Object-Oriented): mọi thứ (trừ kiểu nguyên thủy) đều là object, hỗ trợ đầy đủ kế thừa, đa hình, đóng gói.
  • Kiểu tĩnh (Statically typed): kiểu dữ liệu của biến được xác định và kiểm tra ngay khi biên dịch, giúp phát hiện lỗi sớm.
  • Tự động quản lý bộ nhớ (Garbage Collection): Java tự động thu hồi vùng nhớ của các object không còn được sử dụng, lập trình viên không cần free/delete thủ công như C/C++.
  • An toàn kiểu mạnh (Strongly typed): không cho phép các phép chuyển kiểu ngầm định gây mất dữ liệu mà không cảnh báo.
  • Đa luồng (Multithreading) được hỗ trợ sẵn trong ngôn ngữ.
  • Thư viện chuẩn phong phú: Java Standard Library (java.util, java.io, java.time…) cung cấp sẵn rất nhiều cấu trúc dữ liệu và tiện ích.

Oracle phát hành một phiên bản Java mới mỗi 6 tháng, nhưng chỉ một số phiên bản được đánh dấu LTS (Long-Term Support) - được hỗ trợ dài hạn và khuyến nghị dùng cho dự án thực tế:

  • Java 8 (2014) - LTS, vẫn còn dùng nhiều trong các hệ thống cũ
  • Java 11 (2018) - LTS
  • Java 17 (2021) - LTS
  • Java 21 (2023) - LTS mới nhất, có virtual threads, pattern matching, record patterns

Các bài học trong phần này hướng đến cú pháp hiện đại của Java 17/21.

  • Java là ngôn ngữ hướng đối tượng, kiểu tĩnh, biên dịch ra bytecode và chạy trên JVM
  • JDK (để phát triển) ⊃ JRE (để chạy) ⊃ JVM (để thực thi bytecode)
  • Triết lý “viết một lần, chạy mọi nơi” nhờ bytecode độc lập nền tảng
  • Nên học và dùng các phiên bản LTS như Java 17 hoặc Java 21