zoukankan      html  css  js  c++  java
  • 改善Java程序的151个建议(1-4)

    1.不要在常量和变量中出现易混淆的数字

    个人感觉这条在于编程命名的规范性。代码除了给机器看,也要给人看。要写能够结构清晰,命名规范,让人看懂的代码。

    字母l作为长整型标志时务必大写 L

    2.莫让常量蜕变成变量

    java的常量有编译期常量和运行期常量。他们都被static final修饰。引用被static final 修饰的java八种基本类型(int,long,byte,short,float,double,char,boolean)和直接赋值的String类型的地方会被替换成实际值,例如 public static final int a = 1; 引用a的地方会被直接替换成1.基本类型的包装类型不可以。以上几种是编译期常量。

    运行期常量是到运行时才能确定值。例如public static final int a = Math.getExponent(32);  a的值需要经过计算才能完成。当然也不是所有经过计算才能得到值的都是运行时常量。

    如:public static final a = 1+1; 仍然属于编译期常量。

    oracle官方文档第15章28节对编译期常量作了解释。oracle 15-28

    书中的例子:public static final int RAND_CONST = new Random().nextInt();  导致RAND_CONST的值是不可预期的。

    3.三元操作符的类型务必一致

    1 public static void main(String[] args) {
    2         int i = 80;
    3         String s = String.valueOf(i < 100 ? 90 : 100);
    4         String s1 = String.valueOf(i < 100 ? 90 : 100.0);
    5         System.out.println(s);
    6         System.out.println(s1);
    7         System.out.println(s.equals(s1));
    8     }

    输出的结果为90,90.0,false

    造成这种结果的原因是三元操作符是要返回一个类型的结果的,编译器并不允许 条件为真时返回int 为假时返回float,所以三元操作符进行了类型转换。

    三元操作符类型转换原则如下

    1.若两个操作数不可转换,则不做转换,返回值为Object类型。

    2.若两个操作数时明确类型的表达式,则按照正常的二进制数字来转换。int转换为long,long转换为float等。

    3.若两个操作数有一个是数字S,另外一个是表达式,且其类型标识为T,那么若数字S在T的范围内,则转换为T的类型,若S超出了T类型的范围,则T转换为S类型

    4.若两个数都是字面值(Literal)则返回值类型为范围较大者。

     4.避免带有变长参数的方法重载

    变长参数的方法重载不推荐使用主要是会对人产生误导。

     1         public static void sysout(String test) {
     2         System.out.println("1.hello " + test);
     3     }
     4 
     5     public static void sysout(String... test) {
     6         for (String string : test) {
     7             System.out.println("2.hi " + string);
     8         }
     9     }
    10 
    11         public static void main(String[] args) {
    12         sysout("xu5hy");
    13     }        
    View Code

    输出  1.hello xu5hy 

  • 相关阅读:
    能让你少写1000行代码的20个正则表达式
    无法识别特性“configProtectionProvider”的解决方案
    C# 对 App.config的appSettings节点数据进行加密
    SQL数据库分配权限
    在C#项目中需要用double类型操作MSSQL float类型数据(附C#数据类型和SQL数据类型对照)
    Linux一键安装web环境全攻略phpstudy版
    阿里云linux服务器到期后续费,网站打不开解决方法之一
    onethink上传到服务器(或者迁移)后台登录验证码错误问题
    PHPCMS网站迁移过程后,添加内容 报500错误解决方案
    css3 media媒体查询器用法总结
  • 原文地址:https://www.cnblogs.com/xushy/p/10628069.html
Copyright © 2011-2022 走看看