Java - 如何尝试和捕获异常处理运行

问题描述:

我几乎全新的Java编程,我试图了解try和catch异常处理是如何运行的。Java - 如何尝试和捕获异常处理运行

我的疑问是,当我创建一个自定义的异常类,并将它放在主类的try块中时,我可以实例化它而不用引用,但是当我编写catch块时,我可以使用成员没有实例化它的同类实例化异常类。

例如:

public void main.....{ 

..... 

try{ 

    if(division==0){ 

     throw new DivisionByZero() ; 
     //Divisionbyzero is my customized exception class 

    } 

} 

catch(DivisionByZero e) { 

    e. methodDivisionByZero; 

} 

} 

的一点是,我可以直接使用电子部件不受新手段实例化。 当我抛出异常(即使我没有在try块中写入任何引用)之前,e会以某种方式实例化吗?

在此先感谢您的任何答案。

+1

好吧,当你说'抛出新的DivisionByZero'你会实例化那个自定义异常。 –

+1

当你定义一个catch块时,你只是告诉编译器哪种类型的异常将被捕获,你没有在那里实例化它们。 –

关于第一个问题我可以实例它不参考:这是没有必要的情况下分配给任何引用变量。我们使用引用变量,以便将来可以使用它的成员。

而对于第二个问题我可以用一个成员的同类实例化异常类没有实例化它:当你写

throw new DivisionByZero() ;` this is equal to 
DivisionByZero dBZException = new DivisionByZero() ; 
throw dBZException; 

这意味着要传递一个实例在catch块中你有参考变量DivisionByZero

因此,在catch块你的代码是这样的:

DivisionByZero e = dBZException; 

希望它现在清楚了。

+0

非常有用! – Gianni

创建一个新的对象:

throw new DivisionByZero() ; 

投掷/捕获只是一个 “运输的平均值”。在“本质”,这就像写:

DivisionByZero dbz = new DivisionByZero() ; 
dbz.someMethod(); 

您创建一个例外,你把“它”,你赶上“它”,然后“它”是什么都没有,但一些对象的引用。

+0

*投掷/捕捉只是一种“交通工具”。*好解释 –

当引发异常时,将创建一个异常对象,并在try块中不执行更多的行。该异常对象与catch块参数相匹配,最适合的参数变量中的对象接收对象,就像方法参数一样。在这种情况下,catch(DivisionByZero e)正确的catch子句应该是catch(ArithmeticException e)以捕获被零除异常并且参数e是对异常对象的引用。

问题是,我可以直接使用e成员,而无需通过新的方式实例化它。

那么你不需要这里任何情况下,在catch块类似的方法调用,我们传递一个**[reference][1]**,这里对应当处理的异常的引用。

你可以看到,如果你看看The catch Blocks Oracle Docs

每个catch块是一个例外处理程序,处理异常由其参数所指定的类型。参数类型ExceptionType声明了处理程序可以处理的异常类型,并且必须是从Throwable类继承的类的名称。处理程序可以用名称引用异常。

+1

感谢大家。 – Gianni

+0

非常有意义的答案。感谢你的回答,我在Java编程方面更有专长。 – Gianni

+0

@Gianni不客气。 –