3)Why should we declare the exception in method header in case of checked exceptions ? what benefits are we getting by declaring exception in method header?
Checked exceptions must be caught somewhere within your application. If the function is not able to properly deal with the exception, it should not catch it, but has to let it propagate up the call stack to someone who does catch it. That's the reason for "throws Exception", to propagate the exception up the call stack instead of dealing with it right there.
4)Why do not we declare the exception in method header in case of unchecked exceptions?
It's mostly for programmer convenience. It would be horrible to have to try/catch everything that could possibly be null, for example. Unchecked exceptions get caught by the JVM and printed to System.err.