title: Why would you ever implement finalize()?
body: <p>I've been reading through a lot of the rookie Java questions on <code>finalize()</code> and find it kind of bewildering that no one has really made it plain that finalize() is an unreliable way to clean up resources.  I saw someone comment that they use it to clean up Connections, which is really scary since the only way to come as close to a guarantee that a Connection is closed is to implement try (catch) finally.  </p>
  
  <p>I was not schooled in CS, but I have been programming in Java professionally for close to a decade now and I have never seen anyone implement <code>finalize()</code> in a production system ever.  This still doesn't mean that it doesn't have its uses, or that people I've worked with have been doing it right.</p>
  
  <p>So my question is, what use cases are there for implementing <code>finalize()</code> that cannot be handled more reliably via another process or syntax within the language?  </p>
  
  <p>Please provide specific scenarios or your experience, simply repeating a Java text book, or finalize's intended use is not enough, as is not the intent of this question.</p>