문제
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 이 질문:
그것은 가능한 요인을 시도/마지막으로(그리고 예외 및 알고리즘)를 사용하여 실행하는 주위 사용합니다.그러나 구문을 매우 자세한 정보를 표시합니다.
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#를 사용하여 블록입니다.대부분의 시간이 필요하지 않 자원으로 자바의 쓰레기 수집가는 것이 알아서 하지 않습니다.
그러나 예외들의 용기에 오류 처리하는 많은 깨끗합니다.당신이 자신을 작성할 수 있습니다 예외 및 그들을 잡을 위해 당신이 무엇을 하고 있다.더 이상 돌아온 임의 오류 코드를 사용자!