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 đổiCá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.
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ườngpublic static final:PIcó giá trị3.14159E(số Euler) có giá trị2.71828GOLDEN_RATIOcó giá trị1.61803
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]
- Diện tích hình tròn:
Để 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]
}
}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
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online