Hi, finalize() method can throw any exception, checked, unchecked whatsoever. The point to note is that if an excption is thrown by finalize, then the exception will be ignored, and the finalization process of the object will be terminated. So if it is overridden, your version should be able to throw any exception that you want it to throw, because your exception will be a subclass of throwable. Here is what the API says about it

If an uncaught exception is thrown by the finalize method, the exception is ignored and finalization of that object terminates. Any exception thrown by the finalize method causes the finalization of this object to be halted, but is otherwise ignored