Các Đặc Điểm Trọng Tâm Của Ngôn Ngữ Java: Từ Cấu Trúc Điều Khiển Đến Hướng Đối Tượng

1. Cấu trúc switch

Trong Java, switch dùng để so sánh giá trị biểu thức với các trường hợp cụ thể. Khi khớp, khối lệnh tương ứng được thực thi đến khi gặp break. Nếu không có case khớp, default được thực thi. Giá trị case phải là hằng số, không được trùng lặp. default có thể bỏ qua hoặc đặt bất kỳ vị trí nào. Thiếu break sẽ gây hiện tượng "fall-through" - thực thi liên tiếp các case tiếp theo.

int option = 3;
switch (option) {
    case 1:
        System.out.println("Lựa chọn 1");
        break;
    case 2:
        System.out.println("Lựa chọn 2");
        break;
    default:
        System.out.println("Giá trị không hợp lệ");
}

2. Xử lý số ngẫu nhiên

Lớp Random trong java.util tạo số ngẫu nhiên. Phương thức nextInt(int bound) trả về số nguyên từ 0 đến bound-1.

import java.util.Random;
Random rng = new Random();
int randomValue = rng.nextInt(50); // Số ngẫu nhiên 0-49

3. Mảng

Mảng là cấu trúc lưu trữ nhiều giá trị cùng kiểu dữ liệu. Khởi tạo tĩnh:

int[] scores = {95, 87, 92}; // Khởi tạo với giá trị cụ thể

Khởi tạo động (cấp phát bộ nhớ theo kích thước):

double[] prices = new double[10]; // Các phần tử mặc định là 0.0

Bảng giá trị mặc định:

Kiểu dữ liệuGiá trị mặc định
int0
double0.0
char'\u0000'
booleanfalse
Objectnull

4. Phân vùng bộ nhớ JVM

Từ JDK 8, method area được thay thế bằng metaspace. Các vùng bộ nhớ chính:

  • Stack: Lưu trữ biến cục bộ và lời gọi phương thức
  • Heap: Chứa đối tượng và mảng được tạo bằng new
  • Metaspace: Lưu trữ thông tin lớp (thay thế method area)
  • Native method stack: Dùng cho mã native
  • Register: Dành cho CPU

5. Phương thức và overloading

Phương thức là đơn vị thực thi nhỏ nhất. Tham số hình thức (trong khai báo) và tham số thực tế (khi gọi). Phương thức void không trả về giá trị.

public void calculate(int a, int b) {
    System.out.println(a + b);
}

// Overloading - cùng tên nhưng tham số khác nhau
public void calculate(double a, double b) {
    System.out.println(a * b);
}

6. Kiểu dữ liệu cơ bản và tham chiếu

Kiểu cơ bản: Lưu giá trị trực tiếp. Khi gán cho biến khác, giá trị được sao chép.

Kiểu tham chiếu: Lưu địa chỉ bộ nhớ. Khi truyền vào phương thức, thay đổi trên tham số ảnh hưởng đến dữ liệu gốc.

7. Mảng hai chiều

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2};
matrix[1] = new int[]{3, 4, 5};
matrix[2] = new int[]{6};

8. Lớp và đối tượng

public class Laptop {
    private String brand;
    private double weight;
    
    public void powerOn() {
        System.out.println("Khởi động máy");
    }
}

Cách tạo đối tượng:

Laptop myLaptop = new Laptop();
myLaptop.brand = "Dell";

9. Đóng gói (Encapsulation)

Sử dụng private cho biến thành viên, kết hợp setter/getter:

public class Product {
    private String name;
    
    public void setName(String n) {
        name = n;
    }
    
    public String getName() {
        return name;
    }
}

10. Từ khóa this

Phân biệt biến cục bộ và thành viên khi trùng tên:

public class Student {
    private String name;
    
    public void setName(String name) {
        this.name = name; // this.name chỉ biến thành viên
    }
}

11. Constructor

Đặc điểm:

  • Tên giống class
  • Không có kiểu trả về
  • Tự động gọi khi tạo đối tượng
public class User {
    private int id;
    
    public User(int userId) {
        id = userId;
    }
}

12. Thiết kế JavaBean chuẩn

  • Tên class mô tả rõ ràng
  • Biến thành viên private
  • Có constructor không tham số và đầy đủ tham số
  • Cung cấp setter/getter cho mọi biến

13. Quá trình tạo đối tượng

  1. Tải class file vào metaspace
  2. Khai báo biến tham chiếu
  3. Cấp phát bộ nhớ heap
  4. Khởi tạo mặc định cho biến thành viên
  5. Khởi tạo hiển thị (nếu có)
  6. Thực thi constructor
  7. Gán địa chỉ heap cho biến tham chiếu

14. Phạm vi truy cập của modifier

ModifierPhạm vi truy cậpMô tả
publicMọi nơiTruy cập từ bất kỳ lớp nào
protectedCùng package và subclassTrong package hoặc subclass
defaultCùng packageChỉ trong cùng package
privateTrong classChỉ trong class hiện tại

Thẻ: Java switch-statement array object-oriented-programming encapsulation

Đăng vào ngày 18 tháng 5 lúc 06:58