How does “object.new” work? (Does Java have a .new operator?)

They’re inner (nested non-static) classes:

public class Outer {
  public class Inner { public void foo() { ... } }
}

You can do:

Outer outer = new Outer();
outer.new Inner().foo();

or simply:

new Outer().new Inner().foo();

The reason for this is that Inner has a reference to a specific instance of the outer class. Let me give you a more detailed example of this:

public class Outer {
  private final String message;

  Outer(String message) {
    this.message = message;
  }

  public class Inner {
    private final String message;

    public Inner(String message) {
       this.message = message;
    }

    public void foo() {
      System.out.printf("%s %s%n", Outer.this.message, message);
    }
  }
}

and run:

new Outer("Hello").new Inner("World").foo();

Outputs:

Hello World

Note: nested classes can be static too. If so, they have no implicit this reference to the outer class:

public class Outer {
  public static class Nested {
    public void foo() { System.out.println("Foo"); }
  }
}

new Outer.Nested.foo();

More often than not, static nested classes are private as they tend to be implementation details and a neat way of encapsulating part of a problem without polluting the public namespace.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)