java只是花括号

时间:2010-12-19 20:16:57

标签: java

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

例如

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

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:11)

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

如果它不在方法之内,那就是!

实施例

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

答案 2 :(得分:2)

它被称为 阻止

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

另见:

答案 3 :(得分:2)

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

答案 4 :(得分:1)

这种关于如何使用花括号作为编码结构的想法是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在这方面要比人类好得多。 *