저는 Java 클래스의 학생이며, 오늘날 Java에 대해 배웠습니다. 내가 어떻게 그리고 왜 교사에게 물었을 때 그는 그 행동에 대해 확신하지 못했습니다. 왜 다음 예제가 효과가 있는지 설명 할 수 있습니까?자바 스코프 : 메서드 내부에서 인스턴스화 된 객체 반환 - 위험한가?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
내가 다른 클래스와 "반환"객체의 메서드 내 "예"의 인스턴스를 생성한다면, 그것은 성공적으로 밖으로 점프는 원래의 범위이고 연속적으로 사용 할 수 있습니다.
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);
}
}
이것은 작동하지만이 동작은 안정적입니까? 이거 믿어도 될까요? 가비지 수집기가 한 메소드의 return 문과 호출하는 함수의 대입문 사이를 건너 뛸 수 있습니까? 내 OS 버전의 JVM을 기반으로 실패 위험을 감수하고 있습니까? 이것은 신뢰할 수있는 경우 편리한 기능처럼 보입니다.
나는 당신이 여기서 묻고있는 것을 이해한다고 말할 수 없다. "원래의 범위에서 뛰어 내리다"는 것은 무엇을 의미합니까? 당신은 C++ 프로그래머입니까? –
수명과 범위가 혼동을줍니다. 범위는 변수에, 수명은 객체에 해당한다고 생각하십시오. –