【问题标题】: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 返回

标签: java exception nullpointerexception


【解决方案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,这很清楚。下次我会更好地提出问题
猜你喜欢
  • 2013-03-21
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
相关资源
最近更新 更多