문제

C++에서 우리는 획득하는 리소스에서 생성자 및 출시에 소멸자.

그래서 때로는 예외로 상승에서 중간의 기능이 없을 것 자원 누설하거나 잠 뮤텍스 또는 어떤 것이다.

AFAIK java 클래스가 없 소멸자입니다.그래서 어떻게 하나 할 수 있는 리소스 관리 Java.

예를 들어:

public int foo() {    
    Resource f = new Resource();
    DoSomething(f);
    f.Release();
}

수있는 방법 중 하나는 출시 자원면 DoSomething 예외가 발생?우리는 할 수 있습지도\catch 블록 모든 코드,우리가?

도움이 되었습니까?

해결책

네 당신이해야 할 수 있습을 넣어도/catch/마지막으로 블록의 주위에 당신의 코드입니다.C#있는 간단한"사용"문지만,자바와 함께 붙어 있:

public int foo() {
    Resource f = new Resource();
    try {
        DoSomething(f);
    }
    finally {
        f.Release();
    }
}

다른 팁

이 질문 날짜를 2008 따라서 관련 Java6.그 이후 Java7 출시되었습니다 포함하는 새로운 기능을 위한 자동적인 자원 관리.에 대한 더 많은 최근의 질문에 관련된 Java7 이 질문:

java 기술에 대한 자동적인 리소스 버전은 무엇입니까?"프롬프트를 정리"?

그것은 가능한 요인을 시도/마지막으로(그리고 예외 및 알고리즘)를 사용하여 실행하는 주위 사용합니다.그러나 구문을 매우 자세한 정보를 표시합니다.

public int foo() {
    withResource(new WithResource() { public void run(Resource resource) {
        doSomething(resource);
    }});
}

...

public interface WithResource {
    void run(Resource resource);
}

public static void withResource(WithResource handler) {
    Resource resource = new Resource();
    try {
        handler.run(resource);
    } finally {
        resource.release();
    }
}

이 종류의 것은 의미가 더 당신은 추상화보다 더 많은 시도/마지막으로.예를 들어,JDBC 실행할 수 있습니다,성명을 반복을 통해,결과를 가까이 리소스와 랩은 예외는 아니다.

당신이 원하는 경우 이를 사용하여 블록에 참여 java 퍼 논:S

죄송하는 당신을 실망시키지만 우리는 Java 를 사용하려고\catch\마지막으로 블록을 많이합니다.그리고"많은"나는 의미 .때 원하는 자바 C#를 사용하여 블록입니다.대부분의 시간이 필요하지 않 자원으로 자바의 쓰레기 수집가는 것이 알아서 하지 않습니다.

그러나 예외들의 용기에 오류 처리하는 많은 깨끗합니다.당신이 자신을 작성할 수 있습니다 예외 및 그들을 잡을 위해 당신이 무엇을 하고 있다.더 이상 돌아온 임의 오류 코드를 사용자!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top