繁体   English   中英

java只是花括号

[英]java just curly braces

我正在读一本书,有一些程序示例只有花括号

例如

 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.
 }

如何使用花括号作为编码结构的想法在 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)配不上外部方法——它太简单了。 但与此同时,“时间”变量不应在构成此名称的逻辑之外没有任何意义或可访问性 - 即它甚至不应该与包含这个小密钥生成块的方法相关。 所以,通过使用大括号,我已经确定了它的范围。 如果可以使用 labmda,那么所有这些作用域都可以包含在一个匿名函数中。

现在 - 我可以粘贴这些块中的几个,并且变量名称将是相同的,因此很容易通过肉眼扫描它们。

*因此,当您单独看到花括号时 - 它们通常非常重要 - 它们要么实现特定的自定义范围,要么是错误或潜在的自动生成代码的产物。 作用域也可用于“开始”重构方法,而无需实际编写新方法,通过分离其独立部分……尽管 IDE 在这方面比人类要好得多。 *

它被称为

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

另见:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM