-1

因为 JVM 异常是 JVM 专门或最符合逻辑地抛出的那些异常或错误。

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

现在来到异常层次结构:基本上分为3大类:我与上述类别有关,即JVM Exceptions和Programmatic Exception。

  1. 未选中(错误和 RunTimeException):JVM 或编程
  2. 检查异常:程序化。

如何区分程序员和 JVM 异常

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

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

3 回答 3

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。但重要性取决于应用程序的使用情况。因为我的应用程序都是关于在金额变为零时发送警报所以我在语法上使用了我自己的异常。

于 2013-09-23T11:46:40.137 回答
0

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

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

于 2013-09-23T11:34:49.183 回答
0

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

于 2013-09-23T11:12:47.227 回答