+2

Object và class trong Java (phần 2)

Truy cập object thông qua biến tham chiếu

Biến tham chiếu và kiểu tham chiếu

Biến tham chiếu và kiểu tham chiếu là các khái niệm quan trọng trong lập trình Java. Chúng liên quan đến cách các object được tạo và quản lý thông qua việc tham chiếu đến chúng.

  • Biến tham chiếu (Reference Variables): Biến tham chiếu là các biến được sử dụng để lưu trữ tham chiếu đến object. Cụ thể, biến tham chiếu chứa địa chỉ hay vị trí trong bộ nhớ của object. Biến tham chiếu được khai báo bằng cách chỉ định kiểu của object mà chúng có thể tham chiếu.

    Ví dụ:

    Circle myCircle;
    
  • Kiểu tham chiếu (Reference Types): Kiểu tham chiếu là loại dữ liệu trong Java, dựa trên class hoặc interface, mà biến tham chiếu có thể tham chiếu đến. Kiểu tham chiếu định nghĩa kiểu dữ liệu cho biến tham chiếu và quy định cách các object của class hoặc interface đó được tạo và quản lý. Biến tham chiếu phải tham chiếu đến một object thuộc kiểu tham chiếu.

    Ví dụ:

    Circle myCircle = new Circle();
    

Trong ví dụ trên, myCircle là một biến tham chiếu kiểu Circle. Nó có thể tham chiếu đến một object Circle. Biến tham chiếu được khởi tạo bằng cách sử dụng toán tử new để tạo một object và gán tham chiếu của object đó cho biến tham chiếu.

Truy cập vào dữ liệu và phương thức của Object

Trong Java, để truy cập vào dữ liệu và phương thức của một object, bạn cần sử dụng biến tham chiếu (reference variable) và dấu chấm (.). Dưới đây là cách truy cập dữ liệu và phương thức của object:

  1. Truy cập thuộc tính (dữ liệu) của object:

    Để truy cập giá trị của một thuộc tính trong object, ta sử dụng biến tham chiếu kết hợp với tên thuộc tính và dấu chấm ..

    Ví dụ:

    HocSinh student = new HocSinh("John", 1001);
    String ten = student.ten; // Truy cập thuộc tính 'ten'
    int maHocSinh = student.maHocSinh; // Truy cập thuộc tính 'maHocSinh'
    
  2. Gọi phương thức của object:

    Để gọi một phương thức của object, bạn sử dụng biến tham chiếu kết hợp với tên phương thức và dấu chấm ..

    Ví dụ:

    HocSinh student = new HocSinh("John", 1001);
    student.hienThiThongTin(); // Gọi phương thức 'hienThiThongTin'
    
  3. Truy cập phương thức của object với giá trị trả về:

    Nếu phương thức trả về giá trị, bạn có thể sử dụng giá trị đó sau khi gọi phương thức.

    Ví dụ:

    HocSinh student = new HocSinh("John", 1001);
    double diemTrungBinh = student.tinhDiemTrungBinh(); // Gọi phương thức và lấy giá trị trả về
    System.out.println("Điểm trung bình của học sinh là: " + diemTrungBinh);
    

Hãy nhớ rằng bạn cần có một biến tham chiếu đến object để truy cập dữ liệu và phương thức của nó. Trong các ví dụ trên, biến student là biến tham chiếu đến object HocSinh, cho phép truy cập và sử dụng thông tin và hành vi của object đó.

Từ khóa static

Giới thiệu

Trong Java, từ khóa static được sử dụng để khai báo biến, hằng số và phương thức làm cho chúng thuộc về class chứ không phải thuộc một object cụ thể. Dưới đây là giới thiệu về biến, hằng số và phương thức sử dụng static:

  1. Biến static:

    • Một biến được khai báo sử dụng static là biến của class chứ không phải của object.
    • Tất cả các object của class sử dụng cùng một bản sao của biến static.
    • Được khai báo bên ngoài phương thức, thường là ở cấp độ class.
    public class Example {
        static int staticVariable = 10;
    
        public static void main(String[] args) {
            System.out.println("Static Variable: " + staticVariable);
        }
    }
    
  2. Hằng số static:

    • Một hằng số static được khai báo bằng finalstatic.
    • Thường được đặt tên bằng chữ in hoa và sử dụng dấu gạch dưới (_) để ngăn cách các từ.
    public class Example {
        static final int MAX_VALUE = 100;
    
        public static void main(String[] args) {
            System.out.println("Static Constant: " + MAX_VALUE);
        }
    }
    
  3. Phương thức:

    • Một phương thức static thuộc về class chứ không phải object, nó có thể được gọi trực tiếp thông qua tên class mà không cần tạo object cụ thể.
    • Thường được sử dụng cho các hoạt động liên quan đến class chứ không phải object.
    public class Example {
        static void staticMethod() {
            System.out.println("This is a static method.");
        }
    
        public static void main(String[] args) {
            staticMethod(); // Gọi phương thức static trực tiếp
        }
    }
    

Khi nào sử dụng static

Sử dụng static trong Java khi bạn muốn các thành phần của class (biến, hằng số, phương thức) thuộc về class chứ không phải object. Dưới đây là một số tình huống phổ biến khi sử dụng static:

  1. Biến Static:

    • Sử dụng biến static khi bạn muốn chia sẻ một giá trị chung giữa tất cả các object của class.
    • Ví dụ: Đếm số lượng object đã được tạo của class.
    public class Example {
        static int instanceCount = 0;
    
        public Example() {
            instanceCount++;
        }
    }
    
  2. Hằng Số Static:

    • Sử dụng hằng số static khi bạn muốn định nghĩa một giá trị hằng số mà không cần tạo object.
    • Ví dụ: Định nghĩa các hằng số như PI, MAX_SIZE, MIN_VALUE.
    public class Constants {
        static final double PI = 3.14159;
        static final int MAX_SIZE = 100;
    }
    
  3. Phương Thức Static:

    • Sử dụng phương thức static khi phương thức không phụ thuộc vào trạng thái của object và có thể được gọi trực tiếp từ tên class.
    • Ví dụ: Các tiện ích chung không liên quan trực tiếp đến object cụ thể.
    public class MathUtils {
        static int add(int a, int b) {
            return a + b;
        }
    }
    

Ví dụ thực tế

Hãy xem xét một ví dụ bài toán thực tế sử dụng static: quản lý số lượng object đã được tạo của một class.

public class Product {
    private static int totalProducts = 0;

    private int productId;
    private String productName;

    public Product(String name) {
        this.productName = name;
        this.productId = ++totalProducts;
    }

    public static int getTotalProducts() {
        return totalProducts;
    }

    public int getProductId() {
        return productId;
    }

    public String getProductName() {
        return productName;
    }

    public static void main(String[] args) {
        Product product1 = new Product("Laptop");
        Product product2 = new Product("Smartphone");

        System.out.println("Total products created: " + Product.getTotalProducts());

        System.out.println("Product 1 ID: " + product1.getProductId());
        System.out.println("Product 2 ID: " + product2.getProductId());
    }
}

Trong ví dụ này, totalProducts là một biến static theo dõi tổng số lượng object Product đã được tạo. Mỗi khi một object mới được tạo, totalProducts được tăng lên.

Phương thức getTotalProducts() là một phương thức static cho phép truy cập vào tổng số lượng sản phẩm từ bên ngoài class mà không cần tạo object Product cụ thể.

Trong main method, chúng ta tạo hai object Product và sau đó in ra tổng số lượng sản phẩm và ID của mỗi sản phẩm. Sử dụng static giúp chúng ta theo dõi thông tin chung về tất cả các sản phẩm mà không cần tạo object Product.

Một số lưu ý

Khi sử dụng static trong Java, có một số lưu ý cần xem xét để tránh các vấn đề tiềm ẩn và tăng tính linh hoạt của code:

  1. Không Sử Dụng Quá Nhiều Biến Static:

    • Việc sử dụng quá nhiều biến static có thể dẫn đến sự chia sẻ trạng thái toàn cục, làm cho code trở nên khó hiểu và khó kiểm soát.
    • Sử dụng static một cách cẩn thận để tránh hiệu ứng "global state" quá mức.
  2. Biến Static Không Thay Đổi:

    • Một biến static thường không nên thay đổi giá trị sau khi đã được khởi tạo, để tránh những thay đổi không mong muốn và khó kiểm soát.
    • Nếu cần thay đổi giá trị, hãy cân nhắc sử dụng các phương thức static để kiểm soát giá trị bị thay đổi.
  3. Static Constants:

    • Hãy sử dụng static constants cho các hằng số mà không thay đổi trong suốt vòng đời của chương trình.
    • Đặt tên hằng số bằng chữ in hoa và sử dụng dấu gạch dưới (_) để phân tách các từ.
  4. Thread Safety:

    • Tránh sử dụng biến static trong môi trường đa luồng mà không có biện pháp đồng bộ hóa. Nếu cần, sử dụng synchronized hoặc các cơ chế khác để đảm bảo thread safety.

Tổng kết

Trong bài viết này, chúng ta đã thảo luận về các khái niệm quan trọng trong lập trình Java như từ khóa static, biến tham chiếu và kiểu tham chiếu. static giúp chia sẻ thông tin chung và duy trì trạng thái toàn cục, trong khi biến tham chiếu và kiểu tham chiếu mang lại tính linh hoạt khi làm việc với đối tượng. Với việc nắm rõ những khái niệm này, chùng ta có thể viết code Java hiệu quả và dễ dàng maintain.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí