The constructor method references cited with similar, except that the reference in the constructor method name is new. For example, Button :: new constructor Button class represents a reference. For classes with multiple constructors, selection of which depends on the context constructor. Suppose you have a list of strings, and you want the Button class constructor calls list is used to construct a string button list, you can use the following expression:
List < String> labels = ....;
Stream < Button> stream = labels.stream () map (Button :: new).;
List < Button> buttons = stream.collect (Collectors.toList ());
We'll discuss stream, map and collect method in more detail later. But now, it is important for each list element, map method calls Button (String) constructor. While the Button class has multiple constructors, but the compiler can infer from context and pick with only a String argument constructor.
You can use the array type constructor to write references. For example, int  :: new constructor is a parameter containing a reference, this parameter is the length of the array. It is equivalent to a lambda expression x -> new int [x]. Array constructor references can be used to bypass restrictions java one. In Java, you can not construct an array of generic type T. Expression new T [n] is wrong, because it will be erased to new Object [n].
The API for developers to write is a problem. For example, suppose we want to construct a set of buttons, Stream interface has a return Object array toArray () method:
Object  buttons = stream.toArray ();
But that does not make us satisfied. Users want a button object, rather than a set of Object objects. Stream API reference by the constructor to solve this problem. It allows the Button  :: new method is passed to the toArray:
Button  buttons = stream.toArray (Button  :: new);
toArray call the constructor method to obtain an array of the correct type. It will then fill out and return the array.