安康域名注册_域名申请_网站哪里可以备案-安康企业官网备案服务
“中国正进入区块链3.0时代。”近期知名咨询与研究公司Forrester Research做出了这样的论断。
该机构首席分析师Charlie Dai表示,在3.0时代,应用区块链技术改变现有业务运营模式正成为所有主要行业的趋势。而在此前的区块链1.0时代,行业主要关注数字货币应用。在2.0时代,仅部分有远见的企业尝试通过区块链技术实现业务价值。
transient 使用小结
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
第三点可能有些人很迷惑,因为发现在User类中的username字段前加上static关键字后,程序运行结果依然不变,即static类型的username也读出来为"Alexia"了,这不与第三点说的矛盾吗?实际上是这样的:第三点确实没错(一个静态变量不管是否被transient修饰,均不能被序列化),反序列化后类中static型变量username的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的,不相信?好吧,下面我来证明:
实例
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;
@description @author @date public class TransientTest {
public static void main(String[] args) {
User user = new User(); user.setUsername("Alexia"); user.setPasswd("123456");
System.out.println("read before Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPasswd());
try {
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream("C:/user.txt")); os.writeObject(user);
os.flush(); os.close(); } catch (FileNotFoundException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace(); }
try {
User.username = "jmwang";
ObjectInputStream is = new ObjectInputStream(new FileInputStream(
"C:/user.txt")); user = (User) is.readObject();
is.close();
System.out.println("\nread after Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPasswd());
} catch (FileNotFoundException e) {
e.printStackTrace(); } catch (IOException e) {
e.printStackTrace(); } catch (ClassNotFoundException e) {
e.printStackTrace(); }
}}
class User implements Serializable {
private static final long serialVersionUID = 8294180014912103005L;
public static String username; private transient String passwd;
public String getUsername() {
return username; }
public void setUsername(String username) {
this.username = username; }
public String getPasswd() {
return passwd; }
public void setPasswd(String passwd) {
this.passwd = passwd; }
}
安康域名注册_域名申请_网站哪里可以备案-安康企业官网备案服务