Đây vốn là hai lỗi khá phổ biến khi ta lập trình và hay gặp phải. Cá nhân tôi từ khi học nhập môn tới bây giờ, có nhiều lúc gặp lỗi tôi cũng…bỏ đi đâu đó thật xa và ngồi nghiệm lại. Rất chán khi gặp tình trạng nhấn nút Debug và rồi một loạt lỗi ngập tràn trên màn hình, không chạy được dòng code nào cả.

Hoặc thú vị hơn, nó chạy mà trớt quớt! Trường hợp thứ hai này đáng sợ không kém, nhưng nếu ngồi bình tâm đọc lại (chắc sẽ tốn thời gian đấy) thì vấn đề sẽ từ từ hiện ra.

Bài này chỉ dựa trên hiểu biết cá nhân của tôi, không phải cho thương mại hay giáo trình nên chưa chắc những gì tôi hiểu đã đúng. Mà thường hiểu sai thì tôi không viết đâu.

Compile-Time error hay có thể hiểu đơn giản là lỗi về Syntax (cú pháp). Lấy ví dụ, nếu ta viết một dòng code như sau, bạn thử nêu ra xem nó có dính tồi tâm chưởng không nhé.

System.out.println(votinhthuong9@gmail.com);

Dính là cái chắc đấy! Hãy nhìn một loạt từ phần Object tới Method xem. System.out đúng rồi, không viết sai cũng không chấm (dot) sai chỗ. println cũng đúng luôn, không sai cú pháp.

Vậy tại sao lại sai?

Đơn giản là phần trong ngoặc. Lệnh xuất ra màn hình sẽ chấp nhận 2 trường hợp (đã nói trong Java bài 3) là xuất số và chuỗi. Số thì có rất nhiều dạng số, còn chuỗi thì là chuỗi thôi. Mà chuỗi thì phải có dấu ngoặc kép bao đóng ở bên ngoài lại. Chính là vấn đề đó!

Và với Compile-Time error, nó sẽ phân tích code của bạn (thật ra là chạy tuần tự theo thứ tự lập trình mà người viết mã nguồn Java quy định thôi) và nếu gặp lỗi, nó dừng lại ngay. Trong trường hợp này, code không thể nào cho ra kết quả.

Còn về Runtime error, bạn sẽ khó thấy hơn. Bởi vì mọi thứ vẫn chạy tốt, xuất ra hoàn hảo, nhưng nhìn kĩ thì thấy nó…kì kì!

Ta lấy ví dụ giản đơn.

System.out.println(“Vo Thuog”);

Chạy đúng không? Dĩ nhiên!

Nhưng xuất ra màn hình là cái gì? Có phải là chuỗi “Vo Thuog” không? Nếu vậy thì sao phán sai?

Là do cái chuỗi đó viết sai tên tôi! Lỗi này có thể hiểu là lỗi luận lý (logic) cũng được.

Ví dụ này mang tính cục bộ quá. Ví dụ cái mang tính khái quát hơn.

System.out.println(9/0);

Ồ ồ… lỗi Runtime luôn! Không thể nào thực hiện phép chia cho 0 được cả.

Nếu cảm thấy chưa thấu suốt vấn đề (viết vầy mà chưa hiểu thì…) bạn có thể tham khảo thêm trên Quora hoặc StackOverFlow tại 2 địa chỉ sau đây.

Quora

StackOverFlow

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com

Advertisements