Khi bạn khởi tạo một biến cuối cùng, bạn không thể sửa đổi thêm giá trị của nó. tức là bạn chỉ có thể gán giá trị cho biến cuối cùng một lần. Nếu bạn cố gắng gán giá trị cho một biến cuối cùng, lỗi thời gian biên dịch sẽ được tạo ra.
Ví dụ
public class FinalExample { final int j = 100; public static void main(String args[]){ FinalExample obj = new FinalExample(); obj.j = 500; System.out.println(obj.j); } }
Lỗi thời gian biên dịch
FinalExample.java:6: error: cannot assign a value to final variable j obj.j = 500; ^ 1 error
Đạt được chức năng "cuối cùng"
Để đạt được chức năng cuối cùng mà không thực sự sử dụng từ khóa cuối cùng -
Đặt biến ở chế độ riêng tư và đặt giá trị cho nó bằng cách sử dụng phương thức setter để nếu bạn cố gọi nó lần thứ hai, nó sẽ đặt giá trị trước đó hoặc ném một ngoại lệ.
Ví dụ
public class FinalExample { private Integer num; public void setNum(int num){ this.num = this.num == null ? num : this.num; } private String data; public void setData(String data) { this.data = this.data == null ? data : demo(); } public String demo() { String msg = "You cannot set value to the variable data for the second time"; throw new RuntimeException(msg); } public static void main(String args[]){ FinalExample obj = new FinalExample(); obj.setNum(200); System.out.println(obj.num); obj.setNum(500); System.out.println(obj.num); obj.setData("hello"); obj.setData("sample data"); } }
Đầu ra
200 200 Exception in thread "main" java.lang.RuntimeException: You cannot set value to the variable data for the second time at SEPTEMBER.remaining.FinalExample.demo(FinalExample.java:15) at SEPTEMBER.remaining.FinalExample.setData(FinalExample.java:12) at SEPTEMBER.remaining.FinalExample.main(FinalExample.java:26)