2012-06-22 5 views
3

메소드 인수에 전달되는 Java 오브젝트의 수명은 얼마입니까? 예를 들어Java 오브젝트의 수명

나는 객체 테스트

class Test{ 

    public string testType(){ 
     ..... 
    } 
} 

하고 난 이제 테스트 개체의 생명은 무엇인가 두 클래스 A와 B

class classA{ 

    classB b = new classB(); 

    void nextQuestion{ 
     b.start(new Test()); 
    } 
} 




class classB{ 
    void start(Test test){ 
     doSomething(test.testType()); 
    } 
} 

있나요? 시작 방법이 끝날 때까지 또는 클래스 B가 끝날 때까지 또는 클래스 A가 끝날 때까지 살아 있거나 다른 것일 때까지 살아날 것입니까?

+0

적어도'start()'메소드가 실행을 마칠 때까지 살아있을 것이고, 객체에 대해서는 _no_ 보장이 있습니다 메모리는 프로그래머가 아닌 가비지 수집 자에 의해 관리되므로 Java의 수명이 길어집니다. –

답변

6

최소한 길이가 끝날 때까지 start() 방법으로 선언됩니다. 그곳에 선언 되었기 때문에 그 범위입니다. 그 이상으로, 그 존재는 가비지 컬렉터의 손에 달려 있습니다.


편집 : start()의 말까지

그 방법은 그것을 실행의 종료까지 내 말은. 그리고 비록 당신이 보여준 변경을하더라도, start() 메소드에 의해 여전히 Object이 필요하므로, start() 메소드의 실행이 끝날 때까지 가비지 컬렉터에 달려 있다는 것을 제외하고는 적어도 여전히 존재할 것입니다.

+3

* 적어도 start()의 끝까지 *. – Blindy

+0

예. 어리석은 실수. 수정 됨. –

2

new Test()을 호출하면 수명이 시작되고 start 메서드가 완료된 후에는 언제든지 가비지 수집기에서 해방 될 수 있습니다. 컴파일 시점에 증명할 수 있기 때문에 그 시점 이후에는 절대 사용되지 않습니다. 그 참조가 해제 될 때까지

start 방법은, 오브젝트를 참조하기 위해 정전기 필드를 설정 (예) 것 인 경우에, 가비지 수집기를 수집 할 수있다 :

private static Test lastTested; 
... 

void start(Test test){ 
    lastTested = test; 
    doSomething(test.testType()); 
} 
2

정확한 수명에 의해 결정된다 가비지 수집기 : 개체에 대한 참조가 없으면 GC에서 회수 할 수 있습니다. 귀하의 경우 적어도 ClassB.start() 끝날 때까지 살 것입니다. 일단 그 방법이 끝나면 더 이상의 참조가 없습니다.