创建对象的四种方式
- New 对象
开辟内存空间,在堆中存放 - 克隆 拷贝创建对象
- 反序列化
把字节序列恢复为原来的Java对象 - 反射
序列化与反序列化
序列化:是一个Java对象作一下“变换”,变成字节序列。这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播。
反序列化: 把字节序列恢复为原来的Java对象(Java源文件)。
实现序列化的接口:Serializable
Serializable是一个标记性接口,没有实现任何内容,只是告诉JVM当前对象需要序列化。
(Cloneable接口也是一个标记性接口,没有任何内容,只是告诉JVM该对象需要克隆)
SerialVersionUID是序列化前后唯一的标识符,如果没有人为定义过SerialVersionUID,那么编译器会自动声明一个。一般不需要人为处理。
- 注:
static修饰的不会被序列化
transient修饰的不会被序列化
Demo
Car.java
package com.wdy.stream;
import java.io.Serializable;
public class Car implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L; //版本信息,编译器自动声明。一般不需要人为修改
private int id;
private String brand;
private String color;
private double price;
public Car() {
}
public Car (int id, String brand, String color, double price) {
this.id = id;
this.brand = brand;
this.color = color;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBrand() {
return brand;
}