Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不允许只尝试块?_Java_Kotlin_Try Catch - Fatal编程技术网

Java 为什么不允许只尝试块?

Java 为什么不允许只尝试块?,java,kotlin,try-catch,Java,Kotlin,Try Catch,为什么在Kotlin中(也在Java中,除了try with resources),不能只编写try{}块?例如: 此功能是允许的 fun tryFunction(){ try{print("hello world!")}finally {} } 而这个是不允许的 fun tryFunction(){ try{print("hello world!")} //build error "Expecting 'catch' or 'finally'" } 尽管第一个例子中的fin

为什么在Kotlin中(也在Java中,除了try with resources),不能只编写try{}块?例如:

此功能是允许的

fun tryFunction(){
    try{print("hello world!")}finally {}
}
而这个是不允许的

fun tryFunction(){
    try{print("hello world!")} //build error "Expecting 'catch' or 'finally'"
}
尽管第一个例子中的finally{}块没有任何作用

“try/catch”、“try/catch/finally”和“try/finally”的意思

  • “试着做点什么,如果做不到,就做…”
  • “试着做点什么,如果做不到……然后再做……”
  • “试着做点什么,然后再做…”
Try本身就意味着“尝试做某事”——它隐含在所有代码中,这就是您想要尝试做的事情;因此,您不需要像
那样的任何额外的杂质来表达这一点

如果您只是想将语句放在它们自己的块中,例如将变量作用于该块,您可以忽略
try

关于为什么允许使用空的
finally
块的问题:很简单,
finally
后面应该跟一个块,并且块没有语句是有效的。很少有人会想要一个空的finally块,而不值得将其作为一个特殊的“非空块”语法元素。

简单的答案是“因为这就是语言的定义方式”


当然,他们可以决定一个裸体的
try{…}
假设最后是空的
,但那就等于根本没有
try
,那么何必麻烦呢?

如果
try
失败会发生什么?如果有空的finally块也会发生同样的情况。。。“try/catch”、“try/catch/finally”和“try/finally”分别不是指“尝试做某事,如果做不到…”、“尝试做某事,如果做不到…”,然后再做…”和“尝试做某事,然后再做…”。Try本身就意味着“尝试做一些事情”——这难道不是所有不尝试的代码的要点吗?那么,为什么需要尝试一下呢?try块本身可能有以下用途之一:1。在出现异常的情况下,静静地恢复下一段代码,就像您编写:
尝试{…//抛出异常的代码}catch(e:exception){//donothing}
2。自动调用close()以实现Closeable并在try块中创建的所有对象,而无需将它们放在括号内。Kotlin所说的不是背后发生的事情。1。因为这是一个构建错误,而不仅仅是一个警告。2.这可能意味着一些有用的东西。也许一个好的答案是语言设计师为将来的事情保留它,你必须问语言开发者。