将类中的字段设置为同一类的新实例会导致内存溢出吗?InetValidator类(apache.commons)



我在项目中使用apache.commons中的InetValidator类来验证IP地址。在浏览源代码时,

public class InetAddressValidator implements Serializable {
private static final int IPV4_MAX_OCTET_VALUE = 255;
private static final int MAX_UNSIGNED_SHORT = 65535;
private static final int BASE_16 = 16;
private static final long serialVersionUID = -919201640201914789L;
private static final String IPV4_REGEX = "^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$";
private static final int IPV6_MAX_HEX_GROUPS = 8;
private static final int IPV6_MAX_HEX_DIGITS_PER_GROUP = 4;
private static final InetAddressValidator VALIDATOR = new InetAddressValidator();
private final RegexValidator ipv4Validator = new RegexValidator("^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$");
public InetAddressValidator() {
}
public static InetAddressValidator getInstance() {
return VALIDATOR;
}

我观察到有一个VALIDATOR字段正在再次调用构造函数。我感到困惑的是,如果我创建这个类的一个新实例作为

InetAddressValidator addressValidator = new InetAddressValidator();

它不会递归地不断创建同一类的新实例吗(就像字段VALIDATOR每次都会创建一个新实例一样(,最终我会耗尽堆空间吗?

我还没有测试过,但想知道这是否是我在测试时必须记住的。

private static final InetAddressValidator VALIDATOR = new InetAddressValidator();

它是一个静态字段,因此在类加载时只实例化一次,而不是构造函数中的每个实例。

递归调用

InetAddressValidator addressValidator=新的InetAddress Validator((;递归调用

最新更新