相关疑难解决方法(0)

哪个更好/更有效:检查错误值或捕获Java中的异常

哪个在Java中更有效:检查错误值以防止异常或让异常发生并捕获它们?

以下是两个示例代码块,用于说明这种差异:

void doSomething(type value1) {
    ResultType result = genericError;

     if (value1 == badvalue || value1 == badvalue2 || ...) {
          result = specificError;
     } else {
          DoSomeActionThatFailsIfValue1IsBad(value1);
          // ...
          result = success;
     }
     callback(result);
}
Run Code Online (Sandbox Code Playgroud)

void doSomething(type value1) {
     ResultType result = genericError;
     try {
          DoSomeActionThatFailsIfValue1IsBad(value1);
          // ...
          result = success;
     } catch (ExceptionType e) {
          result = specificError;
     } finally {
          callback(result);
     }
}
Run Code Online (Sandbox Code Playgroud)

一方面,你总是在进行比较.另一方面,老实说,我不知道系统的内部做什么来生成异常,抛出它,然后触发catch子句.它有效率较低的声音,但如果它不会在非错误情况下增加开销,那么它的平均效率会更高.这是什么?它是否会添加类似的检查?是否在为异常处理添加的隐式代码中检查,即使有额外的显式检查层?也许它总是取决于异常的类型?我不考虑什么?

让我们假设所有"坏值"都是已知的 - 这是一个明显的问题.如果您不知道所有错误的值 - 或者列表太长且不规则 - 那么异常处理可能是唯一的方法.

那么,每种方法的优缺点是什么?为什么?

需要考虑的问题:

  • 如果值在大多数情况下是"坏"(会抛出异常),你的答案会如何变化?
  • 这有多少取决于正在使用的VM的细节?
  • 如果要求语言-X提出同样的问题,答案会有所不同吗?(更一般地说,问题是否可以假设检查值总是比依赖异常处理更有效,因为它增加了当前编译器/解释器的开销.) …

java error-handling optimization performance exception

14
推荐指数
3
解决办法
2557
查看次数

何时在Java中使用异常(示例)

我知道这是不好的做法,虽然我知道我无法解释原因.

int [] intArr = ...
...
try{
   int i = 0;
   while(true){
      System.out.println(intArr[i++]);
   }
}catch(ArrayIndexOutOfBoundsException e){}
Run Code Online (Sandbox Code Playgroud)

我认为你只应该对不应该发生的事情使用例外.我问这个问题是因为我认为我有时会使用异常错误.如果你的编程运行一个标准的情况应该抛出异常?

这似乎是相关的: 防止异常与捕获Java中的异常

java exception-handling exception

12
推荐指数
3
解决办法
9739
查看次数

除RuntimeException之外的异常

除了Java中的RuntimeException之外,是否有可能发生异常?谢谢.

java exception

2
推荐指数
2
解决办法
2628
查看次数

捕获异常后是否可以调用main(String [] args)?

我正在研究一个Serpinski三角形程序,它要求用户绘制三角形的水平.为了防止我的程序出现白痴,我把它放在:

Scanner input= new Scanner(System.in);
System.out.println(msg);
try {
    level= input.nextInt();
} catch (Exception e) {
    System.out.print(warning);
    //restart main method
}
Run Code Online (Sandbox Code Playgroud)

如果用户用字母或符号打孔,是否有可能在捕获到异常后重新启动main方法?

java exception-handling

1
推荐指数
1
解决办法
1955
查看次数