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

zd287kbt  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(455)

我正在使用 InetValidator 在我的项目中从apache.commons初始化以验证ip地址。在浏览源代码时,

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

我注意到有一个 VALIDATOR 再次调用构造函数的字段。我搞不懂的是,如果我创建一个这个类的新示例,

  1. InetAddressValidator addressValidator = new InetAddressValidator();

它是否会递归地创建同一类的新示例(作为字段) VALIDATOR 每次创建一个新示例)最终我会耗尽堆空间吗?
我还没有测试过这个,但想知道这是不是我在测试时必须记住的东西。

kfgdxczn

kfgdxczn1#

递归调用
inetaddressvalidator addressvalidator=新的inetaddressvalidator();递归调用

xbp102n0

xbp102n02#

  1. private static final InetAddressValidator VALIDATOR = new InetAddressValidator();

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

相关问题