由于JVM异常是JVM独占或最逻辑抛出的异常或错误。
程序化异常是应用程序和/或API程序员使用throw关键字显式抛出的异常。
现在进入异常层次结构:基本上分为3个主要类别:我与上述类别有关,即JVM异常和程序异常。
How to differentiate between Programmer and JVM Exceptions
我正在阅读上面的链接,其中有两件事情在我脑海中浮现,我想验证它们
答案 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());
}
}
在上面的例子中
我们可以以编程方式抛出任何错误,因为JVM生成的异常可以以编程方式抛出。
以编程方式生成JVMException的意义是什么,即应该何时以编程方式抛出JVM生成的异常
在上面的示例中听到我也可以通过使用任何异常,即ArrayIndexOutOfBount或其他任何方式以编程方式抛出JVMException。但重要性取决于应用程序的用法。因为我的应用程序是关于金额变为零时发送警报所以我使用Pro-grammatically我自己的例外。