• 《改善java代码》第一章:java开发通用原则


    1、命名:包名全小写,类名首字母全大写,常量全部大写并用下划线分割,变量采用驼峰命名法
    2、三元操作符:
    int i=80;
    String s1= String.value(i<90?90:100);
    String s2= String.value(i<90?90:100.0);
    返回值不一样,s1返回90,s2返回90.0
    3、反序列化时,构造函数不会执行,final变量会被重新赋值。 如果在升级的类中有一个final变量是构造函数赋值的,而且新旧版本还发生了变化,则在应用请求热切的过程中,很可能出现反序列化生成的final变量值与新产生的实例值不相同的情况,于是业务异常就产生了,严重的话,会影响交易数据。
    因此,在序列化类中,不使用构造函数为final变量赋值。如果final变量是方法赋值的,如:final String name=initName(),则final并不会被重新赋值,之前说final变量会被重新赋值是说简单对象,包括8个基本类型,以及数组、字符串。
    4、工资分为绩效工资和基本工资,需要对绩效工资保密。
    方法1:绩效工资前加transient。这样做标志着工资类市区了分布式部署的功能,一旦遇到性能瓶颈,再想实现分布式部署就不可能了,此方法不可行。

    5、instanceof
    'A' instanceof Character :编译不通过,因为instance只能用于对象的判断,不能用于基本类型的判断。

    null instanceof String : 返回值为false,若左操作数是null,结果就直接返回false,不再运算右操作数是什么类。使用于 (String)null instanceof String一样为false

    new Date() instanceof String 编译不通过,因为Date类合String没有继承和实现关系,所以编译时直接报错。

    "string" instanceof Object :    返回值为true,"string"是一个字符串,字符串又继承了Object,故返回true

    new Object() instanceof String:  返回值为false,Object为父类。

    6、我们常把项目中的常量全部放在一个类中,如public class Constant { public final static int MAX_AGE =120;}  我们用的时候,只需要Constant.MAX_AGE。此时,如果改了Constant的MAX_AGE值为180,但是在原始的编译器重新运行后发现,用到该常量的值仍然为120,原因是,对于final修饰的基本类型和String类型,编译器会认为它是稳定态,所以在编译时就直接把值编译到字节码中了,避免了在运行期运用,以提高代码的执行效率。但是final修饰的是类,则编译器会认为它是不稳定态,采用引用关系。

    注:在现在的编译器没有这个问题,一律采用引用关系,但是潜在的风险仍然存在。

  • 相关阅读:
    Oracle基础 (十二)数学函数
    Oracle基础 (十一)字符串函数
    Oracle基础(十) DML数据操作
    Oracle 常用命令大全
    Oracle 常用的SQL语法和数据对象
    Server.MapPath()
    登陆sharepoint的主页,提示:文件存在(异常来自 HRESULT:0x80070050)
    如何查看电脑的开机时间
    SQL 2008登录的域账户与数据库服务器不再同一个域的 处理方法
    发布MVC项目到服务器上时候遇到的 模块 DirectoryListingModule 通知 ExecuteRequestHandler 处理程序 StaticFile 错误代码 0x00000000
  • 原文地址:https://www.cnblogs.com/yaohuiqin/p/9284612.html
Copyright © 2020-2023  润新知