throw and throws in Java
throw
Java中的throw关键字用于显式地从方法或任何代码块中引发异常。我们可以抛出已检查或未检查的异常。throw关键字主要用于抛出自定义异常。
Syntax:
throw Instance
Example:
throw new ArithmeticException("/ by zero");
But this exception i.e, Instance must be of type Throwable or a subclass of Throwable. For example Exception is a sub-class of Throwable and user defined exceptions typically extend Exception class. Unlike C++, data types such as int, char, floats or non-throwable classes cannot be used as exceptions.
但是这个例外就是,实例的类型必须为Throwable的或子类的Throwable。例如,Exception是Throwable的子类,用户定义的异常通常扩展Exception类。与C ++不同,int,char,float或non-throwable类等数据类型不能用作异常。
The flow of execution of the program stops immediately after the throw statement is executed and the nearest enclosing try block is checked to see if it has a catch statement that matches the type of exception. If it finds a match, controlled is transferred to that statement otherwise next enclosing try block is checked and so on. If no matching catch is found then the default exception handler will halt the program.
执行throw语句后,程序的执行流程立即停止,并检查最近的封闭try块以查看它是否具有与异常类型匹配的catch语句。如果找到匹配,则将受控转移到该语句,否则检查下一个封闭try块,依此类推。如果未找到匹配的catch,则默认异常处理程序将暂停程序。
// Java program that demonstrates the use of throw
class ThrowExcep
{
static void fun()
{
try
{
throw new NullPointerException("demo");
}
catch(NullPointerException e)
{
System.out.println("Caught inside fun().");
throw e; // rethrowing the exception
}
}
public static void main(String args[])
{
try
{
fun();
}
catch(NullPointerException e)
{
System.out.println("Caught in main.");
}
}
}
Output:
Caught inside fun().
Caught in main.
Another Example:
// Java program that demonstrates the use of throw
class Test
{
public static void main(String[] args)
{
System.out.println(1/0);
}
}
Output:
Exception in thread "main" java.lang.ArithmeticException: / by zero
throws关键字
throws is a keyword in Java which is used in the signature of method to indicate that this method might throw one of the listed type exceptions. The caller to these methods has to handle the exception using a try-catch block.
throws是Java中的一个关键字,用于方法的签名,以指示此方法可能会抛出一个列出的类型异常。这些方法的调用者必须使用try-catch块来处理异常。
Syntax
type method_name(parameters) throws exception_list
exception_list is a comma separated list of all the
exceptions which a method might throw.
In a program, if there is a chance of rising an exception then compiler always warn us about it and compulsorily we should handle that checked exception, Otherwise we will get compile time error saying unreported exception XXX must be caught or declared to be thrown. To prevent this compile time error we can handle the exception in two ways:
两种方式异常处理
By using try catch
By using throws keyword
We can use throws keyword to delegate the responsibility of exception handling to the caller (It may be a method or JVM) then caller method is responsible to handle that exception.
// Java program to illustrate error in case
// of unhandled exception
class tst
{
public static void main(String[] args)
{
Thread.sleep(10000);
System.out.println("Hello Geeks");
}
}
Output:
error: unreported exception InterruptedException; must be caught or declared to be thrown
Explanation : In the above program, we are getting compile time error because there is a chance of exception if the main thread is going to sleep, other threads get the chance to execute main() method which will cause InterruptedException.
// Java program to illustrate throws
class tst
{
public static void main(String[] args)throws InterruptedException
{
Thread.sleep(10000);
System.out.println("Hello Geeks");
}
}
Output:
Hello Geeks
Explanation : In the above program, by using throws keyword we handled the InterruptedException and we will get the output as Hello Geeks
Another Example:
// Java program to demonstrate working of throws
class ThrowsExecp
{
static void fun() throws IllegalAccessException
{
System.out.println("Inside fun(). ");
throw new IllegalAccessException("demo");
}
public static void main(String args[])
{
try
{
fun();
}
catch(IllegalAccessException e)
{
System.out.println("caught in main.");
}
}
}
Output:
Inside fun().
caught in main.
Important points to remember about throws keyword:
关于throws关键字要记住的要点
throws keyword is required only for checked exception and usage of throws keyword for unchecked exception is meaningless.
throws keyword is required only to convince compiler and usage of throws keyword does not prevent abnormal termination of program.
By the help of throws keyword we can provide information to the caller of the method about the exception.