class Shape {
closing int space;
public Shape(int space) {
if (space <= 0) throw new IllegalArgumentException("Area must be positive.");
this.space = space;
}
}
Now say you wish to have a Rectangle class. In Java earlier than JDK 25, you’d need to by some means extract the calculation to make use of it within the tremendous() name, often utilizing a static methodology:
// The previous means
class Rectangle extends Shape {
personal static int checkAndCalcArea(int w, int h) {
if (w <= 0 || h <= 0) {
throw new IllegalArgumentException("Dimensions must be positive.");
}
return w * h;
}
public Rectangle(int width, int peak) {
tremendous(checkAndCalcArea(width, peak)); // tremendous() needed to be first
// ... constructor logic ...
}
}
This code is kind of clunky. But in Java 25, it’s simpler to observe your intention, and run the realm calculation within the Rectangle constructor:
class Rectangle extends Shape {
closing int width;
closing int peak;
public Rectangle(int width, int peak) {
if (width <= 0 || peak <= 0) {
throw new IllegalArgumentException("Dimensions must be positive.");
}
int space = width * peak;
tremendous(space); // Before 25, this was an error
this.width = width;
this.peak = peak;
}
}
Wholesale module imports
Another characteristic finalized in JDK 25, JEP 511: Module import declarations, enables you to import a whole module as an alternative of getting to import every bundle one after the other.







