Difference between throw and throws in Java? [duplicate]

Can any one clearly state the difference between throw and throws in Java exception handling with an example? I have tried googling but couldn't arrive at a conclusion. Pls help


Solution 1:

  1. throws clause is used to declare an exception and throw keyword is used to throw an exception explicitly.

  2. If we see syntax wise then throw is followed by an instance variable and throws is followed by exception class names.

  3. The keyword throw is used inside method body to invoke an exception and throws clause is used in method declaration (signature).

For example

throw

throw new Exception("You have some exception")
throw new IOException("Connection failed!!")

throws

public int myMethod() throws IOException, ArithmeticException, NullPointerException {}
  1. You cannot declare multiple exceptions with throw. You can declare multiple exception e.g. public void method()throws IOException,SQLException.

  2. checked exceptions can not be propagated with throw only because it is explicitly used to throw an particular exception. checked exception can be propagated with throws.

Exception propagation: An exception propagates from method to method, up the call stack, until it's caught. So if a() calls b(), which calls c(), which calls d(), and if d() throws an exception, the exception will propagate from d to c to b to a, unless one of these methods catches the exception. what is exception propagation?

Solution 2:

throw use for throwing actual Exception and throws declare at method it might throws Exception.

public int findMax(int[] array) throws Exception{
    if(array==null)
       throw new NullPointerException(...);
    ...
}