Có nhiều cách sử dụng cho biến final
. Đây chỉ là một vài
Hằng số cuối cùng
public static class CircleToolsBetter {
public final static double PI = 3.141;
public double getCircleArea(final double radius) {
return (Math.pow(radius, 2) * PI);
}
}
Điều này có thể được sử dụng sau đó cho các phần khác của mã của bạn hoặc được các lớp khác truy cập, theo cách đó nếu bạn thay đổi giá trị, bạn sẽ không phải thay đổi từng cái một.
Biến cuối cùng
public static String someMethod(final String environmentKey) {
final String key = "env." + environmentKey;
System.out.println("Key is: " + key);
return (System.getProperty(key));
}
}
Trong lớp này, bạn xây dựng một biến cuối cùng có phạm vi có thêm tiền tố vào tham số môi trường. Trong trường hợp này, biến cuối cùng chỉ là cuối cùng trong phạm vi thực thi, khác nhau ở mỗi lần thực hiện của phương thức. Mỗi khi phương thức được nhập vào, trận chung kết sẽ được xây dựng lại. Ngay khi được xây dựng, nó không thể thay đổi trong phạm vi thực thi phương thức. Điều này cho phép bạn sửa một biến trong một phương thức trong suốt thời gian của phương thức. xem bên dưới:
public class FinalVariables {
public final static void main(final String[] args) {
System.out.println("Note how the key variable is changed.");
someMethod("JAVA_HOME");
someMethod("ANT_HOME");
}
}
Hằng số cuối cùng
public double equation2Better(final double inputValue) {
final double K = 1.414;
final double X = 45.0;
double result = (((Math.pow(inputValue, 3.0d) * K) + X) * M);
double powInputValue = 0;
if (result > 360) {
powInputValue = X * Math.sin(result);
} else {
inputValue = K * Math.sin(result); // <= Compiler error
}
Điều này đặc biệt hữu ích khi bạn có các dòng mã thực sự dài và nó sẽ tạo ra lỗi trình biên dịch để bạn không gặp phải lỗi logic / nghiệp vụ khi ai đó vô tình thay đổi các biến không nên thay đổi.
Bộ sưu tập cuối cùng
Trường hợp khác nhau khi chúng ta đang nói về Bộ sưu tập, bạn cần đặt chúng là không thể thay đổi.
public final static Set VALID_COLORS;
static {
Set temp = new HashSet( );
temp.add(Color.red);
temp.add(Color.orange);
temp.add(Color.yellow);
temp.add(Color.green);
temp.add(Color.blue);
temp.add(Color.decode("#4B0082")); // indigo
temp.add(Color.decode("#8A2BE2")); // violet
VALID_COLORS = Collections.unmodifiableSet(temp);
}
mặt khác, nếu bạn không đặt nó là không thể thay đổi:
Set colors = Rainbow.VALID_COLORS;
colors.add(Color.black); // <= logic error but allowed by compiler
Lớp cuối cùng và Phương thức cuối cùng không thể được mở rộng hoặc ghi đè tương ứng.
EDIT: ĐỂ THÊM CÁC VẤN ĐỀ VỀ VẤN ĐỀ LỚP CUỐI CÙNG:
Có hai cách để làm cho một lớp cuối cùng. Đầu tiên là sử dụng từ khóa cuối cùng trong khai báo lớp:
public final class SomeClass {
// . . . Class contents
}
Cách thứ hai để thực hiện một trận chung kết lớp là khai báo tất cả các hàm tạo của nó là riêng tư:
public class SomeClass {
public final static SOME_INSTANCE = new SomeClass(5);
private SomeClass(final int value) {
}
Đánh dấu nó cuối cùng giúp bạn tránh khỏi rắc rối nếu phát hiện ra rằng nó thực sự là một trận chung kết, để chứng minh cái nhìn về lớp Test này. nhìn công khai từ cái nhìn đầu tiên.
public class Test{
private Test(Class beanClass, Class stopClass, int flags)
throws Exception{
// . . . snip . . .
}
}
Thật không may, vì hàm tạo duy nhất của lớp là riêng tư, nên không thể mở rộng lớp này. Trong trường hợp của lớp Test, không có lý do gì mà lớp phải là cuối cùng. Lớp Test là một ví dụ tốt về cách các lớp cuối cùng ẩn có thể gây ra vấn đề.
Vì vậy, bạn nên đánh dấu nó là cuối cùng khi bạn ngầm hoàn thành một lớp cuối cùng bằng cách đặt nó ở chế độ riêng tư.