Menu
CoddyTech

Hằng số (static final)

Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 18 trên 87.

Kết hợp static và final sẽ tạo ra một hằng số, một giá trị thuộc về lớp và không bao giờ thay đổi. Đây là cách tiêu chuẩn để định nghĩa hằng số trong Java.

public class GameSettings {
    public static final int MAX_PLAYERS = 4;
    public static final double GRAVITY = 9.81;
    public static final String GAME_TITLE = "Space Adventure";
}

Theo quy ước, tên hằng số dùng UPPER_SNAKE_CASE để phân biệt với các biến thông thường. Vì chúng vừa tĩnh vừa cố định, bạn truy cập chúng thông qua tên lớp và giá trị của chúng luôn được đảm bảo không thay đổi:

System.out.println(GameSettings.MAX_PLAYERS);  // 4
// GameSettings.MAX_PLAYERS = 8;  // Lỗi! Không thể sửa đổi

Các hằng số thường được khai báo là public vì chúng được dùng chung trong ứng dụng. Hãy nghĩ đến các giá trị như Math.PI, đây là một hằng số public static final mà đoạn code nào cũng có thể sử dụng.

Tại sao nên dùng hằng số thay vì giá trị ghi cứng? Nếu bạn viết 4 khắp đoạn code rồi sau này cần đổi thành 6, bạn sẽ phải tìm và cập nhật mọi chỗ xuất hiện. Với một hằng số như MAX_PLAYERS, bạn chỉ cần đổi ở một nơi.

Hằng số cũng giúp code dễ đọc hơn: MAX_PLAYERS rõ ràng hơn một con số 4 khó hiểu.

challenge icon

Thử thách

Dễ

Hãy tạo một lớp tiện ích MathConstants để lưu các giá trị toán học quan trọng dưới dạng hằng số, cùng với lớp CircleCalculator sử dụng những hằng số đó để thực hiện các phép tính.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • MathConstants.java: Tạo một lớp lưu các hằng số toán học bằng các trường public static final:
    • PI có giá trị 3.14159
    • E (số Euler) có giá trị 2.71828
    • GOLDEN_RATIO có giá trị 1.61803
    Nhớ dùng UPPER_SNAKE_CASE cho tên hằng số!
  • Main.java: Dùng các hằng số để tính toán về hình tròn. Bạn sẽ nhận bán kính làm đầu vào và in ra ba dòng:
    • Diện tích hình tròn: Area: [value]
    • Chu vi hình tròn: Circumference: [value]
    • Đường kính nhân với tỷ lệ vàng: Golden Diameter: [value]

Để tính toán:

  • Diện tích = PI * radius * radius
  • Chu vi = 2 * PI * radius
  • Đường kính nhân với tỷ lệ vàng = 2 * radius * GOLDEN_RATIO

Bạn sẽ nhận một đầu vào: bán kính (double).

Định dạng tất cả giá trị đầu ra với 2 chữ số thập phân bằng String.format("%.2f", value). Truy cập các hằng số thông qua tên lớp, như MathConstants.PI.

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        
        // TODO: Tính diện tích bằng MathConstants.PI
        // Công thức: PI * radius * radius
        
        // TODO: Tính chu vi bằng MathConstants.PI
        // Công thức: 2 * PI * radius
        
        // TODO: Tính đường kính vàng bằng MathConstants.GOLDEN_RATIO
        // Công thức: 2 * radius * GOLDEN_RATIO
        
        // TODO: In kết quả với 2 chữ số thập phân
        // Dùng String.format("%.2f", value) để định dạng
        // Định dạng đầu ra:
        // Diện tích: [value]
        // Circumference: [value]
        // Golden Diameter: [value]
        
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Java online