很多说是不行的 ,但如下方式是可以的,怎么解释
package com.base.test;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class Serialize {
public Serialize() {
objectStream();
}
public void objectStream() {
Test2 t = new Test2();
//t.setI(999);
t.setWord("fuck you");
try {
FileOutputStream fs = new FileOutputStream("java.dat");
ObjectOutputStream oo = new ObjectOutputStream(fs);
oo.writeObject(t);
FileInputStream fi = new FileInputStream("java.dat");
ObjectInputStream oi = new ObjectInputStream(fi);
Test2 tt = (Test2) oi.readObject();
System.out.println(tt.d + " " + tt.getI() + " " + tt.getWord()+ " " + tt.s);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Serialize();
}
}
class Test2 implements Serializable {
private static int i = 22;
private String word = "";
int k = 11;
// 下面的transient关键字,作用是将d设为透明的,不存在的,然后在输出的时候就输出默认值
transient double d = 22.22;
String s = "string"; public void setWord(String word) {
this.word = word;
} public String getWord() {
return word;
} public void setI(int i) {
Test2.i = i;
} public int getI() {
return i;
}
}
package com.base.test;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class Serialize {
public Serialize() {
objectStream();
}
public void objectStream() {
Test2 t = new Test2();
//t.setI(999);
t.setWord("fuck you");
try {
FileOutputStream fs = new FileOutputStream("java.dat");
ObjectOutputStream oo = new ObjectOutputStream(fs);
oo.writeObject(t);
FileInputStream fi = new FileInputStream("java.dat");
ObjectInputStream oi = new ObjectInputStream(fi);
Test2 tt = (Test2) oi.readObject();
System.out.println(tt.d + " " + tt.getI() + " " + tt.getWord()+ " " + tt.s);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Serialize();
}
}
class Test2 implements Serializable {
private static int i = 22;
private String word = "";
int k = 11;
// 下面的transient关键字,作用是将d设为透明的,不存在的,然后在输出的时候就输出默认值
transient double d = 22.22;
String s = "string"; public void setWord(String word) {
this.word = word;
} public String getWord() {
return word;
} public void setI(int i) {
Test2.i = i;
} public int getI() {
return i;
}
}
(2)在同一个JVM之内,类的静态变量只有一个。
在前面设值以后,因为是在同一个JVM之内,后面是可以取到的。如果不是同一个JVM,只能得到默认值,就不会保持值的连续了。序列化本来就是为了在网络上传递对象,不是运行在一个JVM里面的。