GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • java.evolved
  • โ†
  • โ†’

This view

  • Original page
  • New address

GeezerVison is showing javaevolved.dev โ€” Flexible constructor bodies | java.evolved

Home / Language / Flexible constructor bodies
Language Intermediate

Flexible constructor bodies

  • ๐Ÿ› Report a code issue
  • ๐ŸŒ Report a translation issue
  • ๐Ÿ’ก Suggest a new pattern

Validate and compute values before calling super() or this().

Constructors
Code Comparison
โœ• Java 8
class Square extends Shape {
    Square(double side) {
        super(side, side);
        // can't validate BEFORE super!
        if (side <= 0)
            throw new IAE("bad");
    }
}
โœ“ Java 25+
class Square extends Shape {
    Square(double side) {
        if (side <= 0)
            throw new IAE("bad");
        super(side, side);
    }
}
Share ๐•
See a problem with this code? Let us know.
Why the modern way wins
๐Ÿ›ก๏ธ

Fail fast

Validate arguments before the superclass constructor runs.

๐Ÿงฎ

Compute first

Derive values and prepare data before calling super().

๐Ÿงน

No workarounds

No more static helper methods or factory patterns to work around the restriction.

Old Approach
Validate After super()
Modern Approach
Code Before super()
Since JDK
25
Difficulty
Intermediate
JDK Support
Flexible constructor bodies
Available

Finalized in JDK 25 LTS (JEP 513, Sept 2025).

How it works

Java 25 lifts the restriction that super() must be the first statement. You can now validate arguments, compute derived values, and set up state before delegating to the parent constructor.

Related Documentation
Flexible Constructor Bodies (JEP 492) โ†—
Proof
View proof source โ†—
Related patterns
Language Beginner

Type inference with var

Java 8
Map<String, List<Integer>> map =
    new HashMap<String, List<Integer>>();
for (Map.Entry<String, List<Integer>> e
    : map.entrySet()) {
    // verbose type noise
}
Java 10+
var map = new HashMap<String, List<Integer>>();
for (var entry : map.entrySet()) {
    // clean and readable
}
Hover to see modern โžœ
JDK 10+ โ†’
Language Beginner

Text blocks for multiline strings

Java 8
String json = "{\n" +
    "  \"name\": \"Duke\",\n" +
    "  \"age\": 30\n" +
    "}";
Java 15+
String json = """
    {
      "name": "Duke",
      "age": 30
    }""";
Hover to see modern โžœ
JDK 15+ โ†’
Language Beginner

Switch expressions

Java 8
String msg;
switch (day) {
    case MONDAY:
        msg = "Start";
        break;
    case FRIDAY:
        msg = "End";
        break;
    default:
        msg = "Mid";
}
Java 14+
String msg = switch (day) {
    case MONDAY  -> "Start";
    case FRIDAY  -> "End";
    default      -> "Mid";
};
Hover to see modern โžœ
JDK 14+ โ†’
You are visitor 01402520 โ€” GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800ร—600. No cookies required.