这种将大括号作为编码结构的想法,在Java世界中引起了争议。当人们看到孤立的大括号时,会有几种解释。因此,我将试图从实际的角度回答你的问题。
你在这里发帖所隐含的问题实际上是:什么时候/为什么要使用这些大括号?从实际的角度来说,下面的情况可能会导致孤立的代码块:
1)程序员希望通过添加作用域,以便于重复使用变量名而不必担心名称冲突,以增加代码的清晰度(例如,在单元测试或数据库插入块中创建多个相同类型的对象)。
其他可能的原因包括:
2)忘记开发中的 if/else/for/while 循环代码。
3)剩余的 if/else/for/while 语句的遗留物。
4)自动生成的代码使用作用域来简化创建具有相同变量名称的多个类似组件的过程(例如,考虑一个需要为100个单选按钮生成代码的 GUI 生成器——它可以使用作用域而不是逐个递增变量名称)。
5)作为微小、可重用、可粘贴的逻辑块,其副作用最小:程序员感觉一个方法中的代码块太难懂了,其变量和内部副作用应该对外界具有最小的可见性。也就是说,程序员使用代码块作为一种贫民版的匿名 lambda 函数(尽管没有返回值)。在这种模式下,可能会做类似下面的事情:
//lets say I want to make a primary key for a dogs name in a database.
String dogNameKey=null;
{
long time = System.currentTimeInMilliseconds();
String theName = "spot";
dogName=theName+"_"+time;
}
显然,对于命名这个记录(dogNameKey),简单的策略并不值得外部方法使用 - 太过简单了。但与此同时,“time”变量在创造这个名称的逻辑之外或者对于这个小键生成模块所包含的方法没有任何影响或可访问性 - 也就是说,它甚至对于包含该模块的方法都不相关。因此,通过使用大括号,我定义了其作用域。如果可以使用lambda,则所有这些作用域都可以包含在一个匿名函数中。现在 - 我可以粘贴多个这样的块,并且变量名称将是相同的,因此可以轻松通过肉眼扫描它们。
因此,当您只看到单独的花括号时,它们通常非常重要 - 它们实现了特定的自定义作用域,或者是错误的产物,或者是自动生成的代码的产物。作用域还可以用于“开始”重构方法而不实际编写新方法,通过分离其独立部分...... 尽管IDE比人类更擅长这种操作。