Records can have static fields and methods like regular classes.
Static fields:
1public record Person(String name, int age) {2 public static final int MAX_AGE = 150;3 private static int count = 0;45 public Person {6 count++;7 }89 public static int getCount() {10 return count;11 }12}
Static methods:
1public record Person(String name, int age) {2 public static Person of(String name, int age) {3 return new Person(name, age);4 }5 public static Person unknown() {6 return new Person("Unknown", 0);7 }8}
Instance methods:
1public record Person(String name, int age) {2 public boolean isAdult() {3 return age >= 18;4 }56 @Override7 public String toString() {8 return name + " (" + age + ")";9 }10}
Real-world example with validation:
1public record Money(java.math.BigDecimal amount, String currency) {2 private static final java.util.Set<String> VALID_CURRENCIES =3 java.util.Set.of("USD", "EUR", "GBP", "JPY");45 public Money {6 if (amount == null || amount.signum() < 0) {7 throw new IllegalArgumentException("Amount must be non-negative");8 }9 if (!VALID_CURRENCIES.contains(currency)) {10 throw new IllegalArgumentException("Invalid currency: " + currency);11 }12 }1314 public static Money usd(java.math.BigDecimal amount) {15 return new Money(amount, "USD");16 }1718 public static Money eur(java.math.BigDecimal amount) {19 return new Money(amount, "EUR");20 }21}