1: Một số từ ngữ: Chúng tôi không khởi tạo các đối tượng, chúng tôi khởi tạo các lớp và sản phẩm của một khởi tạo lớp là một đối tượng (còn được gọi là một thể hiện). Tất nhiên chúng ta có thể khởi tạo một lớp nhiều lần theo yêu cầu để tạo một đối tượng mới và khác nhau với mỗi lần khởi tạo.
2: Sao cũng được, bạn không thể có mã bạn đề xuất:
Test test = new Test();
Test test = new Test();
không bạn có thể có điều này:
for (i=0; i<3; i++) {
Test test = new Test();
Test test = new Test();
}
Không có gì sẽ biên dịch, vì phần Test test
này là khai báo biến test
(loại Test
) và không có ngôn ngữ nào, kể cả Java, cho phép khai báo hai lần cùng một biến trong cùng một phạm vi.
Tuy nhiên, bạn có thể gán nhiều lần cho cùng một biến (như tên ngụ ý), với các đối tượng khác nhau, như thế này:
Test test = new Test();
test = new Test();
Dòng đầu tiên khai báo test
và gán cho nó một đối tượng mới được tạo. Dòng thứ hai gán cho test
một đối tượng khác, cũng mới được tạo.
Cũng lưu ý rằng các phím tắt được cho phép trong Java:
for (i=0; i<3; i++) {
Test test = new Test();
}
Vòng lặp này sẽ không khai báo test
3 lần. Nó được hiểu là gán ba đối tượng khác nhau mới theo thứ tự cho biến test
sẽ chỉ được khai báo một lần. (so sánh với vòng lặp trước).
3: Điều gì xảy ra với biến test
và hai đối tượng cùng loại Test
?
Biến test
đầu tiên được gán tham chiếu của một đối tượng, sau đó của một đối tượng khác. Một biến chỉ giữ lại tham chiếu cuối cùng được gán.
Đối tượng đầu tiên của loại Test
không được gán cho test
nữa. Nếu không có biến nào khác được gán tham chiếu của nó, thì đối tượng này không thể được truy cập theo bất kỳ cách nào bởi chương trình, và do đó là vô ích. Nó được thực hiện đủ điều kiện để thu gom rác bởi hệ thống. Tại một số thời điểm, hệ thống (JVM) sẽ chạy trình thu gom rác của nó, nó sẽ xóa nó khỏi bộ nhớ.
Đối tượng thứ hai sẽ sống miễn là có ít nhất một biến tham chiếu đến nó, sau đó trình thu gom rác cũng sẽ chăm sóc nó và đưa nó đến Nghĩa trang đối tượng không được ước tính. Đó là cuộc sống thực sự của các đối tượng Java :-(