I like to see objects validate their own arguments. Trusting the client opens you to misuse and abuse by accidental or malicious incorrect clients.
Design By Contract fans have rigorous techniques for validating arguments.
Java Assertions come close to being a tool for this, but don't quite make it.
I'm lazy myself. If a null argument will cause a null pointer exception I'm more likely to just let it happen than to
test for null and throw an invalid argument exception, unless I can give a really useful message to the user. For example, "You must select a file to delete" is a better message than a generic "Error deleting file" or "Null pointer exception" If I were shrink-wrapping a package for other developers I'd probably work harder to give the most informative exception possible.
You can externalize the validation rules to keep your method code clean and flexible. We pulled a validation component out of
Struts and used it for a while, but it was pretty inconvenient for the value.