Java - 两个类互相组合嵌套引用会爆炸吗?

简介: Java - 两个类互相组合嵌套引用会爆炸吗?

Demo3.java

package tech.luxsun.interview.luxinterviewstarter.demo;
import java.time.LocalDateTime;
public class Demo3 {
    private String sex;
    private String name;
    private Demo2 demo2;
    public Demo3(String sex, String name) {
        this.sex = sex;
        this.name = name;
    }
    public Demo3() {
    }
    public Demo2 getDemo2() {
        return demo2;
    }
    public void setDemo2(Demo2 demo2) {
        this.demo2 = demo2;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Demo3{" +
                "sex='" + sex + '\'' +
                ", name='" + name + '\'' +
                ", demo2=" + demo2 +
                '}';
    }
}

Demo2.java


package tech.luxsun.interview.luxinterviewstarter.demo;
public class Demo2 {
    private String sex;
    private String name;
    private Demo3 demo3;
    public Demo2() {
    }
    public Demo3 getDemo3() {
        return demo3;
    }
    public void setDemo3(Demo3 demo3) {
        this.demo3 = demo3;
    }
    public Demo2(String sex, String name) {
        this.sex = sex;
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
        Demo2 demo2 = new Demo2();
        demo2.setName("Bob");
        demo2.setSex("男");
        Demo3 demo3 = new Demo3();
        demo3.setName("Alice");
        demo3.setSex("女");
        demo2.setDemo3(demo3);
        demo3.setDemo2(demo2);
        System.out.println(demo2.toString());
        System.out.println(demo3.getDemo2());
    }
    @Override
    public String toString() {
        return "Demo2{" +
                "sex='" + sex + '\'' +
                ", name='" + name + '\'' +
                ", demo3=" + demo3 +
                '}';
    }
}
  • 目前 2 个 Demo 都重写了 toString,输出结果
Exception in thread "main" java.lang.StackOverflowError
  at java.lang.StringBuilder.append(StringBuilder.java:136)
  at tech.luxsun.interview.luxinterviewstarter.demo.Demo2.toString(Demo2.java:58)
  at java.lang.String.valueOf(String.java:2994)
  at java.lang.StringBuilder.append(StringBuilder.java:131)
  at tech.luxsun.interview.luxinterviewstarter.demo.Demo3.toString(Demo3.java:44)
  at java.lang.String.valueOf(String.java:2994)
  at java.lang.StringBuilder.append(StringBuilder.java:131)
    ……
  • 注释掉其中 1 个 Demo toString,输出结果
Demo2{sex='男', name='Bob', demo3=tech.luxsun.interview.luxinterviewstarter.demo.Demo3@19469ea2}
Demo2{sex='男', name='Bob', demo3=tech.luxsun.interview.luxinterviewstarter.demo.Demo3@19469ea2}
目录
相关文章
|
19天前
|
Java
什么是Java中的类和对象?它们之间有什么区别?
【4月更文挑战第12天】Java中,类是面向对象编程的基础,是对象的模板,封装数据和方法,描述共享属性和行为。对象是类的实例,具有独特属性和行为,代表具体的个体。类与对象间是抽象与具体的关联,类是事物抽象描述,对象是其具体体现。
19 2
|
9天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
46 3
|
1天前
|
Java
Java对象和类研究
Java对象和类研究
6 0
|
1天前
|
XML Java 测试技术
Java异常处理神器:Guava Throwables类概念与实战
【4月更文挑战第29天】在Java开发中,异常处理是保证程序稳定性和可靠性的关键。Google的Guava库提供了一个强大的工具类Throwables,用于简化和增强异常处理。本篇博客将探讨Throwables类的核心功能及其在实战中的应用。
9 2
|
1天前
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
|
5天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
7天前
|
缓存 Java 程序员
|
7天前
|
安全 Java 程序员
|
7天前
|
Java
一文搞清楚Java中的包、类、接口
包、类、接口、方法、变量、参数、代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分。
29 10
|
7天前
|
Java
Java Class类
Java Class类
8 0