Java-夫妻关联(★☆☆☆☆)

题目:定义丈夫类Husband,妻子类Wife,丈夫类的属性包括:身份证号、姓名、出生日期,妻子;妻子类的属性包括:身份证号、姓名、出生日期、丈夫。分别给这两个类提供构造方法(包括无参的构造方法和有参的构造方法),编写测试程序,创建丈夫和妻子对象,并通过丈夫对象访问到妻子对象中的name属性,相反亦成功获取,并对执行过程进行内存分析,分析怎样会产生空指针异常。

首先对题目进行分析,共有三个类,husband类、wife类、test测试类。

husband:id、name、date、Wife类型的引用,有参和无参的构造方法,各属性的get和set方法

wife:id、name、date、Husband类型的引用,有参和无参的构造方法,各属性的get和set方法

test测试类:创建对象,通过设置对象内的引用的内容完成对象之间的关联,通过引用获取信息并完成控制台的输出操作

那么可能会有一点困惑,就是每个类都有引用,那么二者存在一个相互引用的关系,到底是先有妻子还是先有丈夫,为了打破这种僵局,我们可以先创建一个妻子对象A,暂时令其中的Husband类型的引用为空,然后创建丈夫对象B,对象中的Wife类型的引用指向妻子A,此时丈夫对象和妻子对象都已经存在,并且建立了丈夫对妻子的关联,丈夫对象信息已经完整,通过妻子对象调用方法,将其内部的引用设置为指向丈夫对象B,这样二者之间的关系就良好建立了。

也可以理解为:

妻子没有丈夫——>丈夫追妻——>妻子接受丈夫

代码如下所示:

Husband类:

package home;

import java.util.Date;

public class husband {
    private String id;
    private String name;
    private String date;
    private wife wife;

    public husband(){

    }
    public husband(String id,String name,String  date,wife wife){
        this.id=id;
        this.name=name;
        this.date=date;
        this.wife=wife;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public home.wife getWife() {
        return wife;
    }

    public void setWife(home.wife wife) {
        this.wife = wife;
    }
}

Wife类:

package home;

import java.util.Date;

public class wife {
    private String id;
    private String name;
    private String date;
    private husband husband;

    public wife(){

    }
    public wife(String id,String name,String date,husband husband){
        this.id=id;
        this.name=name;
        this.date=date;
        this.husband= husband;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public home.husband getHusband() {
        return husband;
    }

    public void setHusband(home.husband husband) {
        this.husband = husband;
    }
}

测试类:

package home;

public class test {
    public static void main(String[] args) {
        husband husband;
        //妻子没有丈夫
        wife wife = new wife("002","西施","20220302",null);
        //丈夫追妻
        husband=new husband("001","陈玄","20220302",wife);
        //妻子接受丈夫
        wife.setHusband(husband);
        System.out.println("妻子"+husband.getWife().getName()+"的丈夫是"+wife.getHusband().getName());
    }
}

对以上的程序运行进行内存图的分析: 

怎么样会产生空指针异常?

当一个空的引用访问与实例相关的数据时,一定会产生空指针异常,所以上述程序中,要注意在指针被赋予对象的内存单元地址之前,不要去引用相关的成分。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值