Generally speaking, if you have a project with 1000 classes and each class has 20 functions, thats 20000 functions. Checking input arguments and throwing exceptions for many of the 20000 functions will flood your code with validation checks. I prefer instead to add javadoc to the function saying your input argument to your function cannot be negative (and also, what the function is for). This way, the user (programmer) of your function does not have to examine the content of your function to determine how to use it and what is invalid. Also, his IDE's intellisense will pop up the javadoc message as he is using the function to provide that information. If he violates the javadoc, consider letting the function or one of the functions it calls throw an exception up the the call stack without explicitly doing so, or letting the function not work as expected without throwing an exception. You may consider explicitly thowing an exception if you think providing an invalid input will produce some odd behavior that isn't easy to track down. The javadoc will help him track down the problem without having to specifically throw an exception. Once the business logic is debugged throughly, exceptions being thrown should not happen often unless there is a bug in the business logic.
I don't believe exceptions should be part of validating user input. Your user input should be validated throughly before it gets to the business logic, not when it gets to a business logic function. Same argument about validating an uploaded xml document. Check it against an xml schema before passing it to the business logic. Your validation logic should be based on true/false (validation passed), not on throwing an exception for invalid input.