编写高质量JAVA代码系列(建议1-10)读后简练总结

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

      比如:long l=1l;long l=11。

      建议2   莫让常量蜕变成变量

      比如:加了final和static的常量也有可能会变哦, public static final  int i=newRandom().nextInt();这种常量的定义方式是极不可取的,要在编译期就确定其值,不应该在运行期更改,否则无法确定在运行期间会发生什么事情,注意务必要让常量在运行期间保持不变,这样才是常量。

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

       三元操作符相当于if-else的简化写法,看以下代码:   int i=80; 那么string s1=String.valueOf(i<100?90:100 )、String s2=String.valueOf(i<100?90:100.0),那么s1跟s2是相等的吗?并不是,s1的值是90,而s2的值是90.0;若操作符中的两个操作数不能转换,则不做转换,返回object类型;如何两个操作数是确定类型,则按照正常的二进制数字转换;此例中的s2就由int转换成了float类型。

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

        java5引进了变长参数,该参数的目的就是为了更好地提高方法的复用性,可以随心所欲地传递实参数量,变长参数必须是方法中的最后一个参数,一个方法中不能定义多个变长参数。注意,这两个方法,public void calprice(int price,int ... discount);public void calprice(int price,int discount); 如果调用的时候,calprice(100,75);这里编译器调用的是第二个方法,并不是第一个,将75转换成{75}数组来执行,这里或许就会出现与预想不一样的情况。

          建议5  避免让空值和null值威胁到变长方法

        public void methodA(String s,Integer... i);public void methodA(String s,String ss);当这个方法被调用时,如methodA("china");methodA("china",null);这两个方法的调用都会报错,这样的方法重载违反了kiss原则(keep it simple,stupid)也称懒人原则;报错原因:因为null值是没有类型的,这两个方法虽然都符合方法的调用标准,但是不知道该调用哪个方法

           建议6  覆写变长方法也要循规蹈矩

         复写方法要满足几点要求:复写方法不能缩小访问权限、参数列表要相同、返回类型也必须相同或者其子类、不能抛出新异常但可以抛出比父类更小更有限的异常或者不抛出异常。比如:基类(父类)中的方法void fun(int i,int ... discount);子类重写该方法void fun(int i,int[] discount);用子类创建出父类,也就是向上转型时,调用该方法时fun(100,50)此时不会有报错信息,但是用子类直接创建,调用fun方法时,会报错。因为此时的50不会转换成数组,int与int类型的数组不是同一个参数类型就会编译时报错。一定要注意,复写的方法的参数与父类相同,不仅仅是类型、数量,还有显示形式。

            建议7  警惕自增的陷阱

         i++表示的是先赋值后+1;++i是先加1后赋值;count=count++;要想让count实现自增,将这个语句放在循环语句中是不可以的,count++是一个表达式,具有返回值;

           建议8 不要让旧语法困扰你

         java中依然保留着冒号操作符,也就是从c语言中保留下来的,也称为跳转标号。java语言抛弃了goto语法,是因为goto语句它可以让程序从多层循环中直接跳出来,这样同时会造成代码跳转太混乱,也很难调试,所以抛弃了,但保留了该关键字;java中用break和continue关键字来替代它。

           建议9  少用静态导入

        java5引入了静态导入语法(import static),其目的是为了减少代码输入量,提高阅读性,更好的理解程序。比如直接import static java.lang.Math.PI 这样下面的代码中可以直接使用PI,不需要把类名也写全。但是这样就会缺少类名的修饰,静态属性和静态方法的表象意义可以被无限放大,这样就很难清楚其属性或方法代表何意。对于静态导入,要遵循两个规则:一就是不使用*通配符,除非是静态常量类;二方法名是具有明确清晰表象意义的工具类。

           建议10 不要在本类中覆盖静态导入的变量和方法

        如果覆盖了的话,我们不知道哪个方法被调用了,编译器会选择就近原则,如果能够在本类中找到该变量的话,就不会去其他包或者类中了,易产生困扰。

 

          

 

            

                  

                   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值