Tag: try catch

Java catch块,捕获exception不是最终的

我正在查看Java SE7的新function,目前我正在这里: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html 关于catch多function,当我遇到这个声明时: 注意:如果catch块处理多个exception类型,则catch参数隐式为final。 在此示例中,catch参数ex是final,因此您无法在catch块中为其分配任何值。 我从未注意到在处理捕获的exception的经典案例中,捕获的exception不是最终的。 我只是想知道为什么这首先是一件好事? 在猜测重新抛出它或者记录它的消息之前,对于一个被捕获的exception进行必要的修改是不是不明智? 是否应该由创建exception的trowing机制来完成它应该代表什么呢? 我从来没有看到在catch块中修改exception可能有人指出它的好处? 谢谢!

JVM如何保证finally块的执行?

这个问题针对的是JVM如何能够保证finally块的执行 (假设JVM没有崩溃并且线程没有被中断或退出)。 在面试问题的提示下,我试图了解JVM如何确保即使在奇怪的情况下也能执行finally块…请考虑以下代码: try{ int[] someArray = new int[10]; int invalid = someArray[10]; } catch(IndexOutOfBoundsException e){ throw new RuntimeException(“Other Exception”); } finally{ //close open files or HTTP connections etc. } 虽然这可能是一个奇怪的情况,但仍然保证执行finally块,尽管没有明确处理其他exception 。 JVM如何处理这样的情况? 我的想法: 根据我的理解并且到目前为止已经读过,当遇到未处理的exception时,控制从当前线程传递到我认为的那个线程的ThreadGroup 。 ThreadGroup中是否有一些条款可以检查最终需要执行的块? 我能想到的唯一另一件事就是finally块的地址可能存储在某个地方。 然后JVM在检测到exception时执行goto,并在finally块执行完毕后返回exception。 谁能澄清这个过程究竟是如何发生的?

在finally块中为null赋值null

以下代码的输出是“Test Passed”; 谁能解释一下为什么? public class Test { public static void main(String args[]) { System.out.println(new Test().print()); } protected StringBuilder print() { StringBuilder builder = new StringBuilder(); try { builder.append(“Test “); return builder.append(“Passed!!!”); } finally { builder = null; } }

每个例外都有必要的试用吗?

一个简单的问题,我找不到答案。 Java中的每个exception都需要使用try-catch吗? 或者仅适用于FileNotFoundException? 很多exception(IndexOutOfBoundException,ArithmeticException,IlligalArgumentException,NullPointerException)都表示他们不需要Exception,但是FileNotFoundException确实如此)……我找不到答案,哪些不需要try-catch 。

如何用NoSuchAlgorithmException和KeyStoreException覆盖JUnit的块捕获

我想覆盖getKeyStore()方法,但我不知道如何为NoSuchAlgorithmException,KeyStoreException,UnrecoverableKeyException和CertificateException覆盖catch块。 我的方法是: public static KeyManagerFactory getKeyStore(String keyStoreFilePath) throws IOException { KeyManagerFactory keyManagerFactory = null; InputStream kmf= null; try { keyManagerFactory = KeyManagerFactory.getInstance(“SunX509”); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keystoreStream = new FileInputStream(keyStoreFilePath); keyStore.load(keystoreStream, “changeit”.toCharArray()); kmf.init(keyStore, “changeit”.toCharArray()); } catch (NoSuchAlgorithmException e) { LOGGER.error(ERROR_MESSAGE_NO_SUCH_ALGORITHM + e); } catch (KeyStoreException e) { LOGGER.error(ERROR_MESSAGE_KEY_STORE + e); } catch (UnrecoverableKeyException e) { […]

Java Swing GUI Try / Catch Block

我只是学习Javaexception处理和Java。 我做了一个Swing GUI,用户将整数输入两个字段,然后单击带有算术function的单选按钮,答案将出现在第三个文本字段中。 我希望包含一个try / catch块来捕获exception,如果用户将前两个字段中的一个留空或者输入除整数之外的其他字段,如果用户试图除以零则返回第二个字段。 该表单在function上有效,但不会捕获错误,只返回堆栈跟踪并使程序崩溃。 我有一种感觉,我只是在错误的地方有try / catch块,但是我越是将它移动到更糟糕的地方。 有人能说出错的地方吗? import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.WindowConstants; import javax.swing.SwingUtilities; public class Main extends javax.swing.JFrame { private JTextField aTextField; private JRadioButton dRadioButton; private ButtonGroup buttonGroup; private JLabel aLabel; private JRadioButton cRadioButton; private JRadioButton bRadioButton; private JRadioButton […]

无法弄清楚如何捕获InputMismatchException

所以这是我当前捕获InputMismatchException错误的代码 int weapon = 0 boolean selection = true; while(selection) { try { System.out.println(“Pick number 1, 2, or 3.”); weapon = scan.nextInt(); selection = false; } catch(InputMismatchException e) { System.out.println(“Choose 1,2,3”); weapon = scan.nextInt(); } } 我正在尝试确保输入int而不是其他任何东西。 扫描仪类已经实现,“扫描”将对我起作用。 感谢您的帮助!

尝试catch阻塞导致无限循环?

我正在写一个简单的java控制台游戏。 我使用扫描仪从控制台读取输入。 我试图validation它我要求一个整数,如果输入一个字母,我不会收到错误。 我试过这个: boolean validResponce = false; int choice = 0; while (!validResponce) { try { choice = stdin.nextInt(); validResponce = true; } catch (java.util.InputMismatchException ex) { System.out.println(“I did not understand what you said. Try again: “); } } 但它似乎创建了一个无限循环,只是打印出catch块。 我究竟做错了什么。 是的,我是Java新手

如何在InputMismatchException之后重试输入?

我正在创建一个从用户获取输入的程序。如果用户输入无效命令,我想重新运行输入选项。 像这里只有整数输入是首选,但如果用户输入文本,那么我想捕获exception并重新运行该方法。 我试过这个但是它把我变成了一个无限循环。这是实现这个目标的最好方法。 如果有人帮助我这件事会很棒。 boolean retry = true; while(retry){ try{ //considering response from the user System.out.print(“\nEnter Your Command : “); f_continue = processresponse(scanner.nextInt()); retry = false; }catch(InputMismatchException e){ System.err.println(“\nPlease Input a Valid Command from 1-5 or 0 for Exit”); } }

while循环不能使用Try / Catch语句

我试图让用户有机会在介绍产生错误的东西之后重复输入但是有些东西不起作用,因为一旦错误被捕获,尝试的东西不再被执行,而是直接进入捕获的东西产生永恒cicle。 这是我的代码: while (err==1){ err=0; try{ dim = keyboard.nextInt(); } catch(Exception e){ System.out.println(“Oops! What you entered is not an integer.”); err=1; } }