java 类之间相互引用实例探索

news2024/10/5 14:27:29

本文记录一下自己对类之间相互引用的探索,如有错误,希望不吝赐教


问题一:类之间相互引用依赖会不会引用死循环
不会,例如:A类中声明一个B类的引用,B类中也声明一个A类的引用,因为类之间的引用相当于指针,声明的时候不会分配对象。即使你在A构造方法中new 一个B类对象,这个B类对象也只是一个新的,与其他的B类对象无关,只是在堆上为这个对象分配了内存。

代码实例如下:

定义了一个Student类、一个Teacher类,他们相互引用,另外在定义一个TestReference测试类
 

package com.zjh.reference;

public class Student {
    private String name;
    private int age;
    private Teacher teacher;

    public Student(){

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    public void showTeacherInfo(){
        if (teacher!=null){
            System.out.println(teacher.toString());
        }
    }
//    @Override
//    public String toString() {
//        return "Student{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                ", teacher=" + teacher +
//                '}';
//    }
}
package com.zjh.reference;

public class Teacher {
    private String name;
    private int age;
    private Student student;

    public Teacher() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }


    public void showStudentInfo(){
        if (student!=null){
            System.out.println(student.toString());
        }
    }

//    @Override
//    public String toString() {
//        return "Teacher{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                ", student=" + student +
//                '}';
//    }
}

package com.zjh.reference;

public class TestReference {

    public static void main(String[] args) {
        showInfo();
    }

    private static void showInfo() {
        Teacher teacher = new Teacher();
        teacher.setName("android 讲师");
        teacher.setAge(35);

        Student student = new Student();
        student.setName("android 学生");
        student.setAge(30);

        teacher.setStudent(student);
        student.setTeacher(teacher);

        System.out.println("teacher 获取学生信息");
        teacher.showStudentInfo();

        System.out.println("student 获取教师信息");
        student.showTeacherInfo();
    }
}

执行结果 :
> Task :TestReference.main()
teacher 获取学生信息
com.zjh.reference.Student@15db9742
student 获取教师信息
com.zjh.reference.Teacher@6d06d69c

可以看到没有发生死循环的报错

问题二、为什么担心循环依赖引起死循环呢,因为你写的方法真的可能一不小心就中招了
调用死循环出现在函数的相互调用、递归、最终导致栈溢出而报错

还是上面的代码,我将toString方法注释给放开,就报错了



这是因为重写的toString方法,循环、递归调用了,最终导致栈异常。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP为什么要三次握手与四次分手?

概要 TCP协议是五层协议中运输层的协议,下面依赖网络层、链路层、物理层,对于一个报文想发到另一台机器(假设是服务器)上对等层,每一个所依赖的层都会对报文进行包装,例如TCP协议就依赖网络层的IP协议,所以发送的报文会…

【数据库数据恢复】SQL Server数据表结构损坏的数据恢复案例

数据库故障&分析: SQL server数据库数据无法读取。 经过初检,发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉…

大专毕业,干了 3 年外包,废了····

如果不是女朋友和我提分手,我估计到现在还是外包公司呆着 大专生,19年通过校招进入湖南某软件公司,干了接近3年的点点点(功能测试),今年年初,感觉自己不能够在这样下去了,长时间呆在…

VSCode借助Remote-SSH扩展,远程调试linux系统的机器人

本文主要介绍使用VSCode借助Remote-SSH扩展,远程调试linux系统的机器人的方法 在我之前的文章: ROS主机搭建NFS服务器,虚拟机通过挂载访问及修改主机文件 中介绍了采用挂载到的方式进行远程调试的方法,本文将介绍另一种方法&#…

汽车三高试验离不开的远程试验管理平台——TFM

一 背景 众所周知,车辆在量产之前都要经过长时间的耐久性试验和多种汽车适应性或法规试验。道路试验就是在汽车上装设测试仪表和施加模拟载荷,并按实际使用条件来进行测试。此外,在实际试验场地和试验时间上也是有一定规定的。企业根据不同的…

导出符号表和字符设备驱动

目录 1. 导出符号表 1.1. 应用场景:驱动B想要使用驱动A的函数 1.2. 函数解析 1.3. 撰写提供者.c文件 1.4. 撰写提供者makefile文件 1.5. 执行makefile文件生成Module.symvers 1.6. 撰写调用者.c文件 1.7. 撰写调用者的makefile 1.8. 调用验证 2. 字符设备…

springCloud对接kafka+websockt消息中心

1.网关没有配置message和websockt的路由 2.message启动报错,线上zookeeper启动失败导致 3.message配置文件参数读取不到,原因:message_dev.yml 正确名称 message-dev.yml 4.线上websockt地址连接失败,原因:白名单没…

Cisco MPLS VPN Option C2

无RR 一、拓扑 环境:AR1-AR8各有loopback0接口分别是1.1.1.1 2.2.2.2 二、配置步骤 1、配置AS100和AS200的底层网络,这里使用OSPF配置 2、配置AS内使用LDP协议分发标签 3、ASBR之间建立EBGP邻居关系,相对端通告路由时携带标签,互联…

确保消息不会丢失

现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。 绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没…

第一章:软件工程师必备的硬件基础

目录 1、软件工程师需要具备的知识 2、计算机的组成 3、操作系统 4、BIOS的相关知识 1、软件工程师需要具备的知识 问题一:运维工程师、实施工程师是啥? 运维工程师负责服务的稳定性,确保服务可以不间断地为用户提供服务。 实施工程师负…

CmakeList使用笔记

cmake是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 Cmake的所有语句都写在一个CMakeLists.txt的文件中,Cmake运行之后就会产生我们想要的makefile文件,然…

【Jquery】Jquery实现页面嵌套到客户项目框架里面,不需要登录,获取cookie并直接展示首页:

文章目录 一、效果图:二、实现思路:三、实现代码: 一、效果图: 二、实现思路: 需求&#xff1a;嵌套到别的客户项目框架里面&#xff0c;不需要登录直接展示首页 实现&#xff1a;在打开页面前&#xff0c;获取登录cookie&#xff0c;然后再打开页面 三、实现代码: <!DOCTYP…

63、基于51单片机数字频率计NE555数码管显示系统设计(程序+原理图+Proteus仿真+参考论文+开题报告+任务书+元器件清单等)

摘 要 近年来随着计算机在社会领域的渗透和大规模集成电路的发展&#xff0c;单片机的应用正在不断地走向深入&#xff0c;由于它具有功能强&#xff0c;体积小&#xff0c;功耗低&#xff0c;价格便宜&#xff0c;工作可靠&#xff0c;使用方便等特点&#xff0c;因此越来越…

世界名酒商城元宇宙 中国4大“惨败酒

大家平时买白酒都怎么选择呢&#xff1f;一般都选择平时广告做得多&#xff0c;耳熟能详的大品牌&#xff0c;或者是直接听导购的买酒&#xff0c;毕竟那么贵的价格酒不可能不好&#xff0c;实际上这种买酒方式虽然不能说错吧&#xff0c;但是极容易错过很多好酒。 白酒市场上就…

自动化测试,UI测试和接口测试的基本概念以及指令

今天跟大家介绍UI测试、接口测试、单元测试主要内容 UI测试【Selenium】 UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为&#xff0c;即模拟用户在软件界面上的各种操作&#xff0c;并验证这些操作对应的结果是否正确。 这是最基本的一些S…

清华发布 KoLA 评测集,分4个认知层级评测LLM,GPT-4竟不是第一?

作者 | Python 预训练语言模型&#xff08;PLM&#xff09;刷GLUE&#xff0c;SuperGLUE&#xff0c;甚是常见&#xff1b;那ChatGPT等大语言模型&#xff08;LLM&#xff09;刷什么榜呢&#xff1f;现在常用的榜单&#xff0c;例如MMLU评测了57个学科知识&#xff0c;Big-Benc…

CodeForces..一条绳上的蚂蚱.[简单].[ifelse]

题目描述&#xff1a; 题目解读&#xff1a; 给定整数x和k&#xff0c;从0开始到达x&#xff0c;且每次移动的值&#xff0c;不能被k整除。 输出到达目标点x的最小移动次数和每次移动的值。 解题思路&#xff1a; 相当于在数轴上移动到目标点&#xff0c;且每次移动的数值不…

WPS数据清洗+R语言读取文件画频数分布直方图

R语言是一门好语言&#xff0c;但很多人在读取文件中数据时会遇到问题。比如我遇到的问题就是从文件中读取数据后&#xff0c;数据无法用于画图。 检索了N篇博文&#xff08;抱歉我实在无法一一列举30篇博文&#xff09;后&#xff0c;终于看到曙光&#xff0c;事实告诉我学任…

最新版CleanMyMacX4.13.6发布了,它值得买吗?

Clean My Mac X是Mac上一款美观易用的系统优化清理工具&#xff0c;也是小编刚开始用Mac时的装机必备。垃圾需要时时清&#xff0c;电脑才能常年新。Windows的垃圾清理工具选择有很多&#xff0c;但是Mac的清理工具可选择的就很少。 最新版CleanMyMacX4.13.6发布此版本有哪些亮…

2023年衣物洗护市场行业分析(京东天猫数据分析)

近年来&#xff0c;受消费者习惯的推动&#xff0c;衣物洗护用品市场不断发展&#xff0c;洗护用品行业的市场规模也不断增长。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年1月份至4月份&#xff0c;天猫平台上衣物洗护相关产品的销量为7300万&#xff0c;产品销…