I think this is a case where understanding the concept is made harder by the use of undefined terminology on the documentation.
Keep in mind that a method reference, as a type of lambda, implements a functional interface, and that ANY method that matches the signature of the interface can be used as long as you can reference it in your program.
Of the four kinds of method references, which represent different ways needed to access (reference) the method. The syntax of three are pretty straightforward: If it is a static method then you use the class name before the :: operator, if it is an instance method in an object then you generally use a reference variable for the object, or if it a constructor you use ClassName::new.
The fourth kind is where you want to call a method that is an instance method of a parameter passed to the function. With a lambda, there is no problem because you can reference the parameter variable, like this:
(String someString) -> someString.toLowerCase();
However, since there is no explicit parameter variable in a method reference, the syntax used instead is:
String::toLowerCase;
The compiler takes the "particular type" (String) to reference the functional method (toLowerCase) contained in an "arbitrary object" (the object passed in the parameter).
The term "arbitrary object" is used because the actual object passed in the parameter could be different each time the method reference is executed.