Fields trong Java OOP: DNA của mọi Object - Anh Creyt Bóc Tách
Java – OOP

Fields trong Java OOP: DNA của mọi Object - Anh Creyt Bóc Tách

Author

Admin System

@root

Ngày xuất bản

19 Mar, 2026

Lượt xem

3 Lượt

Field

Yo, Gen Z-ers! Anh Creyt đây, hôm nay mình cùng bóc tách một khái niệm mà nghe thì khô khan nhưng thực ra lại là 'DNA' của mọi object trong lập trình Java: Field. Cứ coi nó như những mảnh ghép tạo nên cá tính riêng cho từng 'nhân vật' trong thế giới code của chúng ta vậy.

1. Field là gì? Để làm gì? (Giải mã Gen Z Style)

Để dễ hình dung, mấy đứa thử nghĩ về profile TikTok của mình đi. Username, bio, số lượng followers, list các video đã đăng, avatar của bạn – tất cả những thứ đó chính là Field của cái 'object' là TikTokProfile của bạn. Chúng là những dữ liệu, những đặc điểm riêng biệt định hình nên trạng thái của một đối tượng cụ thể.

Trong Java OOP, một Field (hay còn gọi là instance variable hoặc member variable) là một biến được khai báo bên trong một class, nhưng nằm ngoài bất kỳ method, constructor hay block nào. Nhiệm vụ chính của nó là lưu trữ dữ liệu hoặc trạng thái của một đối tượng được tạo ra từ class đó.

Để làm gì? Đơn giản là để các đối tượng có 'cá tính' riêng. Mỗi khi bạn tạo một đối tượng (ví dụ: một TikTokProfile cho bạn, một cái khác cho đứa bạn thân), thì mỗi đối tượng đó sẽ có một bộ Field riêng, với những giá trị có thể khác nhau. Profile của bạn có username khác, số followers khác profile của đứa bạn, đúng không? Đó chính là sức mạnh của Fields!

2. Code Ví Dụ Minh Họa: 'Student' Object

Giả sử chúng ta muốn tạo ra một class Student để quản lý thông tin của các bạn sinh viên. Mỗi sinh viên sẽ có tên, tuổi và mã số sinh viên (MSSV). Đây chính là các Fields của class Student.

class Student {
    // Đây là các "Field" của class Student
    String name;         // Tên của sinh viên
    int age;             // Tuổi của sinh viên
    String studentId;    // Mã số sinh viên
    boolean isStudying;  // Trạng thái đang học hay không

    // Constructor để khởi tạo đối tượng Student
    public Student(String name, int age, String studentId) {
        this.name = name; // Gán giá trị từ tham số vào field 'name'
        this.age = age;
        this.studentId = studentId;
        this.isStudying = true; // Mặc định khi tạo là đang học
    }

    // Một method để in thông tin của sinh viên
    public void displayInfo() {
        System.out.println("Tên: " + name + ", Tuổi: " + age + ", MSSV: " + studentId + ", Đang học: " + isStudying);
    }

    // Một method để thay đổi trạng thái học tập
    public void stopStudying() {
        this.isStudying = false;
        System.out.println(name + " đã tạm dừng việc học.");
    }
}

public class SchoolApp {
    public static void main(String[] args) {
        // Tạo một đối tượng Student (Nguyễn Văn A)
        Student studentA = new Student("Nguyễn Văn A", 20, "SV001");
        studentA.displayInfo(); // Output: Tên: Nguyễn Văn A, Tuổi: 20, MSSV: SV001, Đang học: true

        // Tạo một đối tượng Student khác (Trần Thị B)
        Student studentB = new Student("Trần Thị B", 21, "SV002");
        studentB.displayInfo(); // Output: Tên: Trần Thị B, Tuổi: 21, MSSV: SV002, Đang học: true

        // Thay đổi giá trị của một field cho studentA thông qua method
        studentA.stopStudying(); // Output: Nguyễn Văn A đã tạm dừng việc học.
        studentA.displayInfo();  // Output: Tên: Nguyễn Văn A, Tuổi: 20, MSSV: SV001, Đang học: false

        // Field 'isStudying' của studentB vẫn không bị ảnh hưởng
        studentB.displayInfo();  // Output: Tên: Trần Thị B, Tuổi: 21, MSSV: SV002, Đang học: true
    }
}

Trong ví dụ trên, name, age, studentId, isStudying là các Fields. Mỗi khi tạo studentA hay studentB, chúng ta có hai bộ Fields riêng biệt, lưu trữ thông tin độc lập cho từng đối tượng.

Illustration

3. Mẹo hay & Best Practices (Để code đỉnh của chóp)

Với tư cách là một giảng viên lão luyện từ Harvard (phiên bản Creyt), anh có vài tips vàng cho mấy đứa:

  • Encapsulation (Đóng gói) là chân ái: Luôn luôn đặt private cho các Fields của mình. Sau đó, cung cấp các public getter (để đọc giá trị) và setter (để thay đổi giá trị) methods. Tại sao? Nó giống như việc bạn có một căn phòng riêng vậy: bạn không muốn ai đó tự ý vào lục lọi đồ đạc của mình, đúng không? Bạn có thể cho họ biết có gì trong phòng (getter) hoặc cho phép họ đặt đồ vào (setter) nhưng phải thông qua bạn. Điều này giúp kiểm soát dữ liệu, tránh việc dữ liệu bị 'rác' hoặc thay đổi không mong muốn. Đây là một trong bốn trụ cột của OOP đó!

  • final fields: Bất biến là đẹp: Nếu một Field mà giá trị của nó không bao giờ thay đổi sau khi khởi tạo (ví dụ: studentId sau khi được cấp), hãy khai báo nó là final. Điều này giúp code của bạn an toàn hơn, dễ đọc hơn và thể hiện rõ ý định của bạn.

  • Tên Field phải rõ ràng: Đặt tên Field dễ hiểu, theo quy tắc camelCase (ví dụ: userName, productPrice). Đừng đặt a, b, x... trừ khi đó là các biến tạm thời trong method. Code không chỉ để máy hiểu, mà còn để con người (và cả Creyt nữa) đọc được!

  • Static Fields (Biến Class): Có một loại Field đặc biệt là static. Chúng không thuộc về từng đối tượng cụ thể mà thuộc về chính cái class đó. Ví dụ, nếu bạn có một Field String schoolName = "Đại học Harvard"; trong class Student mà là static, thì tất cả các đối tượng Student đều chia sẻ cùng một giá trị schoolName này. Giống như tên trường học, tất cả học sinh đều thuộc cùng một trường vậy. Chỉ dùng static khi Field đó là chung cho TẤT CẢ các thể hiện của class.

4. Học thuật Harvard, Dễ hiểu Tuyệt đối

Từ góc độ học thuật sâu sắc, Fields đóng vai trò cực kỳ quan trọng trong việc hiện thực hóa các nguyên lý cơ bản của Lập trình hướng đối tượng (OOP):

  • Abstraction (Trừu tượng hóa): Fields cho phép chúng ta trừu tượng hóa các đặc tính quan trọng nhất của một thực thể trong thế giới thực thành các thuộc tính trong code. Chúng ta không cần mô tả mọi chi tiết nhỏ nhất, mà chỉ những gì cần thiết để định nghĩa đối tượng đó trong ngữ cảnh của ứng dụng.
  • State vs. Behavior: Trong OOP, một đối tượng được định nghĩa bởi state (trạng thái) và behavior (hành vi). Fields chính là thứ đại diện cho state của đối tượng, cho nó 'tính cách' và 'dữ liệu' riêng. Các methods (hành vi) sau đó sẽ thao tác với các Fields này. Sự kết hợp hài hòa giữa Fields và Methods tạo nên một đối tượng hoàn chỉnh và có ý nghĩa.
  • Memory Management: Mỗi khi một đối tượng được tạo ra (instantiated), một vùng nhớ riêng biệt sẽ được cấp phát trên heap để lưu trữ các Fields của nó. Điều này đảm bảo rằng mỗi đối tượng có một bản sao độc lập của các thuộc tính, cho phép chúng có những giá trị và trạng thái riêng biệt mà không ảnh hưởng lẫn nhau.

5. Ví Dụ Thực Tế: Ứng Dụng/Website đã dùng

Fields là xương sống của mọi ứng dụng. Không có nó, mọi thứ sẽ sụp đổ:

  • Facebook/Instagram:
    • User object: có các fields như userId, username, email, profilePictureUrl, followersCount, postsList (một list các Post objects).
    • Post object: có postId, authorId, imageUrl, caption, likesCount, commentsList.
  • E-commerce (Shopee/Lazada):
    • Product object: có productId, name, price, description, stockQuantity, sellerId, category.
    • User object: có userId, username, address, paymentMethods (list các PaymentMethod objects).
  • Game (Liên Minh Huyền Thoại):
    • Champion object: có name, health, mana, attackDamage, abilityList.
    • Player object: có playerName, score, championPicked (là một Champion object).

Mỗi lần bạn xem profile, thêm sản phẩm vào giỏ hàng, hoặc chọn tướng trong game, bạn đang tương tác với các Fields của những đối tượng đó đấy!

6. Thử Nghiệm & Hướng Dẫn Sử Dụng

Khi nào nên dùng Field?

  • Khi bạn cần lưu trữ dữ liệu riêng biệt cho mỗi thể hiện (instance) của một đối tượng. Ví dụ: mỗi Student cần có nameage riêng.
  • Khi dữ liệu đó định nghĩa trạng thái của đối tượng và có thể thay đổi trong suốt vòng đời của đối tượng. Ví dụ: isStudying của sinh viên có thể thay đổi từ true sang false.
  • Khi dữ liệu đó là một đặc tính cốt lõi, gắn liền với bản chất của đối tượng.

Thử nghiệm tại nhà:

Hãy thử tạo một class Car với các fields sau:

  • String brand;
  • String model;
  • int year;
  • String color;
  • double currentSpeed;
  1. Tạo 2-3 đối tượng Car (ví dụ: carA, carB), gán các giá trị khác nhau cho các fields của chúng. In thông tin của từng chiếc xe ra console.
  2. Thử thay đổi currentSpeed của carA (ví dụ: tăng lên 60 km/h) và sau đó in lại thông tin của cả carAcarB. Bạn sẽ thấy carB không bị ảnh hưởng, vì mỗi chiếc xe có bộ fields currentSpeed riêng.
  3. Thêm một field static final int NUMBER_OF_WHEELS = 4; vào class Car. Sau đó, thử truy cập Car.NUMBER_OF_WHEELS và in ra. Bạn sẽ thấy nó là 4 cho tất cả các đối tượng Car mà không cần phải tạo đối tượng. Đây là cách Fields static hoạt động.

Việc thực hành này sẽ giúp bạn 'cảm' được sự khác biệt và tầm quan trọng của Fields trong việc định hình các đối tượng trong lập trình hướng đối tượng. Nhớ nhé, Fields là trái tim dữ liệu của mọi object!

Thuộc Series: Java – OOP

Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!