I hate the
word "always" because it means you just have to find ONE example that causes that to not be true, and the whole item is then not-true.
case in point:
c) An overriding finalize () in any class can always throw checked exceptions. I just thought of a situation where this is not true.
IF you override the finalize() method, AND in overriding it you do not specify any throws declarations, then in the body of your finalize() you throw a new checked exception, it won't compile. So C is true IF you make the assumption that you are declaring any check exceptions you are throwing, but I don't think you can make that assumption. So this one failure causes C to be false.

I didn't think about this case originally.
My argument is still correct however, that since the Object class's version of finalize() declares it throws a
Throwable, ANY overriding version of this method can throw any exception at all it wants,
provided of course it declares the exceptions it throws in the method declaration with a 'throws' clause So I think D is the only correct answer.
Rob
[ January 23, 2002: Message edited by: Rob Ross ]