Method Reference in Java is a concept introduced as part of Java 8, and its purpose is to simplify the implementation of the Functional interfaces. When you use a Lambda expression to refer to a method, you can replace your Lambda with a Method Reference. We have already covered Lambda Expressions in Java 8.
There are three types of method references:
- Reference to an instance method.
 - Reference to a static method.
 - Reference to a constructor.
 
1. Reference to an instance method
Syntax

Example
Let’s first see how we can implement a Functional interface using a Lambda expression:
@FunctionalInterface
interface Drawable {
  void draw();
}
class Test {
  public void drawCircle() {
    System.out.println("Drawing circle...");
  }
  public static void main(String[] args) {
    Test test = new Test();
    Drawable drawable = () -> test.drawCircle();
    drawable.draw();
  }
}
Output: Drawing circle…
Now, let’s replace Lambda with a Method Reference:
@FunctionalInterface
interface Drawable {
  void draw();
}
class Test {
  public void drawCircle() {
    System.out.println("Drawing circle...");
  }
  public static void main(String[] args) {
    Test test = new Test();
    Drawable drawable = test::drawCircle;
    drawable.draw();
  }
}
Output: Drawing circle…
You see how the Method reference is a shortcut to writing Lambda expression.
2. Reference to a static method
Syntax

Example
Let’s make a drawCircle() method static, and use the class name to refer to it:
@FunctionalInterface
interface Drawable {
  void draw();
}
class Test {
  public static void drawCircle() {
    System.out.println("Drawing circle...");
  }
  public static void main(String[] args) {
    Drawable drawable = Test::drawCircle;
    drawable.draw();
  }
}
Output: Drawing circle…
In the next lesson, we will cover the Constructor Reference in Java.
I hope this tutorial was helpful to you. To learn more, check out other Java Functional Programming tutorials.