9 Cách sửa lỗi NullPointerException trong Java

Chào bạn, là một người đang học Java / lập trình viên Java chắc hẳn bạn cũng đều phải xử lý những lỗi, ngoại lệ.

Và một trong những lỗi, ngoại lệ khá quen thuộc và rất hay mắc phải đó là NullPointerException.

Trong bài viết này chúng ta cùng nhau tìm hiểu về NullPointerException trong Java và cách khắc phục nó như thế nào nhé.

Các sửa lỗi NullPointerException trong Java

Các sửa lỗi NullPointerException trong Java

Nội dung của bài viết này gồm :

  • Cách sửa lỗi NullPointException trong Java

1. Lỗi NullPointerException xảy ra khi nào

NullPointerException (viết tắt NPE) là một RuntimeException. Trong Java, một giá trị null đặc biệt có thể được gán cho một tham chiếu của đối tượng.

Lỗi NullPointerException được ném ra khi chương trình cố gắng tham chiếu tới một đối tượng nhưng nó không có vị trí nào trên bộ nhớ, tức là có giá trị null.

Việc gọi một method tham chiếu null hoặc cố gắng truy cập một trường tham chiếu null là một trong những nguyên nhân phổ biến gây ra lỗi NullPointerException trong Java.

Ngoài ra, một số trường hợp có thể gây ra lỗi NullPointerException như sau:

  • Gọi một phương pháp từ một đối tượng người dùng null
  • Truy cập hoặc sửa đổi một thuộc tính null của object
  • Lấy chiều dài của mảng nhưng mảng đó bị null
  • Truy cập hoặc sửa đổi những vị trí của đối tượng người dùng null, ví dụ là mảng, list, …
  • Ném ra một null như nó là một giá trị Throwable
  • Cố gắng đồng nhất hóa trên một đối tượng người dùng null

Sau đây mình sẽ code demo cho các bạn một trường hợp sinh ra lỗi NPE nhé.

Trong đoạn code này mình sẽ cố tình truy cập vào một phần tử không tồn tại trong mảng và để xem chương trình sẽ in ra cái gì.


/ / Cố gắng tạo ra lỗi NullPointerException

/ / Bằng cách truy vấn phần từ không sống sót trong một mảng

public class Demo {

    public static void main (String[] args) {

        int[] arr = null;

        System.out.print(arr[6]);

}

}
 

Và đây là tác dụng :

Ví dụ về trường hợp xảy ra lỗi NullPointerException trong Java

Ví dụ về trường hợp xảy ra lỗi NullPointerException trong Java

Ở đây mình đã cố tình truy cập vào một phần tử của mảng arr, nhưng mảng này lại có giá trị null. Vì vậy chúng ta sẽ nhận lại được một lỗi NullPointerException.

2. Cách sửa lỗi NullPointerException trong Java

Với những gì đã trình bày ở phần 1, thì làm sao chúng ta có thể khắc phục, tránh được lỗi NullPointerException?

Mình sẽ chia sẻ một vài cách dưới đây.

Cách #1: Sử dụng IDE để tránh lỗi NullPointerException

Ở trong các IDE ví dụ như Eclipse, nó sẽ đưa ra cảnh báo cho bạn về lỗi NPE.

Ví dụ như trong eclipse khi mình code đoạn code ở ví dụ trong phần 1, nó sẽ đưa ra warning, arr[6] sẽ bị kẻ vàng ở bên dưới, khi đó chúng ta trỏ vào arr[6] sẽ hiện lên một cảnh báo như sau:

 

Eclipse IDE hỗ trợ phát hiện lỗi NullPointerException trong Java

Eclipse IDE tương hỗ phát hiện lỗi NullPointerException trong Java

Nhờ sự trợ giúp của IDE, ta có thể chủ động tránh được NPE.

Tuy nhiên không phải trong trường hợp nào IDE cũng phát hiện ra và cảnh báo warning cho bạn đâu nhé.

Vì vậy ta không nên trông chờ quá nhiều vào IDE.

Cách #2: Return một empty collection thay vì giá trị null để tránh lỗi NullPointerException

​Trong Java, mặc định một biến Object được định nghĩa sẽ có giá trị null.

Nếu mọi phương thức đều return về null, thì khi sử dụng chúng ta phải kiểm tra null ở nhiều nơi và điều này không cần thiết cũng như làm cho code rất khó đọc.

Chính vì thế, các Collection như List, Set, Map, … được sử dụng rất nhiều trong ứng dụng.

Đối với Collection, chúng ta có thể sử dụng từ khóa new hoặc sử dụng các phương thức sau để khởi tạo mọi Collection rỗng sử dụng lớp tiện ích java.util.Collections.

  • Đối với List: Collections.emptyList()

  • Đối với Set: Collections.emptySet()

  • Đối với Map: Collections.emptyMap()

Cách #3: Return một giá trị Unkown/Default thay về một giá trị null

 
Ví dụ đoạn code return về một giá trị null


public Data getData(DataType data){

    if(data == 1) {

        return getData();

}

    return null;

}
 

Thay vì return về một giá trị null như bên trên thì bạn nên return về Unkown/Default như sau:


class NullData extends Data {

}

public Data getUser(DataType data){

    if(data == 1) {

        return getData();

    }

    return NullData();

}
 

Cách #4: Luôn kiểm tra null trước khi sử dụng

Đôi khi có 1 số ít trường hợp tất cả chúng ta cần return về null hay trong những mạng lưới hệ thống code cũ ( legacy code ) thì điều này là nên làm .

Cách #5: Kiếm tra String null sau lệnh trim()

Để triển khai cách giải quyết và xử lý NullPointerException này thì hãy xem ví dụ sau :


public static boolean isNullOrEmptyAfterTrim(String str) {

    return (str1 == null || str.trim().length() == 0);

}
 

Cách #6: Khởi tạo giá trị trước khi sử dụng

Ví dụ khi bạn khai báo một Arraylist hay một mảng thì tất cả chúng ta nên khởi tạo giá trị cho nó trước khi sử dụng .


/ / Khởi tạo giá trị so với ArrayList

private List users = new ArrayList<>();

/ / Khởi tạo giá trị so với mảng

int[] arr = new int[length];
 

Trong đó length là số phần tử của mảng

Cách #7: Sử dụng try-catch để bắt lỗi NullPointerException

 
 


/ / Tránh lỗi NullPointerException bằng try catch

try {

    NPE1();

} catch (NullPointerException ex) {

    System.out.println(” Exception in NPE1 ( ) ” + ex);

}
 

Cách #8: Sử dụng Collections.emptyList() để kiểm tra null của một collections.

tại đây.Để tìm hiểu và khám phá cách sử dụng Collections. emptyList ( ) trong giải quyết và xử lý lỗi NullPointerException thì bạn hoàn toàn có thể xem chi tiết cụ thể

Cách #9: Kiểm tra null-safe

Để kiểm tra null-safe bạn hãy viết code một cách khôn ngoan. Ví dụ mình có đoạn code kiểm tra độ dài của chuỗi String.

Nhưng bạn không nên code như thế này:


if (str.equals(” helloworld “)) {}
 

Bởi vì khi biến strnull chúng ta sẽ gặp lỗi NullPointerException đó.

Mà thay vào đó chúng ta nên code như sau:


if (” helloworld “.equals(str)) {}
 

Bạn đã biết các xử lý lỗi NullPointerException trong Java chưa?

Như vậy bạn đã biết lỗi NullPointerException trong java xảy ra khi nào. Và mình cũng đã chia sẻ cho bạn một số cách để chúng ta tránh được lỗi này.

Hi vọng bài viết này giúp ích được cho bạn trong quá trình chinh phục ngôn ngữ Java này.

> Nếu bạn thực sự muốn phát triển xa hơn với ngôn ngữ Java thì nên tham gia ngay KHÓA HỌC JAVA

Hẹn gặp lại mọi người trong những bài viết sau nhé .

Package trong Java> Đọc thêm :

HỌC VIỆN ĐÀO TẠO CNTT NIIT – ICT HÀ NỘI

Học Lập trình chất lượng cao ( Since 2002 ). Học thực tiễn + Tuyển dụng ngay !

Đc : Tầng 3, 25T2, N05, Nguyễn Thị Thập, CG cầu giấy, TP.HN

SĐT : 02435574074 – 0383.180086

E-Mail : [email protected]

Fanpage: https://facebook.com/NIIT.ICT/

# niit # icthanoi # niithanoi # niiticthanoi # hoclaptrinh # khoahoclaptrinh # hoclaptrinhjava # hoclaptrinhphp # java # php # python