java只是大括号

java只是大括号,java,Java,我在读一本书,有几个例子,程序只有花括号 比如说 public static void main(String args[]){ //what is the uses of curly braces here. { //some code } } 它被称为块 块是大括号内的一系列语句、局部类声明和局部变量声明语句。 另请参见: 这是一个代码块。中声明的变量在上部块中不可见(这些卷曲之外的方法体),即它们的范围更为有限。小心,它并不总是像

我在读一本书,有几个例子,程序只有花括号

比如说

 public static void main(String args[]){
     //what is the uses of curly braces here.
     {
          //some code
     }
 }
它被称为

块是大括号内的一系列语句、局部类声明和局部变量声明语句。

另请参见:


这是一个代码块。中声明的变量在上部块中不可见(这些卷曲之外的方法体),即它们的范围更为有限。

小心,它并不总是像其他人所建议的那样是一个初始化块。在您的例子中,它是一种称为代码块或代码块的变量作用域机制

如果它在一个方法之外,那么它就是

范例

public class MyClass {

   {
      // this is an initialisation block
   }

}
public static void main(String args[]){

     {
          String myString = "you can't see me!";
     }
     System.out.println(myString); // this will not compile because myString is not visible.
 }
但是,如果它在一个方法中,它就不是! 在本例中(在您的示例中就是这种情况),它是一个代码块。在花括号内初始化的任何内容在外面都不可见

范例

public class MyClass {

   {
      // this is an initialisation block
   }

}
public static void main(String args[]){

     {
          String myString = "you can't see me!";
     }
     System.out.println(myString); // this will not compile because myString is not visible.
 }

在某些情况下,您可以通过此逻辑分隔代码,事实上,我经常应用一个用例:演示数据。例如,您有一些演示数据生成类,它创建演示数据条目并插入数据库。您可以将每个项目放在这样一个块中,并且可以在不更改变量名的情况下进行复制粘贴。

如何使用大括号作为编码结构的想法在Java世界是一个有争议的问题。当人们自己看到花括号时,会有几种解释。所以我将试着从实践的角度回答你的问题

在你的帖子中隐含的问题是,真的-什么时候/为什么使用这些?实际上,以下情况可能会导致一个单独的代码块:

1) 程序员希望通过额外的作用域来重用变量名,而不必担心为了清晰起见发生冲突(例如,在单元测试或数据库插入块中生成多个相同类型的对象)

其他可能的原因:

2) 忘记正在开发的if/else/for/while循环代码

3) 已删除的if/else/for/while子句的剩余工件

< P > 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”变量除了用于命名的逻辑之外,不应该有任何意义或可访问性,也就是说,它甚至不应该与包含这个微小的键生成块的方法相关。所以,通过使用大括号,我确定了它的范围。如果labmda是可能的,那么所有这些作用域都可以封装在一个匿名函数中

现在,我可以粘贴其中的几个块,并且变量名将是相同的,所以用肉眼很容易扫描它们


*因此,当您单独看到大括号时(它们通常非常重要),要么它们实现了特定的自定义范围,要么它们是错误的产物,要么可能是自动生成的代码。作用域也可以用于“启动”方法的重构,而无需实际编写新方法,方法是分离其独立部分。。。虽然IDE在这方面比人类好得多。*

“如果它在一个方法中”,即类似于OP中的example@goran,我向用户澄清,因为现在删除的许多答案都表明这是一个初始化程序块。因此,我觉得有必要澄清花括号的两种用法。@the,@goran-他在回答中这样说。我以前从未见过这两种情况,所以我认为最好解释一下它在不同的环境下做不同的事情。。有道理。我发表评论只是因为你开始解释它不是什么。现在,其他答案都被删除了,这有点脱离上下文。更复杂的术语是
Block
,请检查,谢谢您提供的信息。谢谢。我通常用谷歌搜索,但不确定这类问题的搜索词是什么。