Từ khoá final trong java với ví dụ cụ thể

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về từ khoá final trong java. Final có thể sử dụng với biến, methodclass.

Biến final trong java

Một biến đi với từ khoá final được hiểu là một hằng số trong java. Đồng nghĩa với việc chúng ta không thể thay đổi giá trị của các biến final sau khi nó được khởi tạo.

Biến final có giá trị đầu

// File Demo.java
public class Demo{

    final int MAX_VALUE=99;
    void myMethod(){
        MAX_VALUE=101;
    }
}
// File Main.java
public class Main {
    public static void main(String args[]){
        Demo obj=new  Demo();
        obj.myMethod();
    }
}

Output:

Error:(5, 9) java: cannot assign a value to final variable MAX_VALUE

Note: Các hằng số trong Java sẽ được đặt tên bằng các chữ cái in hoa. Giữa các chữ cách nhau bằng ký tự (_).

Biến final không có giá trị đầu

Một biến final khi được khai báo mà không gán giá trị được gọi là biến final không có giá trị đầu. Những biến final không có giá trị đầu này phải được khởi tạo giá trị trong constructor. 

// File Demo.java
public class Demo{

    final int MAX_VALUE;
    Demo() {
        MAX_VALUE = 99;
    }
}
// File Main.java
public class Main {
    public static void main(String args[]){
        Demo obj=new  Demo();
        System.out.println(obj.MAX_VALUE);
    }
}

Output: 99

Khởi tạo biến final thông qua static block

Ngoài việc khởi tạo biến trong constructor, chúng ta còn có thể khởi tạo chúng trong static block.

// File Demp.java
public class Demo{  
   static final int MAX_VALUE;
   static{ 
      MAX_VALUE = 12;
   }  
}
// File Main.java
public class Main {
    public static void main(String args[]){
        Demo obj=new  Demo();
        System.out.println(obj.MAX_VALUE);
    }
}

Output: 12

Final method trong java

Final method sẽ không thể override. Nghĩa là các class con có thể sử dụng các method final của class cha thế nhưng chúng không thể override lại method đấy.

// File A.java
public class A {
    final void display() {
        System.out.println("method class A");
    }
}
// File B.java
public A class B extends A{
    public void display() {
        System.out.println("Method class B");
    }
}

Với code của class B như trên chúng ta sẽ gặp lỗi compile, method  display() không thể override. 

Thế nhưng bỏ qua class B, chúng ta có Main.java như sau

public class Main {
    public static void main(String args[]){
        A a = new A();
        a.display();
    }
}

Output: method class A

Final class trong java

Chúng ta không thể extends một final class trong java, xem ví dụ dưới đây.

// File A.java
public final class A {
    final void display() {
        System.out.println("method class A");
    }
}

// File B.java
public class B extends A {
}

Với cách viết như trên chúng ta sẽ gặp lỗi compile rằng không được thừa kế từ class A.

Note

  1. Một constructor không thể khai báo với từ khoá final.
  2. Biến final có thể khởi tạo lúc khai báo biến, constructor và static block.
  3. Tất cả các biến được khai báo bên trong interface được mặc định là final.
  4. Chúng ta không thể thay đổi giá trị của các biến final sau khi nó đã được khởi tạo.
  5. Final method không thể override.
  6. Nếu các tham số đầu vào của method được khai báo với từ khoá final thì nó sẽ không thể thay đổi giá trị trong quá trình thực thi code bên trong method đó.
  7. Biến final được đặt tên bằng chữ cái in hoa, mỗi chữ cách nhau bằng ký tự _.
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x