Recent Posts

banner-top-it-job-right.gif

Archive

Tags

Related Posts

10 Lỗi Dễ Mắc Phải Khi Làm Việc Với JAVA


10 Lỗi Dễ Mắc Phải Khi Làm Việc Với JAVA

Trong quá trình làm việc với Java, các nhà lập trình thường bỏ đi những chi tiết nhỏ. Nhưng những chi tiết nhỏ đó sẽ khiến các nhà lập trình hao tốn dung lượng bộ nhớ và không thể tối ưu hóa, bên cạnh đó còn làm giảm sự chuyên nghiệp trong quá trình làm việc. Ở bài viết này JT1 sẽ liệt kê ra các lỗi thường gặp để các bạn có thể theo dõi và loại bỏ những lỗi nhỏ đó nhé!

Dưới đây là 10 lỗi chung mà các nhà lập trình trên nền tảng Java thường mắc phải:

1. Bỏ qua các sửa đổi truy cập

2. Không sử dụng equals()

3. Nối chuỗi

4. Mật khẩu dưới dạng chuỗi

5. Trả về null

6. Truyền null

7. Phương thức nặng

8. Sử dụng các “mã trả lại” thay vì ngoại trừ

9. Chạm vào bộ sưu tập trong khi lặp

10. Sử dụng StringBuffer

Nào chúng ta cùng nhau tìm hiểu về lỗi đầu tiên!

1. Bỏ qua các sửa đổi truy cập

Chúng ta thường quên phạm vi của công cụ sửa đổi truy cập được bảo vệ trong Java. Chúng ta thường chỉ đề cập đến một trong hai vấn đề:

  • Các trường, phương thức và hàm được bảo vệ có thể được truy cập từ cùng 1 gói

  • Các trường, phương thức và hàm được bảo vệ có thể được truy cập từ các lớp con

Điều đó thật tệ, khi không trích dẫn phạm vi mức gói. Vì điều đó chỉ ra rằng bạn chưa bao giờ thử nghiệm một phương thức được bảo vệ( các gói bảo vệ có thể được truy cập từ đường dẫn lớp thử nghiệm, miễn là gói đó giống nhau). Các phương thức công khai và được bảo vệ là một phần của API mà phần mềm của bạn cung cấp.

Khi bạn quên đề cập thì tương đương với lời tuyên bố bạn sẽ chẳng bao giờ có bài viết ý nghĩa cho phần mềm của bạn.

2. Không sử dụng equals()

Nếu bạn sử dụng == thay vì lệnh equals(), kết quả bất ngờ sẽ khiến bạn thay đổi thói quen sử dụng chúng.

sử dụng == thay vì lệnh equals()

Giải thích:

Bạn không bao giờ sử dụng == khi so sánh 2 chuỗi( string) và chung hầu hết các đối tượng. == chỉ so sánh tham chiếu của 2 toán mạng( so sánh địa chỉ bộ nhớ chứ không phải nội dung của chúng.

Trong ví dụ trên, chuỗi y không có lợi cho chuỗi Interning: địa chỉ bộ nhớ của nó khác với địa chỉ của x.

3. Nối chuỗi

Nếu bạn làm việc với một số lượng lớn chuỗi hoặc một chuỗi lớn, bạn có thể lãng phí rất nhiều bộ nhớ trong quá trình nối.

Nối chuỗi

Trong ví dụ trên, chúng ta đang tạo một vài đối tượng stringbuilderstring: 10.000.000 stringbuilder và 10.000.001 string, một cách chính xác!

Giải thích:

Để dễ hiểu chúng ta lùi lại một bước, khi bạn sử dụng phép toán + cho nối chuỗi, bạn đang tạo đối tượng trung gian lưu trữ kết quả của phép nối trước khi gán giá trị của nó cho đối tượng đích.

giải thích

Trong ví dụ trên, chúng ta đã tạo tổng cộng 3 đối tượng: 2 cho chữ và 1 cho phép nối. Đó là bảng sao của kết quả chuỗi đầu tiên cộng với” world”. Điều này xảy xa bởi vì chuỗi là bất biến.

Nhưng trình biên dịch đủ thông minh để chuyển đổi mã thành như sau( không áp dụng cho Java 9+, bởi vì nó sử dụng StringContactFacotry nhưng kết quả khá giống nhau)

sử dụng StringContactFacotry

Việc tối ưu hóa này loại bỏ đối tượng trung gian và bộ nhớ bị chiếm bởi 2 chuỗi ký tự và stringbuilder. Nói chung, số lượng đối tượng Chuỗi giảm từ O (n²) xuống O (n). Quay lại ví dụ đầu tiên, trình biên dịch tối ưu hóa mã như thế này.