Java 在同一方法中使用抛出和尝试捕获
我们可以用同样的方法使用投掷和试抓吗Java 在同一方法中使用抛出和尝试捕获,java,exception,try-catch,throws,illegalaccessexception,Java,Exception,Try Catch,Throws,Illegalaccessexception,我们可以用同样的方法使用投掷和试抓吗 public class Main { static void t() throws IllegalAccessException { try{ throw new IllegalAccessException("demo"); } catch (IllegalAccessException e){ System.out.println(e); } } public static void mai
public class Main
{
static void t() throws IllegalAccessException {
try{
throw new IllegalAccessException("demo");
} catch (IllegalAccessException e){
System.out.println(e);
}
}
public static void main(String[] args){
t();
System.out.println("hello");
}
}
显示的错误为
Main.java:21: error: unreported exception IllegalAccessException; must be caught or declared to be thrown
t();
^
1 error
因此,我考虑修改代码,并在main()方法中添加了另一个throws语句,其余的都是相同的
public class Main
{static void t() throws IllegalAccessException {
try{
throw new IllegalAccessException("demo");
} catch (IllegalAccessException e){
System.out.println(e);
}
}
public static void main(String[] args) throws IllegalAccessException{
t();
System.out.println("hello");
}
}
但现在我得到了所需的输出。
但是我有一些问题
我们可以用单一的方法来使用投掷和尝试捕捉吗?
在我的例子中,是否有必要添加two-throws语句,如果没有,请告诉我在代码中添加的适当位置?
void t() throws IllegalAccessException
您告诉编译器此代码抛出异常(是否抛出是另一回事),因此任何调用此方法的方法要么捕获它,要么声明它也抛出它,等等
由于实际上没有从t
引发异常,因此可以删除该声明
void t()
是的,您可以,常见的用法是抛出一个
IllegalStateException
,使用tryCatch来使用另一种类型的异常,如NullPointerException
,或者使用tryCatch来捕获与用户无关的异常,如初始化java.awt.Robot
的实例。否,您不需要任何抛出
语句,因为任何方法实际上都不会抛出任何选中的异常。实际上,我是从t()方法抛出一个异常。你能告诉我我是否可以用同样的方法投掷和接球吗?不,你不能。您正在从try
块中抛出它,它被捕获。不需要将其声明为投掷。