我不知道,为什么你需要在java中抛出异常。我只能评估返回值。这是一个例子:
int logic(int i){
switch(i){
case 0:
return 0;
case 1:
return 1;
default:
throw new Exception();
// return -1;
}
}
在默认情况下,我可以抛出异常对象,但我也可以返回-1。这两种方法可以捕获它。为什么我需要抛出异常? 我的英语不是很好,因为英语不是我的主要语言。如果您有什么不明白的地方,请告诉我。感谢。
答案 0 :(得分:2)
在适当的情况下,抛出异常有几个好处:
在某些情况下,返回类型的每个可能值都是有意义的结果。没有用于表示错误的备用值。
异常可以传达更多信息。它可以包含一条消息,解释出现了什么问题。
可以为一段代码捕获异常。每次调用后都必须测试返回值,这会使代码变得混乱。
异常可以在调用堆栈中传递给一个方法,该方法可以比直接调用者更好地报告或处理它。
答案 1 :(得分:0)
我不知道,为什么需要java中的异常。
异常用作运行时故障的指示。例如:某些I / O操作无法执行或指定的资源不可用。在这种情况下,JVM将通过例外方式指示失败。
抛出异常是一回事,处理它们是另一回事。在您的情况下,您正在考虑一种明确抛出异常的情况。但是如果JVM需要扔一个怎么办呢。没有通过返回值的机制。 JVM。
在默认情况下,我可以返回一个值
当您显式抛出已检查的异常时,调用者必须处理它或抛出它。因此,调用者知道该方法能够生成异常,并且可以采取适当的操作来处理它。
答案 2 :(得分:0)
实际上有两种类型的例外,即Checked
和Unchecked
。无需担心处理Unchecked
Exception
。但需要处理Checked
Exception
。
为什么我们需要在Java中检查异常?
已检查的异常与方法签名一样多 方法的名称及其参数,因此异常是其中的一部分 与客户代码签订的合同。他们作为标记 您遇到的错误情况的客户端代码 不知道如何处理或您希望客户端代码知道 关于它可以为你解决问题。
答案 3 :(得分:0)
exception
用于表示某种情况,如果您愿意,例外已经发生,因此需要特别注意。您可以返回不同的整数值来表示您拥有的不同方法的终止状态,但如果您有一个从文件中读取对象并返回它的方法怎么办?
您的方法需要您:
简而言之,如果您使用上述相同的方法并使用异常,则只能返回您正在创建的对象,同时指向方法签名中可能出错的列表,从而使代码更容易阅读,遵循和维护。
简而言之:
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?
}
}