VicoTas
Câu hỏi
avatar tybaby9
13/07/2013 09:56

Xin hỏi NullPointerException trong Java có nghĩa là gì? Cứ mỗi khi sử dụng Array tôi lại bị lỗi này?

Xin hỏi NullPointerException trong Java có nghĩa là gì? Cứ mỗi khi sử dụng Array tôi lại bị lỗi này. Nếu được xin cho biết một vài phương pháp để tránh Exception này.

Danh sách câu trả lời (1)
avatar duc_tam379 25/05/2013 20:34
Khi lập trình bằng Java (hay 1 ngôn ngữ hướng đối tượng khác), bạn nên phân biệt 2 kiểu dữ liệu khác nhau:

• Kiểu dữ liệu cổ điển (định sẵn) như int, double... Một biến thuộc kiểu dữ liệu loại này sẽ chứa trực tiếp giá trị thuộc kiểu tương ứng. Thí dụ 1 biến nguyên (int) chứa 1 giá trị nguyên cụ thể tại từng thời điểm, thường nếu sau khi định nghĩa biến mà chưa gán tường minh giá trị cho biến thì mặc định chương trình dịch sẽ gán trị 0 cho biến đó. Tóm lại, sau khi định nghĩa 1 biến dữ liệu cổ điển, bạn có thể truy xuất nội dung của biến bất kỳ lúc nào (cho dù giá trị truy xuất được có phù hợp với yêu cầu của bạn hay không).

• Kiểu dữ liệu đối tượng (tên của 1 class hay 1 interface). Một biến thuộc kiểu dữ liệu đối tượng không chứa trực tiếp nội dung của đối tượng, nó chỉ chứa thông tin để tham khảo tới đối tượng cần truy xuất. Sau khi định nghĩa 1 biến đối tượng, biến chưa tham khảo tới bất kỳ đối tượng nào cả (người ta dùng thuật ngữ "NullPointer" để miêu tả trạng thái này của biến đối tượng). Khi biến chưa tham khảo đến đối tượng cụ thể thì ta không thể truy xuất thuộc tính hay gọi tác vụ của đối tượng tương ứng, nếu ta cố tình truy xuất thuộc tính hay gọi tác vụ của đối tượng thông qua biến đối tượng đang ở trạng thái "NullPointer", máy sẽ tạo lỗi Exception tên là NullPointerException. Tóm lại, đối với biến đối tượng, trước khi truy xuất nó, ta phải gán tường minh tham khảo đến đối tượng cần thiết (thường dùng lệnh new để tạo đối tượng mới). Đoạn code Java sau demo việc dùng biến đối tượng một cách đúng đắn:

MyClass mv; //định nghĩa biến đối tượng, nhưng chưa thể dùng nó
...
mv = new MyClass(); //tạo đối tượng MyClass và gán tham khảo của nó vào biến mv
mv.x = 5; //gán 5 vào thuộc tính x của đối tượng
mv.op1(10); //gọi tác vụ op1 của đối tượng.

Lưu ý rằng nếu bạn chưa tạo đối tượng và gán tham khảo của nó vào biến mv thì khi truy xuất thuộc tính hay gọi tác vụ thông qua biến mv, máy sẽ báo lỗi NullPointerException.

Về biến array, đa số các ngôn ngữ khác cho phép khai báo tĩnh số lượng phần tử trong lệnh định nghĩa biến array (thí dụ trong C, ta có thể viết lệnh : int a[10];), nhưng trong Java, khi định nghĩa biến array, ta không được phép miêu tả tĩnh số lượng phần tử của array mà phải yêu cầu phân phối động thông qua lệnh new khi cần thiết. Đoạn code Java sau demo việc dùng biến array đúng đắn:

int a[]; //định nghĩa biến array, nhưng chưa nói chính xác có bao nhiêu phần tử.
...
a = new int[10]; //xin phân phối 10 phần tử a[0] tới a[9]
a[0] = 0; //gán 0 vào phần tử a[0]
a[9] = 9; //gán 9 vào phần tử a[9]
Lưu ý rằng nếu bạn chưa dùng lệnh new để yêu cầu phân phối các phần tử cho dãy a thì bạn không thể truy xuất bất kỳ phần tử a nào (vì chưa có).
Trả lời câu hỏi
Tải lại mã
Câu hỏi lĩnh vực Lập trình
nophoto Xin hướng dẫn lập trình giao diện cho phần mềm bằng VC# để không phụ thuộc vào giao diện của hệ điều hành như Windows Vista, XP?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Xin hỏi cách dùng opendialog và savedialog trong VB 6?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Xin hướng dẫn viết một phần mềm có thể lấy dữ liệu từ một máy chủ (đặt ở đâu đó) thông qua đường truyền Internet?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Xin hướng dẫn lập trình VB đặt dữ liệu (âm nhạc, hình ảnh, video..) vào file DAT hay 1 file nào đó và cách đọc nó?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Xin hướng dẫn lập chương trình Java dựa vào lớp TCP SOCKET?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Làm sao để điều chỉnh kích thước các column trong Datagrid theo giá trị của người lập trình VB.Net hoặc C#.Net?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Dùng VB 6.0 để vẽ biểu đồ và hiển thị trên form, khi dùng lệnh PrintForm thì chỉ in được tối đa là phân nửa trang giấy A4?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Tôi có 1 chương trình tự viết dựa trên các chương trình mẫu của Access và muốn bổ sung chức năng (nút) “Ghi” khi nhập dữ liệu xong?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Xin chỉ cách viết code VC++ bằng MFC tạo ngân hàng câu hỏi trong tập tin đuôi *.txt?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

nophoto Các bạn hướng dẫn cho mình cách lưu ảnh trong Visual C?

Đăng lúc: 20:34 - 25/05/2013 trong Lập trình

Link Trong C# làm cách nào để hiển thị hình ảnh trong RichTextBox?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Thư viện VB có hàm nào tương tự FDIST và FINV trong Excel không?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Xin hỏi cách dùng GridBagLayout trong thư viện swing (java) ?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Muốn dồn nội dung của các Richtextbox vào 1 Richtextbox mà vẫn giữ nguyên định dạng, ảnh, công thức thì làm thế nào?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

lighting Trên 1 trang web có 1 bảng dữ liệu thường xuyên cập nhật. Tôi muốn viết chương trình tự động copy bảng dữ liệu này về máy tính?

Đăng lúc: 17:12 - 03/07/2013 trong Lập trình

nophoto Để lập trình game có nhất thiết phải biết ngôn ngữ C++ hay không?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Cho biết các hàm liên quan tới việc đọc/ghi trong thư viện dos.h (như absread(), abswrite()...)?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Cho hỏi cách set font máy tính cho khớp với font của Data Report để in tiếng Việt trong VB 6.0?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

Mạnh Linh Hướng dẫn thuật toán chung để nhận dạng ảnh đơn giản gồm 2 dòng chữ là các ký tự chữ và số (0-9), được quy định theo 1 font cố định?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

nophoto Cho hỏi trong Pascal có lệnh nào dùng để chạy 1 chương trình có truyền tham số không?

Đăng lúc: 20:33 - 25/05/2013 trong Lập trình

Rao vặt Siêu Vip