Nền tảng phát triển Java SE cơ bản

JDK, JRE và JVM

  • JDK (Java Development Kit): Bộ công cụ phát triển ứng dụng Java.
  • JRE (Java Runtime Environment): Môi trường cần thiết để chạy ứng dụng Java.
  • JVM (Java Virtual Machine): Máy ảo thực thi bytecode Java, đảm bảo tính "viết một lần, chạy mọi nơi".

Cài đặt JDK

Phiên bản JDK 8 vẫn được sử dụng phổ biến.

Cài đặt và cấu hình

  1. Tải JDK từ trang chủ Oracle (chấp nhận điều khoản giấy phép).
  2. Ghi nhớ đường dẫn cài đặt để thiết lập biến môi trường.
  3. Cấu hình biến môi trường:
    • Mở sysdm.cplAdvanced system settingsEnvironment Variables.
    • Thêm biến hệ thống: JAVA_HOME trỏ tới thư mục cài JDK.
    • Thêm %JAVA_HOME%\bin vào biến Path.
    • Kiểm tra bằng lệnh: java -version.

Cấu trúc thư mục JDK

  • bin: Chứa các công cụ như javac, java.
  • include: Header file cho JNI (giao tiếp với C/C++).
  • jre: Thư viện runtime (một số phiên bản JDK mới không có thư mục này riêng biệt).
  • lib: Thư viện hỗ trợ.
  • src.zip: Mã nguồn các lớp chuẩn của Java.

Ví dụ đầu tiên: Hello World

  1. Tạo thư mục dự án (ví dụ: HelloWorld).
  2. Tạo tập tin Hello.java (đảm bảo phần mở rộng hiển thị rõ ràng).
  3. Viết mã nguồn:
    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
        }
    }

    Lưu ý: Tên file phải trùng với tên lớp khai báo sau public class, phân biệt hoa thường.

  4. Biên dịch: javac Hello.java (thực hiện trong thư mục chứa file).
  5. Chạy chương trình: java Hello (không kèm phần mở rộng .class).

Cơ chế thực thi Java

Java kết hợp cả biên dịch và thông dịch:

  1. Mã nguồn (.java) được biên dịch thành bytecode (.class) bởi javac.
  2. Bytecode được nạp vào JVM qua Class Loader.
  3. Bytecode được xác minh tính hợp lệ.
  4. JVM dùng Interpreter hoặc JIT Compiler để thực thi bytecode.

Cú pháp cơ bản

Chú thích

// Chú thích một dòng

/*
 * Chú thích nhiều dòng
 */

/**
 * Chú thích tài liệu (Javadoc)
 * @author DevTeam
 */

Từ khóa và định danh

Quy tắc đặt tên định danh:

  • Bắt đầu bằng chữ cái (A–Z, a–z), dấu gạch dưới (_) hoặc ký tự đô la ($).
  • Các ký tự tiếp theo có thể là chữ, số, _ hoặc $.
  • Không được trùng với từ khóa.
  • Phân biệt chữ hoa/thường.
  • Cho phép sử dụng ký tự Unicode (kể cả tiếng Việt hoặc tiếng Trung).

Ví dụ hợp lệ: age, $price, _count, 姓名
Ví dụ không hợp lệ: 123var, -value, #tag

Kiểu dữ liệu

Java là ngôn ngữ kiểu mạnh — mọi biến phải được khai báo kiểu trước khi dùng.

Hai loại kiểu dữ liệu

  1. Kiểu nguyên thủy (primitive):
    • Số nguyên: byte (1 byte), short (2), int (4), long (8).
    • Số thực: float (4 byte), double (8 byte).
    • Ký tự: char (2 byte, mã Unicode).
    • Luận lý: boolean (chỉ true/false).
  2. Kiểu tham chiếu (reference): lớp, mảng, interface.

Biểu diễn hệ cơ số

int decimal = 10;
int binary = 0b1010;     // hệ nhị phân
int octal = 012;         // hệ bát phân
int hex = 0xA;           // hệ thập lục phân

Lưu ý về số thực

Không nên dùng float/double cho tính toán chính xác (như tiền tệ). Thay vào đó, dùng BigDecimal.

float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d); // false — do lỗi làm tròn

Ký tự và mã Unicode

char c = 'A';
System.out.println((int) c); // 65

char unicodeChar = '\u0041'; // tương đương 'A'

Ép kiểu dữ liệu

  • Không thể ép kiểu boolean sang kiểu khác.
  • Ép kiểu thu hẹp (từ lớn sang nhỏ) cần cast tường minh và có thể mất dữ liệu.
int large = 200;
byte small = (byte) large; // kết quả: -56 (do tràn byte)

Từ JDK 7+, có thể dùng dấu gạch dưới để phân tách số: int million = 1_000_000;

Biến và phạm vi

  1. Biến lớp (static): Dùng chung cho tất cả đối tượng, khai báo với static.
  2. Biến instance: Thuộc về từng đối tượng, có giá trị mặc định nếu chưa khởi tạo.
  3. Biến cục bộ: Chỉ tồn tại trong phương thức/khối lệnh, phải khởi tạo trước khi dùng.
public class ScopeDemo {
    static double baseSalary = 10000; // biến lớp
    String employeeName;              // biến instance (mặc định null)

    public static void main(String[] args) {
        int counter = 0; // biến cục bộ
        ScopeDemo obj = new ScopeDemo();
        System.out.println(obj.employeeName); // null
        System.out.println(counter);          // 0
    }
}

Quy ước đặt tên

  • Lớp: Viết hoa chữ đầu mỗi từ (PascalCase) — UserManager.
  • Phương thức & biến: Chữ đầu viết thường, các từ sau viết hoa (camelCase) — calculateTotal(), userName.
  • Hằng số: Viết hoa toàn bộ, dùng gạch dưới — MAX_RETRY_COUNT.

Hằng số

Khai báo bằng từ khóa final:

final double PI = 3.14159;

Toán tử

Toán tử số học

+ - * / %

Toán tử gán

= += -= *= /=

Toán tử quan hệ

> < >= <= == != instanceof

Toán tử logic

&& (AND), || (OR), ! (NOT)

Toán tử bit

& | ^ ~ << >> >>>

Toán tử điều kiện (ba ngôi)

condition ? valueIfTrue : valueIfFalse

Ví dụ minh họa

// Toán tử một ngôi
int x = 5;
int y = x++; // y = 5, x = 6
int z = ++x; // x = 7, z = 7

// Nối chuỗi
System.out.println("" + 2 + 3); // "23"
System.out.println(2 + 3 + ""); // "5"

// So sánh logic
boolean result = (5 > 3) && (2 < 4); // true

Thẻ: JavaSE jdk JVM primitive-types type-casting

Đăng vào ngày 7 tháng 9 lúc 13:18