为什么你需要在java中抛出异常

时间:2014-01-28 08:25:23

标签: java exception

我不知道,为什么你需要在java中抛出异常。我只能评估返回值。这是一个例子:

int logic(int i){
      switch(i){
           case 0:
           return 0;
           case 1:
           return 1;
           default:
           throw new Exception();
           // return -1;
      }
} 

在默认情况下,我可以抛出异常对象,但我也可以返回-1。这两种方法可以捕获它。为什么我需要抛出异常? 我的英语不是很好,因为英语不是我的主要语言。如果您有什么不明白的地方,请告诉我。感谢。

5 个答案:

答案 0 :(得分:2)

在适当的情况下,抛出异常有几个好处:

在某些情况下,返回类型的每个可能值都是有意义的结果。没有用于表示错误的备用值。

异常可以传达更多信息。它可以包含一条消息,解释出现了什么问题。

可以为一段代码捕获异常。每次调用后都必须测试返回值,这会使代码变得混乱。

异常可以在调用堆栈中传递给一个方法,该方法可以比直接调用者更好地报告或处理它。

答案 1 :(得分:0)

  

我不知道,为什么需要java中的异常。

异常用作运行时故障的指示。例如:某些I / O操作无法执行或指定的资源不可用。在这种情况下,JVM将通过例外方式指示失败。

抛出异常是一回事,处理它们是另一回事。在您的情况下,您正在考虑一种明确抛出异常的情况。但是如果JVM需要扔一个怎么办呢。没有通过返回值的机制。 JVM。

  

在默认情况下,我可以返回一个值

当您显式抛出已检查的异常时,调用者必须处理它或抛出它。因此,调用者知道该方法能够生成异常,并且可以采取适当的操作来处理它。

答案 2 :(得分:0)

实际上有两种类型的例外,即CheckedUnchecked。无需担心处理Unchecked Exception。但需要处理Checked Exception

为什么我们需要在Java中检查异常?

  

已检查的异常与方法签名一样多   方法的名称及其参数,因此异常是其中的一部分   与客户代码签订的合同。他们作为标记   您遇到的错误情况的客户端代码   不知道如何处理或您希望客户端代码知道   关于它可以为你解决问题。

Read more.

答案 3 :(得分:0)

exception用于表示某种情况,如果您愿意,例外已经发生,因此需要特别注意。您可以返回不同的整数值来表示您拥有的不同方法的终止状态,但如果您有一个从文件中读取对象并返回它的方法怎么办?

您的方法需要您:

  1. 让您的方法返回一个项目列表,从而使您的代码更加复杂。
  2. 有一些文档来表示return语句中的不同数字是什么意思。这可能很麻烦,特别是如果你不够小心并采用某种标准。
  3. 简而言之,如果您使用上述相同的方法并使用异常,则只能返回您正在创建的对象,同时指向方法签名中可能出错的列表,从而使代码更容易阅读,遵循和维护。

    简而言之:

    public List loadObjectFromFile(String path)
    {
         List returnList = new ArrayList();
         ...
         //Something goes wrong in your code
         returnList.add("1");
    }
    

    然后你这样称呼它:

    List loadFromFile = loadObjectFromFile("...");
    if(list.get(0).toString().equals("1"))
    {
        System.out.println("Error ... has occured");
    }
    ...
    else if(list.get(0).toString().equals("0"))
    {
        MyObject obb = loadFromFile.get(1);
    }
    

    相反:

    public MyObject LoadObject(String filePath) throws Exception
    {
        ...
    }
    

    然后这样称呼它:

    try
    {
        MyObject obj = LoadObject("...");
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    

答案 4 :(得分:0)

首先,您应该从不 throw new Exception()。这是非常糟糕的做法,因为它鼓励捕捉Exception。这意味着代码会以相同的方式处理所有异常,即您捕获您不想要的异常。

因此,您应该创建自定义异常类型或使用现有异常类型之一。也许像IllegalArgumentException之类的东西。关于何时抛出未经检查(扩展RuntimeException的异常)与已检查异常的争论很多。我现在不会进入那个。

至于为什么要抛出异常而不是return -1,这是由于异常的性质。他们“传播”。您可以将它们放在一个方法中,它们会自动传播到调用堆栈中,直到它们被捕获为止。这意味着您可以在业务层中抛出异常并将其传播到GUI层,而无需显式return错误代码。

此外,当错误采用void方法时会发生什么:

void logic(int i){
      switch(i){
           case 0:
             doSomethingWonderFul();
           case 1:
             doSomethingEvenMoreWonderFul();
           default:
             //oops, what now?
      }
}