变量serialVersionUID称为序列化版本号,这个变量多用于实现了Serializable的类中,试用场景是类的序列化.当我们没有定义这个变量的时候,虚拟机会根据类的属性算出一个独一无二的该变量值,在序列化的时候对该变量赋值,并随类一同序列化. 反序列化的时候,虚拟机同样会先读取该变量值,然后再当前读取的类中寻找同样的变量值,如果找到,那么反序列话成功,找不到即会报异常. 使用虚拟机默认计算的serialVersionUID就会有一个明显的劣势,那就是类一旦序列化后,我们就不能修改该类了…
作者:郭无心链接:https://www.zhihu.com/question/24852886/answer/117314768来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 其实答主想问的是serialVersionUID的作用. 简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的. 在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionU…
public class User implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = 1L; /** * 主键ID */ private Integer userId; /** * 用户名 */ private String userName; /** * 密码 */ private String passWord; /** * 姓名 */ privat…
很多时候一个新手在写代码的时候,往往你的IDE就会告诉你一个警告 然后你点击处理这个警告之后,它就会默认给你的类生成一个 private static final long serialVersionUID = 1L; 然后强迫症的孩子就一直不明白为什么会需要这个东西,这个东西到底是干嘛用得呢? 然后渐渐的你会发现,这个东西和你写的代码毫无关系,没什么卵用,于是渐渐的你就把他扔在一边了. 这次我就需要来解决这个问题,困扰你的private static final long serialVers…
 private static final long serialVersionUID = -1672970955045193907L;   SerialVersionUID,后面简称SUID 其实序列化的作用是能转化成Byte流,然后又能反序列化成原始的类.能在网络进行传输,也可以保存在磁盘中,有了SUID之后,那么如果序列化的类已经保存了在本地中,中途你更改了类后,SUID变了,那么反序列化的时候就不会变成原始的类了,还会抛异常,主要就是用于版本控制. 参考自 https://blog.cs…
浅析java修饰符之public default protected private static final abstract 一   修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 二   分类(大致分两类) 1.访问修饰符,包括:public default protected private 2.非访问修饰符,包括:static final abstract 三 访问修饰符——Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权…
java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 子类 包内 类内 public yes yes yes yes protected no yes yes yes default no no yes yes private no no no yes 2.final修饰符 final意思变修饰类.字段.方法修饰类类能被扩展(extends)也能被继承…
1.类 (1)在java中有public.protected.private三种显示的修饰符用于控制可见性,package不是显示的修饰符,它是隐含的,即如果在类.变量等前没加显示的可见性修饰符,那它就是package级别的.如果在类的定义中没有指定package,那么java会把它放在缺省包中,一般来说这个缺省的包就是当前目录.(2)在子类中的方法如果重载了父类的方法,那么该方法的可见级别应更底或者相同,如父类中的方法是public,那么子类中方法必须是public.(3)在java中,一般来…
本文阅读时间大约4分钟. 参考答案 就这个问题而言,我总结了三个原因: 设置为private是为了防止其他类使用当前类的日志对象: 设置为static是为了让每个类中的日志对象只生成一份,日志对象是属于类的,不是属于具体的实例的: 设置成final是为了避免日志对象在运行时被修改. 补充一下:有时候我会使用protected而不是private,只有一种情况下我会这么用:当我的设计中有继承体系,并且我希望继承体系里的对象都使用同一个日志对象时,就会在基类里定义一个protected的日志对象.…
LoggerFactory.getLogger(WhMainBusi.class):指定类初始化日志对象,在日志输出的时候,将会打印日志信息所在的类.如: logger.info("日志信息"),将会打印: WhMainBusi:日志信息.…