有什么区别try{fooBar();}finally{barFoo();}和try{fooBar();}catch(Throwablethrowable){barFoo(throwable);//Doessomethingwiththrowable,logsit,orhandlesit.}我更喜欢第二个版本,因为它让我可以访问Throwable。这两种变体之间是否存在逻辑差异或首选约定?另外,有没有办法从finally子句访问异常? 最佳答案 这是两个不同的东西:只有在tryblock中抛出异常时才会执行catchblock。fin
考虑以下代码:publicObjectgetClone(Cloneablea)throwsTotallyFooException{if(a==null){thrownewTotallyFooException();}else{try{returna.clone();}catch(CloneNotSupportedExceptione){e.printStackTrace();}}//cantbereached,inforsyntaxreturnnull;}returnnull;是必要的,因为可能会捕获到异常,但是在这种情况下,因为我们已经检查了它是否为null(假设我们知道我们正在调用
考虑以下代码:publicObjectgetClone(Cloneablea)throwsTotallyFooException{if(a==null){thrownewTotallyFooException();}else{try{returna.clone();}catch(CloneNotSupportedExceptione){e.printStackTrace();}}//cantbereached,inforsyntaxreturnnull;}returnnull;是必要的,因为可能会捕获到异常,但是在这种情况下,因为我们已经检查了它是否为null(假设我们知道我们正在调用
这个问题在这里已经有了答案:CanIcatchmultipleJavaexceptionsinthesamecatchclause?(10个回答)关闭8年前。我需要捕获两个异常,因为它们需要相同的处理逻辑。我想做类似的事情:catch(Exceptione,ExtendsRuntimeExceptionre){//commonlogictohandlebothexceptions}是否可以避免在每个catchblock中重复处理程序代码? 最佳答案 Java7及更高版本Multiple-exceptioncatches受支持,从Ja
这个问题在这里已经有了答案:CanIcatchmultipleJavaexceptionsinthesamecatchclause?(10个回答)关闭8年前。我需要捕获两个异常,因为它们需要相同的处理逻辑。我想做类似的事情:catch(Exceptione,ExtendsRuntimeExceptionre){//commonlogictohandlebothexceptions}是否可以避免在每个catchblock中重复处理程序代码? 最佳答案 Java7及更高版本Multiple-exceptioncatches受支持,从Ja
我有一种使用JDBC从数据库中获取用户的方法:publicListgetUser(intuserId){Stringsql="SELECTid,nameFROMusersWHEREid=?";Listusers=newArrayList();try{Connectioncon=DriverManager.getConnection(myConnectionURL);PreparedStatementps=con.prepareStatement(sql);ps.setInt(1,userId);ResultSetrs=ps.executeQuery();while(rs.next())
我有一种使用JDBC从数据库中获取用户的方法:publicListgetUser(intuserId){Stringsql="SELECTid,nameFROMusersWHEREid=?";Listusers=newArrayList();try{Connectioncon=DriverManager.getConnection(myConnectionURL);PreparedStatementps=con.prepareStatement(sql);ps.setInt(1,userId);ResultSetrs=ps.executeQuery();while(rs.next())
为什么要在catchblock中调用Thread.currentThread.interrupt()方法? 最佳答案 这样做是为了保持状态。当您捕获InterruptedException并将其吞下时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。通过调用Thread.currentThread().interrupt(),你设置了线程的中断标志,所以更高级别的中断处理程序会注意到它并可以适本地处理它。JavaConcurrencyinPractice在第7.1.3章:响应中断中更详细地讨论了这一点。它的规
为什么要在catchblock中调用Thread.currentThread.interrupt()方法? 最佳答案 这样做是为了保持状态。当您捕获InterruptedException并将其吞下时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。通过调用Thread.currentThread().interrupt(),你设置了线程的中断标志,所以更高级别的中断处理程序会注意到它并可以适本地处理它。JavaConcurrencyinPractice在第7.1.3章:响应中断中更详细地讨论了这一点。它的规
在大学的一个Java问题上,有一段代码:classMyExc1extendsException{}classMyExc2extendsException{}classMyExc3extendsMyExc2{}publicclassC1{publicstaticvoidmain(String[]args)throwsException{try{System.out.print(1);q();}catch(Exceptioni){thrownewMyExc2();}finally{System.out.print(2);thrownewMyExc1();}}staticvoidq()thr