Java trong một câu
Java là ngôn ngữ lập trình hướng đối tượng, kiểu tĩnh, được biên dịch thành bytecode và chạy trên Java Virtual Machine (JVM). Chính lựa chọn thiết kế đó, biên dịch sang một định dạng trung gian trung lập rồi chạy nó trên một máy ảo, là lý do cùng một chương trình Java đã biên dịch chạy được trên Windows, macOS, Linux và nhiều nền tảng khác mà không cần sửa gì.
Đây là chương trình đầu tiên không thể thiếu. Bạn có thể chạy nó ngay tại đây:
Ở đây có nhiều "thủ tục" hơn so với một ngôn ngữ kịch bản, và điều đó là có chủ ý: Java ưu tiên cấu trúc rõ ràng. Chúng ta sẽ lần lượt mổ xẻ từng phần của chương trình này trong vài trang tiếp theo.
Vì sao JVM quan trọng
Phần lớn ngôn ngữ biên dịch chuyển mã nguồn thẳng thành mã máy cho một loại bộ xử lý và một hệ điều hành cụ thể. Một chương trình biên dịch cho Windows sẽ không chạy được trên Mac. Java đi đường vòng:
javacbiên dịch mã nguồn.javacủa bạn thành các tệp.classchứa bytecode, tức là các lệnh cho một cỗ máy tưởng tượng, không phải cho CPU thật nào.- JVM trên nền tảng của bạn đọc bytecode đó và thực thi nó, vừa chạy vừa dịch sang lệnh máy gốc.
Vì mỗi nền tảng có JVM riêng nhưng tất cả đều hiểu cùng một loại bytecode, bạn chỉ cần biên dịch một lần và chạy kết quả ở bất cứ đâu có JVM. Đó chính là khẩu hiệu nổi tiếng: write once, run anywhere (viết một lần, chạy mọi nơi).
JVM không chỉ thông dịch một cách máy móc. Trình biên dịch just-in-time (JIT) theo dõi đoạn code nào chạy nhiều nhất, rồi biên dịch những đoạn đó thành mã máy gốc đã tối ưu, nhờ vậy các chương trình Java chạy lâu có tốc độ gần bằng các ngôn ngữ biên dịch hoàn toàn.
Kiểu tĩnh và hướng đối tượng
Hai đặc điểm định hình cách code Java trông như thế nào.
Kiểu tĩnh nghĩa là mọi biến (variable) đều có kiểu được biết từ lúc biên dịch, và trình biên dịch kiểm tra kiểu trước khi chương trình chạy:
count mãi mãi là int; gán "hello" cho nó sẽ không biên dịch được. Cách này bắt được cả một nhóm lỗi từ sớm, đổi lại bạn phải gõ nhiều hơn lúc đầu.
Hướng đối tượng nghĩa là Java tổ chức code thành các lớp (class), những bản thiết kế gom dữ liệu và các phương thức xử lý dữ liệu đó vào một chỗ. Ngay cả điểm bắt đầu chương trình ở trên cũng nằm trong class Main. Gần như mọi thứ bạn viết bằng Java đều nằm trong một lớp.
Java dùng để làm gì
Java là một trong những ngôn ngữ được triển khai rộng rãi nhất thế giới. Bạn sẽ gặp nó ở:
- Backend và hệ thống doanh nghiệp: ngân hàng, bảo hiểm, các dịch vụ web lớn và mọi hệ thống cần chạy ổn định trong nhiều năm.
- Android: ngôn ngữ gốc của nền tảng này, vẫn giữ vai trò trung tâm trong runtime Android dù đã có Kotlin.
- Big data: Hadoop, Spark, Kafka và phần lớn hệ sinh thái kỹ thuật dữ liệu đều chạy trên JVM.
- Desktop và hệ thống nhúng: từ IDE (IntelliJ, Eclipse) đến máy tính tiền và thẻ thông minh.
Java nổi tiếng nhờ sự ổn định, khả năng tương thích ngược và thư viện chuẩn đồ sộ, chứ không phải vì là ngôn ngữ ngắn gọn nhất. Code viết cho Java từ nhiều năm trước thường vẫn chạy được đến hôm nay.
Java không phải JavaScript
Điều này cần nói rõ vì hai cái tên gây nhầm lẫn không ngớt: Java và JavaScript là hai ngôn ngữ khác nhau, không liên quan gì đến nhau. Chúng chung bốn chữ cái vì lý do tiếp thị trong quá khứ, ngoài ra không có điểm chung nào đáng kể. Java được biên dịch, có kiểu tĩnh và chạy trên JVM; JavaScript có kiểu động và chạy trong trình duyệt và Node.js. Học ngôn ngữ này không giúp bạn biết ngôn ngữ kia.
Tiếp theo: cài đặt Java
Để viết và chạy Java trên máy của mình, bạn cần một JDK (Java Development Kit), gồm trình biên dịch, JVM và thư viện chuẩn. Trang tiếp theo hướng dẫn cách cài đặt và kiểm tra xem nó đã hoạt động chưa.
Câu hỏi thường gặp
Java dùng để làm gì?
Java vận hành các hệ thống phía máy chủ và hệ thống doanh nghiệp quy mô lớn, ứng dụng Android (qua Android SDK và runtime dùng chung với Kotlin), các công cụ big data như Hadoop và Spark, cùng vô số ứng dụng desktop và nhúng. Thế mạnh của Java là sự ổn định, thư viện chuẩn khổng lồ và JVM chạy cùng một chương trình đã biên dịch trên mọi hệ điều hành.
Java là ngôn ngữ biên dịch hay thông dịch?
Cả hai. Trình biên dịch Java (javac) chuyển mã nguồn của bạn thành bytecode không phụ thuộc nền tảng, rồi JVM chạy bytecode đó: ban đầu nó thông dịch, sau đó biên dịch những đoạn code chạy nhiều thành mã máy gốc bằng trình biên dịch just-in-time (JIT). Vậy Java được biên dịch thành bytecode, rồi được thông dịch và biên dịch JIT lúc chạy.
Java có giống JavaScript không?
Không. Đây là hai ngôn ngữ không liên quan, chỉ có tên giống nhau vì lý do tiếp thị trong quá khứ. Java là ngôn ngữ kiểu tĩnh, được biên dịch và chạy trên JVM; JavaScript là ngôn ngữ kiểu động, chạy trong trình duyệt và Node.js. Biết ngôn ngữ này không có nghĩa là bạn biết ngôn ngữ kia.