Not necessarily. The JVM may exit before finalize() will be called. The only thing that can be said about finalize() is that it is called at most once for each instance and if it will be invoked this will occur before the object is garbage collected.
But programmers have no control over when it will or will not be called.