Exception in thread “main“ java.io.NotSerializableException:

①报错:Exception in thread “main” java.io.NotSerializableException:com.aaa.test1.God

(翻译成中文:在com.aaa.test1.God类的线程中出现无序列化异常)
在这里插入图片描述

解决:在God类之后实现Serializable接口。即:implements Serializable

(extends是继承类,implements是实现接口。)java中 implement和extends的作用和区别详细解释https://blog.csdn.net/YouYou_GO/article/details/83539537
在这里插入图片描述

②设计模式测试—KQC

要求:

1.定义上帝类:
方法: 创建世界
2.要求使用懒汉,并且多线程安全的单例模式创建上帝类对象
3.接着针对创建的上帝类对象,使用深拷贝的方式,创建另外一个上帝对象
4.测试:
a.用单例模式获取两个上帝类对象,打印对象地址
b.用深拷贝方式获取两个对象,打印对象地址

实现效果:

在这里插入图片描述

代码:

CopyUtil :
package com.aaa.test1;

import java.io.*;

public class CopyUtil {
    public static Object copyDeep(Object obj) throws IOException, ClassNotFoundException {
        //定义 内存字节数组输出流:将字节数组输出到内存中的某个区域
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        //对象输出字节流:将数据对象写入到内存字节数组流中
        ObjectOutputStream oos=new ObjectOutputStream(bos);
        oos.writeObject(obj);

        //创造字节数组输入流:从上面的字节数组输出流中读取数据
        ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois=new ObjectInputStream(bis);
        return ois.readObject();
    }
}

God :
package com.aaa.test1;

import java.io.Serializable;

public class God implements Serializable {
    //创造世界方法
    public void create(){
        System.out.println("创造世界");
    }

    //静态内部类
    static class InnerCls{
        //内部类中定义静态对象
        static God god=new God();
    }

    //获取静态内部类中的对象
    public static God getInstance(){
        return InnerCls.god;
    }
}

GodCopy :
package com.aaa.test1;

import java.io.IOException;

public class GodCopy {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //原型对象
        God g1=new God();
        //通过字节数组流的方式,将对象数据写道内存中,然后再复制一份。实现深度copy
        God g2=(God) CopyUtil.copyDeep(g1);
        //调用方法
        g1.create();
        g2.create();
        //输出对象
        System.out.println(g1);
        System.out.println(g2);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值