java - 将类中的字段设置为同一类的新实例会导致内存溢出吗?InetValidator 类 (apache.commons)
问题描述
我InetValidator
在我的项目中使用来自 apache.commons 的类来验证 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();
它是一个静态字段,因此它只会在类加载时实例化一次,而不是在构造函数中的每个实例。
推荐阅读
- javascript - 刷新后使活动块不隐藏
- firebase - Firebase 错误:无法创建项目,因为您已超出分配的项目配额
- java - JPA 规范标准无法访问属性
- groovy - Groovy - 如何将对象序列化为字符串
- c# - Unity3d:如何计算彩色网格中不同颜色的表面积
- c# - 如何在一个控制器的 web api 中发布多个对象数据 json
- swift - 为什么不能在以下示例中使用结构的常量属性
- wagtail - Wagtail:如何获取页面的目录(StreamField)
- markdown - 将 Markdown 管道表转换为 Word/docx 时换行错误
- mono - 单声道分析器未运行