异常处理,在这种情况下它是如何工作的

Posted

技术标签:

【中文标题】异常处理,在这种情况下它是如何工作的【英文标题】:Exception handing , how does it work in this case 【发布时间】:2021-09-12 06:58:04 【问题描述】:

我有一个 Class A 和 Class B 类型的 Object 返回一个 Object ,在什么情况下我会得到一个 null ?如果 test 中有异常,我使用外部 api 并且抛出异常,控制不应该转到外部 A 类吗? 我在这一行得到一个空指针异常 -> ob.toString(); 无法理解这一点。 提前感谢您的帮助

Class A
   try
      B b = new B();
      UserDefinedObject ob = b.test();
      ob.count();
   
   catch(Exception ex)
    


Class B 
    try
     UserDefinedObject test()
       return object;
     
   
   catch(Exception ex)
      throw ex;
    
  return null;

【问题讨论】:

如果这是 java 代码,它不会编译,更不用说运行,你想要多少理由? 这段代码甚至无法编译。所以请添加正确的代码(这也与 Spring 或 Spring Boot 无关,所以我删除了这些标签,因为这只是一个普通的 Java 问题)。 可能是我在说明这一点方面做得不好,这段代码确实编译了我有一个用组件注释的类,我从类 A 中调用它,它将调用类 B 包含在一个 try catch 块中,我但是我得到一个 null 返回 【参考方案1】:

尽管您提供的事实代码不正确且不可编译,return null 语句仍有无法访问的代码。所以你需要确保你返回的对象不为空。如果要使其可执行和清洁,例如:

public class A 

  public static void main(String []args)
     B b = new B();
     try
       Object ob = b.test();
       System.out.println("Result: " + ob.toString());
      catch(Exception ex)
       System.out.println("Failed in parent call");
     
  
 
 
  static class B 
     Object test()
       try
         return new String("B");
        catch(Exception ex)
         System.out.println("Failed in B class");
         throw ex;
       
     
   

 

作为 Object 我使用 new String("B") 只是为了简化代码。 在 B 中只有 2 个退出点:测试方法中的 return 语句和异常块,异常块之后的任何代码都将无法访问。如果 new String("B") 产生 Exception 它将被 B.test() 捕获并传递给 A。主要()。希望它在这里增加了一点光。

【讨论】:

谢谢Yaro,这很清楚。下次我会更好地提出问题

以上是关于异常处理,在这种情况下它是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章

Python多处理:如何在异常时关闭多处理池

java中异常这种技术框架是怎么工作的?

Python异常处理总结

ORACLE异常处理及函数

流程图的异常情况处理

编程思想之异常处理