zoukankan      html  css  js  c++  java
  • java static序列化

    https://blog.csdn.net/yangxiangyuibm/article/details/43227457

    博主讲的很好

    package test;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
     
    public class Main{
        
        public static void main(String[] args){
            
            Person person = new Person();
            person.setAge(25);
            person.setName("YXY");
            Person.test="JAVA"; //modify the test value
            
            File file = new File("c:/test.txt");
            try {
                OutputStream out = new FileOutputStream(file);
                ObjectOutputStream objout = new ObjectOutputStream(out);
                objout.writeObject(person);
                objout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            //code segment 1
            Person perobj = null;
            try {
                InputStream in = new FileInputStream(file);
                ObjectInputStream objin = new ObjectInputStream(in);
                perobj = (Person)objin.readObject();
                System.out.println(perobj.test);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    正是因为static变量不会被序列化,所以输出perobj.test时,因为perobj是一个Person类型的变量,所以jvm会到方法区中(jdk1.8之后应该到堆中找到静态变量)

    发现Person类型静态属性是“JAVA”,所以打印出"JAVA"

    package test;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
     
    public class TEST {
        public static void main(String[] args){
            File file = new File("c:/test.txt");
            
            //code segment 1
            Person perobj = null;
            try {
                InputStream in = new FileInputStream(file);
                ObjectInputStream objin = new ObjectInputStream(in);
                perobj = (Person)objin.readObject();
                System.out.println(perobj.test);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    这时输出的就是"IBM",因为没有改变静态变量的值。

  • 相关阅读:
    小程序左滑删除之<movable-area/>实现
    小程序省市区县分割
    小程序自定义底部按钮适配Iphone X
    小程序处理图片加载失败的问题
    Notepad++ 使用技巧
    IDEA 在打包项目时遇到的ERROR
    Markdown学习
    Ubuntu操作系统(文件传输)
    数据 恢复----判断Raid盘序及校验方向
    数据恢复----重组raid5解析
  • 原文地址:https://www.cnblogs.com/ljf-0/p/13875329.html
Copyright © 2011-2022 走看看