1.Mảng trong Java

  • Trong thực tế thì tất cả các ngôn ngữ lập trình đều hỗ trợ mảng. Sử dụng mảng trong C hay C++ thật sự rất nguy hiểm vì chúng chỉ là một block của bộ nhớ. Nếu một chương trình truy cập mảng block bộ nhớ đó hoặc sử dụng bộ nhớ trước khi khởi tạo thì sẽ cho ra kết quả không mong muốn hoặc xảy ra lỗi.
  • Mục đích đầu tiên của Java là an toàn, nên có những vấn đề mà người lập trình trong C hay C++ không được phép lặp lại trong Java. Mảng trong Java phải được đảm bảo là chúng đã được khởi tạo và không được truy cập bên ngoài phạm vi của nó. Khi tạo một mảng đối tượng, thì thật sự ta đang tạo một mảng các tham chiếu, và mỗi tham chiếu đó tự động khởi tạo một giá trị đặc biệt, đó là null.
  • Khi Java nhận thấy giá trị null, thì nó biết rằng tham chiếu đó không trỏ đến một đối tượng nào cả. Và ta phải gán một đối tượng cho mỗi tham chiếu trước khi sử dụng nó. Nếu cứ cố gắng sử dụng tham chiếu đó trong lúc nó mang giá trị null thì lỗi run-time xảy ra.

2.Phạm vi của các đối tượng

Các đối tượng Java không có cùng vòng đời như kiểu nguyên thủy. Khi tạo một đối tượng Java sử dụng toán tử new, thì nó vẫn treo lơ lẫn đâu đó ở cuối phạm vi.

Ví dụ:

{
  String s = new String("a string");
} /* end of scope */

Biến tham chiếu s thì được giải phóng vào cuối phạm vi. Tuy nhiên, đối tượng String mà biến s trỏ tới vẫn còn tồn tại trong bộ nhớ. Và trong đoạn code trên thì không có cách nào truy cập vào lại đối tượng bởi vì chỉ có một tham chiếu đến nó nhưng đã nằm ra ngoài phạm vi. Đơn giãn, Java đã có garbage collector để xử lý công việc giải phóng. Nói cách khác, G.C nhìn thấy được tất cả các đối tượng tạo ra từ toán tử new và kiểm tra xem chúng có còn được tham chiếu đến hay không, sau đó nó sẽ giải phóng bộ nhớ cho các đối tượng đó để bộ nhớ có thể sử dụng cho các đối tượng mới.
Điều này có nghĩa rằng, trong Java ta không cần quan tâm đến việc phục hồi bộ nhớ vì đơn giãn đã có G.Collector.

Bạn thấy bài viết này thế nào?