【问题标题】:Return statement in catch blockcatch 块中的返回语句
【发布时间】:2017-05-15 09:49:10
【问题描述】:

在使用 java 编码时,我看到发生了一件奇怪的事情。

代码是这样写的。

class lara {
    public static void main(String ...pro) {
        int o;
        try{
            o=999;
        }catch(Exception mu) {
         System.out.println("sololobo");
        }
    System.out.println(o);
}
}

它会在要求打印 o 的那一行显示错误

"System.out.println(o);"

但是当我添加类型“return;”时catch 块中的语句,如

class lara {
    public static void main(String ...pro) {
        int o;
        try{
            o=999;
        }catch(Exception mu){
            System.out.println("sololobo");
            return;
        }
    System.out.println(o);
    }
}

效果很好。
为什么会这样?
是catch函数吗?
这个返回语句指的是什么函数。
提前谢谢你!

【问题讨论】:

  • 请花点时间将您的代码格式化更加更易读,并使用适当的缩进和换行符。如果您使用的是 IDE,它可能会对您有所帮助。你没有告诉我们错误是什么也无济于事......
  • 当您添加 return 语句时,它会从该函数返回,在您的情况下为 main 函数,因此之后的代码很简单无法访问。

标签: java return try-catch


【解决方案1】:

发生第一个错误是因为如果发生异常,名为oint 变量可能不会被初始化。在您使用return 的更新版本中,不会发生此问题:

public static void main(String ...pro) {
    int o;
    try {
        o = 999;
    } catch(Exception mu) {
        System.out.println("sololobo");
        return; // end the call to `main()` here
    }

    // now the following line can only be reached if the try
    // completes without error, which means that o will be defined
    System.out.println(o);
}

【讨论】:

  • 很好的解释。基本上,变量“o”需要被初始化。只要您在 Try-Statement 之前或什至在 Catch-Block 内初始化它,代码就可以工作。只需确保“o”已初始化。在 Java 中声明是不够的。
【解决方案2】:

没有return,您将始终使用System.out.println(o); 语句。编译器不知道错误发生在try catch 的哪个位置,因此它不知道o 是否已正确初始化。

如果你在catch-block中返回System.out.println(o);在任何异常的情况下都不会到达,这意味着如果代码到达,没有异常,这反过来意味着 o 已正确设置。

【讨论】:

  • 是的,但它仍然会打印在 try 块中分配的任何内容..为什么会这样..{它不应该是本地分配的吗...即在 try 块内调用时能够获取其值,但在块外调用时无法获取;}
  • @his_dogeness 没有本地分配之类的东西。它有 一个 值,就是这样。
  • 啊哈,我明白了...谢谢..我是编程新手,试图从逻辑上理解它..我猜java不像c++那样合乎逻辑
  • @his_dogeness c++ 也没有本地作业,请直截了当。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2014-03-10
  • 2014-08-25
相关资源
最近更新 更多