¿Java soporta RAII / destrucción determinista?

Han pasado al menos 5 años desde que trabajé con Java, y en aquel entonces, cada vez que quería asignar un objeto que necesitaba limpieza (por ejemplo, sockets, manijas de base de datos), tenía que recordar agregar unfinally bloquear y llamar al método de limpieza allí.

Por el contrario, en C ++ (u otros lenguajes donde las vidas de los objetos son deterministas, por ejemplo, Perl), el implementador de la clase definiría una función destructora que realiza la limpieza cada vez que un objeto de esa clase queda fuera de alcance. La ventaja de este enfoque es que el usuario del objeto no puede olvidarse de limpiarlo: se llama automáticamente al destructor, incluso si se produce una excepción. Este enfoque se conoce con el nombre bastante horrible de RAII: "La adquisición de recursos es la inicialización".

Según mi experiencia, hacer las cosas "a la manera RAII" me ha ahorrado una gran cantidad de gastos mentales en términos de no tener que preocuparme acerca de si y cuándo ocurren las asignaciones de recursos. Estamos considerando usar Java para un proyecto de tamaño mediano, y me pregunto si algún tipo de destrucción determinista es una de las muchas características nuevas agregadas al lenguaje desde la última vez que lo vi. (Tengo la esperanza de que mi queja de que "Java no tiene RAII" haya sido reprendidaen este hilo, pero hasta ahora no he podido encontrar ningún detalle buscando en Google).

Entonces, si alguien pudiera señalarme algún material introductorio sobre cómo hacer esto en Java, ¡sería genial!

Respuestas a la pregunta(4)

Su respuesta a la pregunta