我们可以使用throw显式抛出任何错误或异常吗?

时间:2013-09-23 11:01:49

标签: java exception

由于JVM异常是JVM独占或最逻辑抛出的异常或错误。

程序化异常是应用程序和/或API程序员使用throw关键字显式抛出的异常。

现在进入异常层次结构:基本上分为3个主要类别:我与上述类别有关,即JVM异常和程序异常。

  1. 未选中(错误和运行时异常):JVM或Programmatic
  2. Checked Exception:Programmatic。
  3. How to differentiate between Programmer and JVM Exceptions

    我正在阅读上面的链接,其中有两件事情在我脑海中浮现,我想验证它们

    1. 我们能否以编程方式抛出任何错误,因为JVM生成的异常可以以编程方式抛出。
    2. 以编程方式生成JVMException的意义是什么,即何时应该以编程方式抛出JVM生成的异常
    3. 在上面的链接“Chris Lively”中写道AsserionError不能以编程方式抛出哪些应该是错误的。

3 个答案:

答案 0 :(得分:0)

引用问题最有价值的答案是:“不存在这样的区别”。我只能同意这句话。所以,(i)是,(ii)如果有某种原因这样做,比如说,一个中间方法调用系统方法,捕获一个“JVM”异常,并重新抛出它,(iii)AssertionError可以抛出任何其他Throwable的。

答案 1 :(得分:0)

如果有意义的话,您的异常层次结构可以从标准库中“借用”类(例如,IllegalArgumentException可用于特定于应用程序的输入验证,而IndexOutOfBoundsException可用于具有数字索引的任何数据结构)但是因为您关心您的代码抛出的异常,这些类是否属于一组模糊定义的JVM抛出异常是无关紧要的。

Checked vs unchecked也不是一个基本的区别:同一个异常类,从同一个地方抛出并在同一个地方捕获相同的处理,也可以。 您可能更喜欢确保捕获已检查的异常的便利性,或者为未经检查的异常添加无聊的 throws 子句的便利性,并且您可以轻松改变主意。

答案 2 :(得分:0)

假设我们有一个银行应用程序,当保存金额变为零或小于零时发送警告消息。

 public class AmountZeroException extends Exception
 {
 }

 public class SavingAmount
 {
    public private int amount;
   public void PrintAmountFromSaving()throws AmountZeroException
   {
     System.out.println("your account balance is "+amount);
     if(amount<=0)
     throw AmountZEroEXception();
   }


   public static void main(String...k)
   {
     SavingAmount sa=new SavingAmount();
     System.out.println(sa.PrintAmountFromSaving());
   }
 }

在上面的例子中

  1. 我们可以以编程方式抛出任何错误,因为JVM生成的异常可以以编程方式抛出。

  2. 以编程方式生成JVMException的意义是什么,即应该何时以编程方式抛出JVM生成的异常

    在上面的示例中听到我也可以通过使用任何异常,即ArrayIndexOutOfBount或其他任何方式以编程方式抛出JVMException。但重要性取决于应用程序的用法。因为我的应用程序是关于金额变为零时发送警报所以我使用Pro-grammatically我自己的例外。