2013-03-14 5 views
1

조슈아 블로흐 (Joshua Bloch)의 "Effective Java"항목 7 초판에서 그는 특히 파일 닫기와 관련하여 finally 문을 사용하지 말 것을 권장합니다. "파일 닫기에 최종 결정자에 의존하는 것은 심각한 오류입니다. 두 페이지 나중에 그는 그것이 합법적 인 두 개의 사용 사례 중 하나가 종료 방법을finalisers, closing files and streams

Foo foo = new Foo(); 
try{ 
    ///process foo 
} finally{ 
    foo.terminate(); 
} 

클래스는 FileInputStream에와 FileOutputStream에 포함 명시 적 종료 방법 패턴에 있음을 말한다. 그렇다면 결국 finally 문에서 파일을 닫지 않을까요?

1) Joshua Bloch의 Item 7은 모순입니까?

2) 종료 방법 패턴이 필요합니까? 동일한 효과를 낼 finally 문없이 위의 코드를 작성할 수 있습니까?

+7

파이 나라를 확인! = 마지막으로 – Perception

+0

'InputStream'가 종료 할 방법이 없습니다. 어쩌면 당신은'Closeable' 인터페이스의'close()'메소드를 의미 할 수도 있습니다. –

답변

2

나는 저자가 대신 finalize 방법 (이것은 종결 자입니다)에 완화의 자원을 청소/종료 try-catch에서 (이것은 파이널되지 않습니다) 당신이 finally 블록 코드를 사용한다는 것을 의미 있다고 생각한다. 파이 나라에 대한 자세한 정보를 들어

When is the finalize() method called in Java?