锦通 发表于 2024-7-18 23:14:21

步伐人生——Java开辟中通用的方法和准则,Java进阶知识汇总

https://img-blog.csdnimg.cn/ca5e093b49a440438db5ff1c578acd1e.png


引出

步伐人生——Java开辟中通用的方法和准则,Java进阶知识汇总
<hr> Java开辟中通用的方法和准则

建议1:不要在常量和变量中出现易混淆的字母



[*]i、l、1;o、0等
建议2:莫让常量蜕变成变量



[*]代码运行工程中不要改变常量值
建议3:三元操纵符的范例务必同等



[*]不同等会导致自动范例转换,范例提升int->float->double等
建议4:避免带有变长参数的方法重载



[*]变长参数的方法重载之后可能会包罗原方法
建议5:别让null值和空值威胁到变长方法



[*]两个都包罗变长参数的重载方法,当变长参数部分空值,大概为null值时,重载方法不清楚会调用哪一个方法
建议6:覆写变长方法也循规蹈矩



[*]变长参数与数组,覆写的方法参数与父类雷同,不仅仅是范例、数量,还包罗表现形式
建议7:警惕自增的陷阱



[*]count=count++;操纵时JVM起首将count原值拷贝到临时变量区,再执行count加1,之后再将临时变量区的值赋给count,以是count一直为0大概某个初始值。C中count=count;与count++等效,而PHP与Java雷同
建议8:不要让旧语法困扰你



[*]Java中抛弃了C语言中的goto语法,但是还保留了该关键字,只是不进行语义处置惩罚,const关键中同样雷同
建议9:少用静态导入



[*]Java5引入的静态导入语法import static,使用静态导入可以减少步伐字符输入量,但是会带来许多代码歧义,省略的类束缚太少,显得步伐晦涩难懂
建议10:不要在本类中覆盖静态导入的变量和方法



[*]例如静态导入Math包下的PI常量,类属性中又界说了一个同样名字PI的常量。编译器的“最短路径原则”将会选择使用本类中的PI常量。本类中的属性,方法优先。如果要变更一个被静态导入的方法,最好的办法是在原始类中重构,而不是在本类中覆盖
建议11:养成良好的习惯,显式声明UID



[*]显式声明serialVersionUID可以避免序列化和反序列化中对象不同等,JVM根据serialVersionUID来判定类是否发生改变。隐式声明由编译器在编译的时候根据包名、类名、继续关系等诸多因子盘算得出,极其复杂,算出的值基本唯一
建议12:避免用序列化类在构造函数中为不变量赋值



[*]在序列化类中,不实用构造函数为final变量赋值)(**序列化规则1:**如果final属性是一个直接量,在反序列化时就会重新盘算;**序列化规则2:**反序列化时构造函数不会执行;**反序列化执行过程:**JVM从数据流中获取一个Object对象,然后根据数据流中的类文件描述信息(在序列化时,保存到磁盘的对象文件中包罗了类描述信息,不是类)查看,发现是final变量,必要重新盘算,于是引用Person类中的name值,而此时JVM又发现name没有赋值(因为反序列化时构造函数不会执行),不能引用,于是它不再初始化,保持原始值状态。整个过程中必要保持serialVersionUID雷同
建议13:避免为final变量复杂赋值



[*]类序列化保存到磁盘上(或网络传输)的对象文件包罗两部分:1、类描述信息:包罗包路径、继续关系等。留意,它并不是class文件的翻版,不记录方法、构造函数、static变量等的详细实现。2、非瞬态(transient关键字)和非静态(static关键字)的实例变量值。总结:反序列化时final变量在以下环境下不会被重新赋值:1、通过构造函数为final变量赋值࿱

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 步伐人生——Java开辟中通用的方法和准则,Java进阶知识汇总