有没有一种不那么丑陋的方式来处理close()exception来closures两个stream然后: InputStream in = new FileInputStream(inputFileName); OutputStream out = new FileOutputStream(outputFileName); try { copy(in, out); } finally { try { in.close(); } catch (Exception e) { try { // event if in.close fails, need to close the out out.close(); } catch (Exception e2) {} throw e; // and throw the 'in' exception } } out.close(); […]
当决定是否将throws子句添加到方法或使用try-catch时,一般的经验法则是什么? 从我自己读过的内容来看,当调用者打破了合同结束时(被传递的对象),应该使用这个throws,并且当在一个正在进行的操作中发生exception时,应该使用try-catch方法。 它是否正确? 如果是这样,来电方应该做些什么? PS:通过谷歌和SOsearch,但要在这一个明确的答案。
我写了一些代码来testingtry-catch的影响,但看到了一些令人惊讶的结果。 static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); elapsed = stop – start; avg […]
通过阅读本论坛中已经提出的与上述主题相关的所有问题(见标题),我彻底明白finally总是被称为。 (从System.exit和无限循环除外)。 不过,我想知道是否在catch块中调用return ,然后从finally块中调用另一个return 。 例如: public static void main(String[]args) { int a = new TestClass().absorbeTheValue(); } int absorbeTheValue() { try { int a = 10/0; if (a > 0) return 4; } catch(Exception e) { return 45; } finally { return 34; } } 所以在这里输出(当调用方法的时候)在任何情况下都是34。 这意味着最后总能得到运行。 我认为其他的“回报”根本没有运行。 在许多文章中,我发现最终将内容写入已经由catch子句返回的内容。 我的理解是,只要catch语句中的返回值即将被评估,控制stream就会传递给finally语句,而finally语句又会有另一个返回语句,这次返回值将被评估,而不会将控制权交还给catch语句。 这样,在运行时调用的唯一return将是最终的返回。 你同意吗? finally的return不会将控制权交给程序,而是返回值并终止方法。 我们可以这样说吗?
我需要捕获第三方库清理操作中的分段错误。 有时候会在我的程序退出之前发生,而我无法解决这个问题的真正原因。 在Windows编程中,我可以用__try – __catch来做到这一点。 是否有跨平台或平台特定的方式来做同样的事情? 我需要在Linux,gcc。
try { int* p = 0; *p = 1; } catch (…) { cout << "null pointer." << endl; } 我试图捕捉这样的exception,但它不工作,有任何帮助?
在php 5中使用try-catch语句时需要考虑什么样的性能影响? 我以前在网上阅读过一些关于这个主题的旧的,看似矛盾的信息。 我目前必须使用的许多框架都是在PHP 4上创build的,缺less很多php 5的优点。所以,我没有太多的经验来使用php的try-catchs。
通常我把所有的主要方法代码放在一个try / catch块中,如下所示: public static void Main(string[] args) { try { // code } catch (Exception e) { // code } } 我这样做是为了防止任何exception从程序逻辑的其余部分中跳出来,从而允许我做一些事情,比如将其显示到控制台,将其logging到文件等。但是,我被告知这是不好的做法。 你认为这是不好的做法吗?
哪一个: using (var myObject = new MyClass()) { try { // something here… } catch(Exception ex) { // Handle exception } } 要么 try { using (var myObject = new MyClass()) { // something here… } } catch(Exception ex) { // Handle exception }
try-catch意在帮助处理exception。 这意味着它会帮助我们的系统更健壮:尝试从意外事件中恢复过来。 我们怀疑执行和指令(发送消息)时可能发生的事情,所以它被包含在try中。 如果发生几乎意想不到的事情,我们可以做一些事情:我们写出来。 我不认为我们打电话来loggingexception。 我的catch块是为了给我们从错误中恢复的机会。 现在,让我们说,我们从错误中恢复,因为我们可以解决什么是错的。 做一个重试可能是非常好的: try{ some_instruction(); } catch (NearlyUnexpectedException e){ fix_the_problem(); retry; } 这会很快落在永恒的循环中,但是让我们说fix_the_problem返回true,然后我们重试。 鉴于Java中没有这样的事情,你将如何解决这个问题? 什么是你最好的devise代码来解决这个问题? 这就像一个哲学问题,因为我已经知道我所要求的并不是Java直接支持的。