Tôi là một sinh viên trong lớp Java và đã học được điều gì đó về Java ngày hôm nay làm cho bánh răng của tôi quay lại. Khi tôi hỏi giáo viên như thế nào và tại sao, anh không chắc chắn về hành vi đó. Bất cứ ai có thể giải thích lý do tại sao ví dụ sau đây hoạt động?Phạm vi Java: Trả về một đối tượng được khởi tạo bên trong một phương thức - Có nguy hiểm không?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
Nếu tôi là để tạo ra một thể hiện của "Ví dụ" bên trong một phương pháp khác lớp và "trở lại" các đối tượng, nó có thể thành công thực hiện chuyển ra khỏi nó là phạm vi ban đầu và được sử dụng sau đó.
class ParentObject {
// Instance Variables
public Example a;
public ParentObject (int number) {
// Initialize instance variable object from out-of-scope instantiation
this.a = genExample(number);
// Verify scope creep
System.out.println(this.a.getExVal());
}
public Example genExample (int a) {
return new Example(a);
}
}
Điều này hoạt động, nhưng hành vi này có ổn định không? Tôi có thể tin vào điều này? Bộ thu gom rác có thể nhảy vào giữa câu lệnh trả về của một phương thức và câu lệnh gán của hàm gọi không? Tôi có đang gặp nguy cơ thất bại dựa trên phiên bản JVM của hệ điều hành của tôi không? Điều này có vẻ như chức năng tiện dụng nếu nó có thể được dựa vào.
Không thể nói tôi hiểu những gì bạn đang yêu cầu ở đây. Bạn có ý gì khi "nhảy ra khỏi phạm vi ban đầu của nó"? Bạn có phải là lập trình viên C++ không? –
Bạn đang phạm vi khó hiểu với thời gian sống. Hãy nghĩ về phạm vi liên quan đến các biến, tuổi thọ đối với các đối tượng. –