Java 双括号初始化

Java 双括号初始化

Java中两个独立过程的组合被称为Java中的双括号初始化。顾名思义,有两个大括号{{包含在其中。

单大括号{对程序员来说并不新鲜。双大括号初始化中的第一个大括号是用来创建一个匿名内类的。我们已经用这种方式做了很多匿名内类。第二个大括号是它与Java中普通大括号的不同之处。第二个大括号是初始化块,它与声明的匿名内类一起使用。当这个初始化块与匿名内类一起使用时,它被称为Java双括号初始化。

双括号初始化的优点

  • 与本地创建和初始化方式相比,它的代码行数更少。
  • 代码的可读性更强。
  • 创建和初始化是在同一个表达式中完成的。

双括号初始化的劣势

  • 晦涩难懂,不是一种广为人知的初始化方式。
  • 每次我们使用它都会创建一个额外的类。
  • 它不支持使用 “钻石运算符”–在Java 7中引入的一个特性。
  • 如果我们试图扩展的类被标记为 final ,它就不起作用
  • 它持有对包围实例的隐藏引用,这可能导致内存泄漏。

注意 :正是由于这些缺点,双括号初始化被认为是一种反模式。

实现 。

极客们,如果你不知道 双大括号初始化,你已经在使用标准的方法,即没有双大括号初始化,我们在下面提出了一个例子,如下。

过程: 当我们在代码中使用一个集合时,我们通常会做以下工作。

  1. 声明一个临时集合的变量。
  2. 创建一个新的空集合,并在变量中存储一个对它的引用。
  3. 把东西放到集合中。
  4. 将集合传递给方法。

例子: 标准方法

// Java program to Demonstrate Working of Collections
// Without Double Brace Initialization
 
// Importing required classes
import java.util.HashSet;
import java.util.Set;
 
// Main class
// DoubleBrace
public class GFG {
 
    // Method 1
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an empty HashSet of string entries
        Set<String> sets = new HashSet<String>();
 
        // Adding elements to Set
        // using add() method
        sets.add("one");
        sets.add("two");
        sets.add("three");
 
        // Calling method 2 inside main() method
        // Now pass above collection as parameter to method
        useInSomeMethod(sets);
    }
 
    // Method 2
    // Helper method
    private static void useInSomeMethod(Set<String> sets)
    {
        // Print all elements of desired Set
        // where method is invoked
        System.out.println(sets);
    }
}

输出

[one, two, three]

输出解释。

以上是我们在编码实践中都会遵循的正常步骤。你不觉得Java应该有一个更方便的集合(列表、Map、集合等)的语法吗?让我们看看另一种简单的方法。这就是所谓的 双括号初始化。 Java双括号初始化是用来将创建和初始化结合在一条语句中的。使用双括号初始化,我们可以初始化集合。

双括号初始化的用法

过程: 当我们在代码中使用双括号初始化时,我们通常会做以下事情。

  1. 创建一个扩展了集合的匿名内类。
  2. 提供一个实例初始化块,调用add方法并将元素添加到集合中。
  3. 将集合传递给方法。

例子

// Java program to Demonstrate Working of Collections
// With Double Brace Initialization
 
// Importing required classes
import java.util.HashSet;
import java.util.Set;
 
// Main class
// DoubleBrace
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an empty HashSet
        Set<String> sets = new HashSet<String>()
 
        // Double brace
        {
            {
                // Adding elements to above HashSet
                // This is double brace initialization
                add("one");
                add("two");
                add("three");
            }
        };
 
        // ...
        // Now pass above collection as parameter to method
        // Calling method 2 inside main() method
        useInSomeMethod(sets);
    }
 
    // Method 2
    private static void useInSomeMethod(Set<String> sets)
    {
 
        // Print elements of the desired Set
        // where method is invoked
        System.out.println(sets);
    }
}

输出

[one, two, three]

输出解析: 第一个 括号创建了一个新的匿名内类。这些内类能够访问其父类的行为。因此,在我们的例子中,我们正在创建一个HashSet类的子类,以便这个内类可以使用add()方法。 第二个 大括号是实例初始化器。每当一个实例被创建时,实例初始化器里面的代码就会被执行。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程