Java 为什么不允许只尝试块?
为什么在Kotlin中(也在Java中,除了try with resources),不能只编写try{}块?例如: 此功能是允许的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
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
关于为什么允许使用空的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.这可能意味着一些有用的东西。也许一个好的答案是语言设计师为将来的事情保留它,你必须问语言开发者。