为什么只能尝试阻止?

Dig*_*pha -2 java try-catch kotlin

为什么在Kotlin中(除了在try-with-resources中,在Java中也是如此)仅写try {}块是不可能的?例如:

允许该功能

fun tryFunction(){
    try{print("hello world!")}finally {}
}
Run Code Online (Sandbox Code Playgroud)

虽然这是不允许的

fun tryFunction(){
    try{print("hello world!")} //build error "Expecting 'catch' or 'finally'"
}
Run Code Online (Sandbox Code Playgroud)

尽管第一个示例中的finally {}块没有任何作用

And*_*ner 5

“尝试/捕获”,“尝试/捕获/最终”和“尝试/最终”的含义

  • “尝试做点什么,如果失败的话……”
  • “尝试做某事,如果失败了,然后再做...。”
  • “分别尝试做某事,然后再做..”。

尝试本身仅意味着“尝试做某事”-它在您想要尝试执行的所有代码中都是隐含的。因此您不需要像这样的多余东西就try可以表达出来。

如果只想将语句放在自己的块中(例如,将变量作用域限定在该块中),则始终可以省略try。

关于您为什么finally允许空块的问题:只需finally在其后跟随一个块,并且对于一个没有任何语句的块是有效的。完全罕见的是,您应该有一个空的finally块,因此不值得将其设为特殊的“非空块”语法元素。