Tag: exception处理

如何检查数组元素是否为null以避免Java中的NullPointerException

我有一个部分nfilled对象数组,当我遍历它们时,我试图检查所选对象是否为null之前我用它做其他的东西。 但是,即使是通过NullPointerException检查它是否为null的行为。 array.length也将包括所有null元素。 你如何检查数组中的null元素? 例如,在下面的代码中将为我抛出一个NPE。 Object[][] someArray = new Object[5][]; for (int i=0; i<=someArray.length-1; i++) { if (someArray[i]!=null) { //do something } }

使用注释进行exception处理?

假设我有一种抛出某种exception的方法。 抛出exception的代码位于访问外部服务的第三方库中。 我有一些类可以与外部服务进行大量的工作,并且在整个过程中有很多exception处理来处理潜在的问题。 我遇到的问题是我可能有很多例外,但我可能只需要执行一些操作,如果有的话,并且有大量的try / catch块。 exception的类型甚至可能不相关,或者不同的方法可能抛出相同类型的exception,但是根据抛出它的方法需要采取不同的操作。 我正在寻找的是一个可以取代try / catch的注释,并简单地指示当该方法中存在exception时要采取的行为。 我知道Spring ApsectJ可以做到这一点,但我现在无法轻松添加任何新的依赖项或修改pom来调整现有的依赖项。 因此,我希望通过自定义注释可以实现这一点。 例如: @Catcher(action=SomeEnum.SOME_ACTION) public void doSomething(ServiceObj obj) throws SomeException { ExternalService.makeThingsHappen(obj); } 当然,我会假设一个单独的类会处理exception。 另一个困难是我需要传递的ServiceObj。 如果makeThingsHappen()失败,我可能需要obj来执行其他操作。 action变量将告诉处理程序类如何处理obj。 这可以在没有严重粪便的情况下完成,还是我希望有可能不存在的东西?

try catch块创建干净代码的最佳实践是什么?

可能重复: JAVA或C#中的exception管理的最佳实践 我今天早些时候在stackoverflow上读过一个问题 ,它让我思考处理exception的最佳实践是什么。 所以,我的问题是处理exception以产生干净和高质量代码 的最佳实践是什么 。 这是我的代码,我认为它很安静,但如果我错了或不清楚,请告诉我! 我试图在方法中牢记可测试性和相同的抽象级别。 每一条建设性意见都受到欢迎。 🙂 import java.awt.Point; import java.io.Closeable; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; /** * This is a dummy code. * The aim is present the best practice on exception separation and handling. */ public class ExceptionHandlingDemo […]

BatchUpdateException:批处理不会终止

我有一个应用程序,它处理一个非常大的文件并将数据发送到oracle数据库(使用Java 6,oracle 9)。 在循环中,我使用PreparedStatement ps并创建使用ps.addBatch()生成的所有SQL语句。 我有一种情况,在ps.executeBatch()期间抛出BatchUpdateException bue ps.executeBatch() 。 此时,批处理停止执行。 我希望批处理执行继续,以便我可以在方法processUpdateCounts(bue.getUpdateCounts())检查失败的更新。 关于类BatchUpdateException的javadoc说: 在批量更新中的命令无法正确执行并且抛出BatchUpdateException之后, 驱动程序可能会也可能不会继续处理批处理中的其余命令。 有没有办法强制执行继续,还是我需要更改我的程序,以便它将单独执行语句?

带有类名的exception.getMessage()输出

我正在尝试修复一个问题,在我的应用程序中我有这个代码 try { object1.method1(); } catch(Exception ex) { JOptionPane.showMessageDialog(nulll, “Error: “+ex.getMessage()); } 而object1会做类似的事情: public void method1() { //some code… throw new RuntimeException(“Cannot move file”); } 我的选项窗格中出现了这样的消息: Error: java.lang.RuntimeException: Cannot move file 但是我使用了getMessage而不是toString方法,所以不应该出现类的名称,对吧? 我做错了什么? 我已经尝试了很多例外,甚至是Exception本身。 我希望解决这个问题,而不需要实现我自己的Exception子类 问题已解决 – 谢谢大家! 实际上是在SwingWorker的get()方法中调用了try和catch,它构造了一个ExecutionException ,我从doInBackground抛出exception()我修复了这样做: @Override protected void done() { try { Object u = (Object) get(); //do whatever u […]

为我的应用程序的所有线程定义一个全局UncaughtExceptionHandler

我想在我的Java应用程序中定义一个应用程序级别UncaughtExceptionHandler ,如果在我的应用程序的一个线程中抛出未捕获的exception,则调用该应用程序。 我知道可以为一组线程( ThreadGroup )定义一个未捕获的exception,我实际上正在使用它,但我想为没有定义自己的未捕获exception处理程序的线程定义一个全局未捕获的exception,或者是没有与一组定义了默认exception处理程序的线程相关联 。 所以例如我想达到这样的东西: 1° LEVEL —> Call thread own UncaughtExceptionHandler —> 2° LEVEL Call Thread Group UncaughtExceptionHandler —> 3° LEVEL Call application(default) UncaughtExceptionHandler 简单来说,我想覆盖默认的UncaughtExceptionHandler并定义我自己的处理程序,而不是在System.err上打印堆栈跟踪(这是默认行为)。 例如,在C#.NET中,我执行类似的操作, 处理应用程序的Main()方法中的未处理和线程exception事件处理程序: AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 即使在Java中也可以完成? 如何在Java中覆盖默认的UncaughtExceptionHandler?

如何处理JPA唯一约束违规?

当违反唯一约束时,抛出javax.persistence.RollbackException 。 但抛出RollbackException可能有多种原因。 如何才能发现违反了一个独特的约束? try { repository.save(article); } catch(javax.persistence.RollbackException e) { // how to find out the reason for the rollback exception? }

在Java中编写“exception驱动开发”的性能成本?

通过在Java中创建,抛出和捕获exception,是否有任何性能成本? 我计划将“exception驱动的开发”添加到一个更大的项目中。 我想设计自己的exception并将它们包含在我的方法中,迫使开发人员捕获并做适当的工作。 例如,如果您有一种方法可以根据名称从数据库中获取用户。 public User getUser(String name); 但是,用户可能为null,并且在使用User的公共方法之前忘记检查这一点很常见。 User user = getUser(“adam”); int age = user.getAge(); 这将导致NullPointerException和崩溃。 但是,如果我在返回user-object之前进行了检查,如果它为null并抛出’UserIsNullException’: public User getUser(String name) throws UserIsNullException; 我强迫实施者思考和行动: try { User user = getUser(“adam”); int age = user.getAge(); }catch( UserIsNullException e) { } 它使代码更安全地发生意外崩溃并消除更多错误。 假设该网站每小时有数百名访问者,这种设计模式几乎无处不在。 这样的设计方法将如何影响性能? 这些好处是否会超过成本,还是只是简单的编码? 谢谢你的帮助! UPDATE! 要清楚,我的注意力不是包装NullPointerException,正如我的例子所暗示的那样。 目标是强制实施者编写try / catch,从而避免真正崩溃的头痛: user == null 被遗忘了。 […]

AOPexception处理

我看到Guice和Spring使用AOP联盟进行方法拦截,我一直试图弄清楚如何让AOP联盟拦截和处理某些exception,所以我不必继续编写相同的代码。在每个catch区内再次出现。 但是在审查了游戏之后,看起来AOP联盟并没有提供任何方法来拦截抛出的Throwable s,使得处理程序/拦截器可以执行某些操作(记录exception等),然后确定是否进一步传播exception,或者只是恢复到引发exception的行之后的下一行 : HerpDerp hd = null; if(hd == null) throw new RuntimeException(“Herpyl derp!”); Manny.pacquiao(); 我正在寻找一种AOPexception处理机制,它将拦截RuntimeException并使用业务逻辑来决定是继续传播它还是在Manny.pacquioa()调用时恢复。 如果在Java中无法做到这一点,请告诉我 无论是否可以在Java中执行此操作,是否有办法拦截抛出exception与AOP联盟或我必须去其他地方。 如果我必须去别的地方,在哪里? AspectJ的? 谢谢!

Java:我如何编写try-catch-repeat块?

我知道这样做的反制方法。 我想知道是否有一个很好的,紧凑的方式来做到这一点。