读-秦小波-编写高质量代码:改善java程序的151个建议

编写高质量代码--改善Java程序的151个建议精要 声明:本文只是把秦小波所著《编写高质量代码--改善Java程序的151个建议》艺术 阅读详情

有些建议不太用到,但是用到的时候如果不注意就会进坑,所以书名改成Java的151个坑更合适。

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

    • 包名全小写,类名首字母全大写,常量全大写下划线分割,变量驼峰;
    • 字母l作为长整形标志大写L;
  2. 莫让常量蜕变成变量

    • 常量final staic,一般不会,主要是值常量的值不要通过计算获取值,值应该在编译期确认,不要在运行期更改;
  3. 三元操作符的类型务必一致
    – 不一致会做转换,不管怎么转换,保持一致就行;

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

    • 重载的话,调用时不一定是你想要那个方法;
  5. 别让null值和空值威胁到变长方法

    • 直接传递null或空值会让编译器区分不了调用的是哪个变长方法;
  6. 覆写变长方法也循规蹈矩

    • 覆写满足的条件:
      • 不能缩小访问权限;
      • 参数列表与重写方法相同(类型、数量、显示形式);
      • 返回类型相同或是其子类;
      • 不能抛出新的异常或超出父类范围的异常,可以缩小或者不抛;
    • 覆写变长方法参数列表必须完全一致;
  7. 警惕自增的陷阱

    • java中count = count++等价于mockAdd(int count){int temp=count; count=count+1;return temp;};
    • c++中count=count++会自增;
  8. 不要让旧语法困扰你

    • 主要是java保有的一些关键字,如goto;
    • 抛弃不用;
  9. 少用静态导入

    • 不使用*通配符导入;
    • 方法名是否具有明确清晰的意义;
    • 感觉就是导入的常量类和常量一定要具有含义清晰,不能混淆;
  10. 不要在本类中覆盖静态导入的变量和方法

  11. 养成良好习惯,显示声明UID

    • 实现Serializable接口的类,serialVersionUID要生成;
  12. 避免用序列化类在构造函数中为不变量赋值

    • 序列化类中,不使用构造函数为final变量赋值;
    • 基本类型,数组或简单对象(不通过new);
  13. 避免为final变量复杂赋值

    • 反序列化时final变量在以下情况下不会被重新赋值:
      • 通过构造函数赋值;
      • 通过方法返回值赋值;
      • final修饰的属性不是基本类型;
  14. 使用序列化类的私有方法巧妙解决部分属性持久化问题

    • defaultWriteObject(),defaultReadObject(),writeXX和readXX屏蔽某些字段的序列化;
    • 不要这个,基本不会用到;
  15. break万万不可忘

  16. 易变业务使用脚本语言编写

    • 之前工作中有个这样的需求,10几种类型根据公式计算不同生失效时间,公式易变,当时想用js,找了好久都没找到好用的,后来放弃了;
    • 如果能找到适合的脚本engine,那就用吧;
  17. 慎用动态编译

  18. 避免instanceof非预期结果

    • instanceof只能用于对象的判断,基本类型不行;
    • 左操作数为null,直接返回false;
  19. 断言绝对不是鸡肋

    • 在spring源码中n多使用断言的地方,感觉只是辅助注释的作用;
    • 想用就用,不想用就算;
  20. 不要只替换一个类

    • 如果你用ide的话,基本不会有这个问题;
    • 发布时,禁止类文件替换,整体发布。常量类不要私自替换,因为常量会被预编译到引用的类中,会导致私自替换的不起作用;
  21. 用偶判断,不用奇判断

    • 奇数判断,负数有问题
  22. 用整数类型处理货币

    • 用什么整形,直接BigDecimal;
  23. 不要让类型默默转换

    • 基本类型向包裹类型转换时,使用主动声明方式;
    • long想Long转换:1L*X;
  24. 边界

    • 单元测试时,边界测试要认真
  25. 四舍五入

    • 第一次听说看见四舍五入还有这么多说法,服了,不过如果真有用到的地方一定要跟业务确认清楚;
    • RoundingMode;
  26. 提防包装类型的null值

    • 包装类型参入运算时,做null值校验;
  27. 谨慎包装类型的大小比较

    • ==比较对象引用,>或<使用响应的value()方法;
    • 使用相应的compareTo;
  28. 优先使用整形池

    • valueOf生成的包装实例可以显著提供空间和时间性能;
    • Integer和Long的会缓存-128到127之间的对象,范围外会new,Double和Float会new;
  29. 优先选择基本类型

    • 基本类型可以先加宽,再转变成对应的包装类型,但是不能直接转变成宽的包装类型;
  30. 不要随机设置随机种子

    • 随机数和种子的关系:
      • 种子不同,产生不同的随机数;
      • 种子相同,即使实例不同也产生相同的随机数;
    • 非必要,不要设置种子;
  31. 接口中不要存在实现代码

  32. 静态变量一定要先声明后赋值

    • 变量赋值分2步:先分配空间后赋值,如果先赋值后声明的话,就可能后声明的赋值覆盖之前的赋值;
  33. 不要覆写静态方法

    • 实例对象有2个类型:
      • 表面类型:声明时的类型
      • 和实际类型,对象产生时的类型
    • 非静态方法根据实际类型来执行;
    • 静态方法一般是通过类名访问,也可以通过对象访问,当通过对象调用静态方法时,会通过对象的表面类型查找入口执行,又是一个第一次听说的东西;
  34. 构造函数尽量简化

  35. 避免在构造函数中初始化其他类

    • 跟34对应,构造函数简化,然后提供其他初始化方法,spring中学会的;
  36. 使用构造代码块精炼程序

    • 直接{}括起来的代码片段,会在每个构造函数中调用;
    • 建议不要用;
  37. 构造代码块会想你所想

    • 构造代码库在super,this调用的情况下也只会调用一次;
    • 了解就行,非必要使用
  38. 使用静态内部类提供封装性

  39. 使用匿名类的构造函数

  40. 匿名类的构造函数很特殊

  41. 让多重继承称为现实

    • 外部类继承一个,内部类再继承另一个;
  42. 让工具类不可实例化

    • private 构造函数,阻止不了反射,实在不行就构造抛异常;
  43. 避免对象的浅拷贝

  44. 推荐使用序列化实现对象的拷贝

  45. 覆写equals方法时不要识别不出自己

    • 对String做trim
    • 这个要注意,好多接收外部数据什么的,都需要做trim处理;
  46. equals应该考虑null值情景

    • 判断null值情况
  47. 在equals中使用getClass进行类型判断

    • 使用getClass进行类型判断,不要使用Instanceof,主要是防止继承情况下的判断;
    • 这个还真没注意,下次要小心了;
  48. 覆写equals方法必须覆盖hashCode方法

  49. 推荐覆写toString方法

  50. 使用package-info类为包服务

    • 很少用到,spring源码中看到,用这个给包做注释用的情况
    • 作用:
      • 声明友好类和保内访问常量;
      • 为在包上标注注解提供便利;
      • 包注释说明;
  51. 不要主动进行垃圾回收

  52. 推荐使用String直接量赋值

    • 常量池;
  53. 注意方法传递的参数要求

    • replaceAll传递的第一参数是正则,我去,真没在意这个,下次小心;
  54. 正确使用String,StringBuffer、StringBuilder

    • 一般情况String,频繁操作后面2个,单线程StringBuilder,线程安全StringBuffer;
  55. 注意字符串的位置

    • 加号表达式中,String字符串具有最高优先级;
    • 对于运算符优先级有疑问的,直接括号省事;
  56. 自由选择字符串拼接方法

    • 加号,concat或append,耗时依次减少;
  57. 推荐在复杂字符串操作中使用正则表达式

  58. 强烈建议使用UTF编码

    • 编码是开发永远的噩梦;
  59. 对字符串排序持一种宽容的心态

    • Collator中文排序,gb2312差不多可以解决,复杂的就找开源的或自己实现吧;
  60. 性能考虑,数组是首选

    • 性能要求高的场景中使用数组替代集合;
  61. 若有必要,使用变长数组

    • 主要是初始定长,后期校验扩容
  62. 警惕数组的浅拷贝

    • Arrays.copyOf产生的是一个浅拷贝,基本类型拷贝值,其他拷贝引用地址;
  63. 场景明确下,为集合指定初始容量

  64. 多种最值算法,适时选择

    • 自己实现;
    • 先排序,后取值:Arrays.sort();
  65. 避开基本类型数组转换list陷阱

    • 基本类型不能泛型话;
    • Arrays.asList()参数不能使用原始类型;
  66. asList产生的list对象不可更改

    • 产生的list是一个静态内部类;
  67. 不能的列表选择不同的遍历方法

    • ArrayList实现RandomAcess随机存取接口,使用for循环更好,而不是foreach;
  68. 频繁插入和删除使用LinkedList

    • 对比ArrayList,想想数据结构就明白了;
  69. 列表相等只需关心元素数据

    • 在AbstractList中实现元素和长度比较
  70. 子列表只是原列表的一个视图

    • subList返回子列表;
    • 所有对subList产生对象的操作作用于原list;
  71. 推荐使用subList处理局部列表

  72. 生成子列表后不要再操作原列表

    • 会异常;
  73. 使用Comparator排序

  74. 不推荐使用binarySerach对列表进行检索

    • 二分查找建立在基本有序的情况才行;
    • 实现RandomAccess或数据量小于5K进行二分查找,否则顺序查找;
  75. 集合中元素必须做到compareTo和equals方法

  76. 集合运算时使用更优雅的方式

    • 并集addAll
    • 交集retainAll
    • 差集removeAll
  77. 使用suffle打乱列表

    • collections.shuffle();
  78. 减少hashmap中元素的数量

    • 主要是扩容的时候,可能会内部不够用;
  79. 集合中hash码不要重复

    • 不重复最好,重复也无所谓,不用关心;
  80. 多线程使用Vector或hashTable

  81. 非稳定排序推荐使用List

    • treeset适用于不变量的数据集合排序;
    • 在处理过程中可能会重新排序的,可以使用list自行排序;
  82. 集合家族

    • list
    • set
    • map
    • queue
    • 数组
    • 工具类:Arrays和反射类Array,collections
    • 扩展类:commons和google的collections
  83. 推荐使用枚举定义常量

    • 不太喜欢这种;
  84. 使用构造函数协助描述枚举项

  85. 使用枚举常量时,小心switch带来的空值异常

  86. 在switch的default代码块中增加AssertionError错误

    • 如果使用枚举做switch就不应该走到default;
  87. 枚举使用valueOf前必须进行校验

  88. 枚举实现工厂模式

  89. 枚举项的数量限制在64个以内

  90. 小心注解继承

  91. 枚举和注解结合使用威力更大

    • 注解的值可以使用枚举来定义;
  92. 注意@Override不同版本的区别

    • 1.5版本的接口实现,不需要override,1.6以上没问题,注意下就可以;
  93. java的泛型是类型擦除的

    • 泛型参数编译后会被清除;
  94. 不能初始化泛型参数和数组

    • 类型擦除,无法获取具体参数
  95. 强制声明泛型的实际类型

  96. 不同场景使用不同的泛型通配符

    • 读操作? extend限定泛型上界;
    • 写操作? super限定泛型下界;
  97. 警惕泛型是不能协变和逆变的

    • 协变:窄类型替换宽类型;
    • 逆变:宽类型替换窄类型;
  98. 建议采用的顺序是List\List

if(!method.isAccessible()){
    method.setAccessible(true);
}

method.invoke(obj, args);
  1. 使用forName加载类文件

    • 有个参数设置static方法是否调用,默认加载static代码块;
  2. 动态加载不适合数组

    • 数组用的反射跟普通的不一样;
  3. 动态代码可以使代理模式更灵活

  4. 反射增加装饰模式的普适性

  5. 反射让模板方法模式更强大

  6. 不需要太多关注反射效率

    • 如果有需求要用,就不要过分关注;
  7. 提倡异常封装

    • 我们项目很少用,都是用封装errorcode,下次最起码保证自己的代码部分用到;
/** spring 中看到这种处理方式,感觉适合流程无关联性的业务*/
Class MyException extends Exception{
    private List<Throwable> causes = new ArrayList<Throwable>();

    public MyException(){
    }

    ...get set ...
}
  1. 采用异常链传递异常

    • 异常需要封装和传递,不同视角展示不同提示;
  2. 受检异常尽可能转为非受检异常

  3. 不要在finally块中处理返回值return

    • finally返回会覆盖try块中的return值;
    • 屏蔽异常;
    • 只做收尾;
  4. 不要在构造函数中抛出异常

    • 这个还真没见过这样处理的;
  5. 使用Throwable获得栈信息

  6. 异常只为异常服务

    • 还真这么干过,正常业务有问题,为了省事直接抛出异常处理;
  7. 多使用异常,性能问题放一边

  8. 不推荐覆写start方法

    • 不覆写Thread类的start方法
  9. 启动线程前stop方法是不可靠的

  10. 不适用stop方法停止线程

  11. 线程优先级只是用3个等级

    • 差距大,才有体现;
  12. 使用线程异常处理器提升系统可靠性

123.volatile不能保证数据同步

  1. 异步运算考虑使用callable接口

    • 有返回值和异常处理;
  2. 优先选择线程池

  3. 选择不同的线程池

  4. Lock和synchronized是不一样的

  5. 预防死锁

  6. 适当设置队列长度

    • 阻塞队列的长度是固定的;
  7. countDownLatch协调子线程
    - CountDownLatch、CyclicBarrier和Semaphore区别;

  8. CyclicBarrier让多线程齐步走

    • 让多线程同时做某些事;
  9. 提升Java性能的基本方法

    • 不要在循环条件中计算;
    • 尽可能把变量、方法声明为final static类型;
    • 缩小变量的作用范围;
    • 频繁字符串操作使用StringBuffer或StringBuilder;
    • 使用非线性检索;
    • 覆写Exception的fillInStackTrace方法,耗时,看情况,没太多必要;
    • 不建立冗余对象;
  10. 若非必要,不要克隆对象

    • new做了优化;
  11. 推荐使用”望闻问切”的方式诊断性能

    • 望:观察现象;
    • 闻:团队的技术能力、氛围,习惯、擅长;
    • 问:讨论;
    • 切:分析问题;
  12. 定义性能衡量标准

  13. 解决首要系统性能问题

  14. 调整jvm参数提升性能

  15. 性能是个大“咕咚”

    • 没有慢的系统,只有不满足业务的系统;
    • 没有慢的系统,只有架构不良的系统;
    • 没有慢的系统,只有懒惰的技术人员;
    • 没有慢的系统,只有不愿意投入的系统;
    • 怀疑精神;
  16. 大胆采用开源工具

  17. 推荐使用Guava扩展工具包

    • 看情况吧,有需要,可以用,没有需求,就拉倒吧;
  18. Apache扩展包

  19. 推荐使用Joda日期时间扩展包

  20. 可以选择多种Collections扩展

  21. 提倡良好的代码风格

    • 见过几百行代码的方法,看的疯了;
  22. 不要完全依靠单元测试来发现问题

    • 单元测试不可能测试所有场景:
      • 正常场景;
      • 边界场景;
      • 异常场景;
    • 单元测试没问题,可能全流程测试会出问题;
    • 部分代码无测试,尤其是多线程环境的测试;
    • 单元测试验证的是开发的想法,万一要是错的了,那不就挂了;
    • 这个标题感觉改成不要相信测试最好,真实环境让你想吐;
  23. 让注释正确、清晰、简洁

  24. 让接口的职责保持单一

  25. 增强类的可替换性

  26. 依赖抽象而不是实现

  27. 抛弃7条不良的编码习惯

    • 自由风格的代码;
    • 不适用抽象的代码;
    • 彰显个性的代码;
    • 死代码;
    • 冗余代码;
    • 自以为是的代码;
    • 见过最差的,日志居然用sysout打印,想骂人的感觉;
  28. 以技术员自律而不是工人

    • 不为工作,爱你的工作;

总结:
1. 刚开始看,不像是国人写的,老外倒是喜欢写这种类型的书,感谢作者;
2. 泛型和注解部分写的不错;
3. 书中的坑,好多都是你用到时一不小心就进去了,所以用你不常用东西时,一定要先了解下,这是看这本书最重要的体会了

编写高质量代码 改善Java程序的151个建议 PDF高清完整版 立即下载

相关推荐

使用LaTex写IEEE trans 论文的参考文献(bib)

(1)在.TeX文件的最下方添加这几行内容,主要为生成tran形式的参考文献,第二行为参考文献名称,我命名为reference.bib,所以写的是reference,要根据自己的命名改写。(5)如果要在文中引用的话,就在.tex文件中添加\cite{},中括号里面内容为方框圈出来部分,但引用之后,在参考文献后面会出现[1]这样的标识,不知道为什么。(4)完成(3)以后,点击工具-命令-LaTeX,编译,然后按照此步骤LaTeX-bibtex-LaTeX-LaTeX,就可以完成参考文献的导入。

qq_45884215的博客 6258

编写高质量代码: 改善Java程序的151个建议 | 第三章 类、对象及方法

也可以先使用后声明,因为静态变量是类初始化时首先被加载,JVM会去查找类中所有的静态声明,然后分配空间,分配到数据区(Data Area)的,它在内存中只有一个拷贝,不会被分配多次,注意这时候只是完成了地址空间的分配还没有赋值,之后JVM会根据类中静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行,后面的操作都是地址不变,值改变。,在普通内部类中,我们可以直接访问外部类的属性、方法,即使是private类型也可以访问,这是因为内部类持有一个外部类的引用,可以自由访问。使用成员内部类实现多重继承。

qq_42605751的博客 836

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1731

JAVA高质量代码的12条建议

通过使用继承,您可以创建一个包含公共代码的基类,然后创建继承该代码的子类。你得想办法让你的代码能让别人容易看的懂、容易维护、能够很好的扩展,那么你才是一个合格的程序员,本文介绍了一些最佳实践和示例,希望对你有帮助。干净代码的另一个重要原则是使用适当的数据类型, 这可确保您的代码能够正常工作并减少出现错误的可能性。开发工具安装 checkstyle 这样的代码格式化工具来检查代码,同样,sonarQube 也可以帮助检查代码中的问题。干净的代码还意味着使其易于阅读,使用空格和缩进来提高代码的可读性。

xiaocai 816

【音视频处理】MP4、FLV、HLS适用范围,在线视频播放哪个更好

本期我们讨论在线点播的视频格式,对比这些视频格式的优劣以及原因 1、封装格式的作用 2、MP4 3、FLV 4、HLS

池鱼 - YiiGaa 2万+

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4403

如何写出优雅、高效、逼格高的Java代码(代码优化、Java新特性、代码规范)

尽量多的收录了一些优雅、高效、逼格高的java代码 欢迎大家补充,共同学习进步~

Meteors.的博客 6765

实验手册(灾难恢复)

我们发现DC1与DC2的复制出现问题,此时我们检查了在DC2中,DC1是否被正确注册。这里选择还原系统状态,因为我们原DC1上只备份了AD的数据,所以我们在新的这台服务器上还原的也是AD数据库。因为我们是单域下的测试,只测试了一个域,所以它会出现这样的报错。我们选择远程共享文件夹,我们备份的时候,是在备份这台服务器上的。同时删除SRV记录,A记录,NS记录,SOA记录,框框里面的所有有关dc1的记录全部删除。如果在企业中AD数据的备份是每周或者每月都会有一次备份,选择恢复AD数据库的时间。

weixin_52364868的博客 1309

改善java程序的151个建议

《编写高质量代码-改善java程序的151个建议》 --秦小波 第一章、开发中通用的方法和准则 1、不要在常量和变量中出现易混淆的字母 long a=0l; --> long a=0L; 2、莫让常量蜕变成变量 static final int t=new Random().nextInt(); 3、三元操作符的类型无比一致 int i=80;...

weixin_30654583的博客 1987

NSIS教程(2): 传统用户界面(Classic UI)

NSIS教程: 《NSIS用户手册 中文版》 《NSIS图文教程集锦 - 轻狂志》 本文以一个完整的、传统界面的网易云音乐安装包的脚本为示例,来介绍NSIS传统用户界面的开发流程。 NSIS脚本 # 单行注释用井号"#"或分号";",跨行注释用可以用C/C++中注释语法。 # 使用!define定义一些常量(如安装包的版本号等) # 对常量或变量的引用可以使用如${PROD

while(1) { smile(); } 8万+

2019年高教社杯全国大学生数学建模竞赛 C 题:《机场的出租车问题》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 3453

编写高质量代码:改善Java程序的151个建议

本系列是用来记录《编写高质量代码 改善java程序的151个建议》这本书的读书笔记。方便自己查看,也方便大家查阅。 全书共12章,共有151条建议,其中1~3章针对java语法本身提出了51条建议;第4~9章重点针对JDK API的使用提出了80条建议;第10~12章针对程序的性能、开源的工...

chetianyao8457的博客 352

【YOLOv11多模态涨点改进】独家创新首发| TGRS 2026 |引入 CIFusion 通道交互融合模块,通过跨特征交互机制强化目标区域响应,适合多模态融合目标检测,小目标检测高效涨点

🔥本文提出了一种改进YOLOv11多模态目标检测模型的方法,通过引入CIFusion通道交互融合模块来提升RGB与红外特征融合效果。CIF模块采用通道级自适应交互机制,根据全局上下文动态分配不同模态通道的重要性,实现跨模态特征交互与互补信息融合。相比传统拼接或加权融合方式,CIF能够增强目标区域响应,抑制背景噪声,提高小目标和低对比度目标的检测性能。实验表明,该方法在DroneVehicle等数据集上显著提升了检测精度。论文还详细介绍了CIF模块的结构原理、实现代码及模型配置方法。

Ai缝合怪、助力小伙伴高效发论文 186

编写高质量代码:改善Java程序的151个建议(第1章建议1~5)

本系类文章,用来记录《编写高质量代码 改善java程序的151个建议》这本书的读书笔记。由于篇幅原因本人将读书笔记采取分批记忆的方式来进行记录分享,全书共12章,共有151条建议,其中1-3章针对java语法本身提出了51条建议;第4~9章重点针对JDK API的使用提出了80条建议;第10~12章针对程序的性能、开源的工具和框架、编码风格和编程思想等方面提出了20条建议。本人根据此书的目录结构,循序渐进的阅读此书,特记录于此。

jjc4261的博客 238

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《编写高质量代码:改善Java程序的151个建议》读书笔记

《编写高质量代码:改善Java程序的151个建议》读书笔记

biubiubiubibibi的博客 261

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量    建议3:三元操作符的类型务必一致   建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法   The reasonable man adapts himself to the world; The unreasona...

dingtuo8134的博客 208

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

改善Java程序的151建议_改善java程序的151个建议

《编写高质量代码-改善java程序的151个建议》--秦小波一、开发中通用的方法和准则1、不要在常量和变量中出现易混淆的字母long a=0l; --> long a=0L;2、莫让常量蜕变成变量static final int t=new Random().nextInt();3、三元操作符的类型无比一致int i=80;String s=String.valueOf(i<100?9...

weixin_39559369的博客 445

《编写高质量代码:改善Java程序的151个建议》 建议19

19. 慎用动态编译 动态

Yokeqi的专栏 722

编写高质量代码--改善Java程序的151个建议

声明:本文只是把秦小波所著《编写高质量代码--改善Java程序的151个建议》一书的目录贴出来,相当于整个大纲,就好比武功心法,版权归属秦小波。 1. Java开发中通用的方法和准则 1.1 不要在常量和变量中出现易混淆的字母 1.2 莫让常量蜕变成变量 1.3 三元操作符的类型务必一致 1.4 避免带有变长参数的方法重载 1.5 别让null值和空

572

编写高质量代码改善java程序的151个建议——[1-3]基础?亦是基础

原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks     The reasonable man adapts himself to the world;the unreasonable one persists in trying to adapt the world to himself. —萧

程序员泥瓦匠 1246

《编写高质量代码:改善Java程序的151个建议》 建议15

13. 避免为final变量复杂赋值 继上一节,final还可以通过在声明时通过方法返回值赋值,如:

Yokeqi的专栏 836

【设计原则01】KISS(Keep It Simple,Stupid),懒人原则

初识:《编写高质量代码》

捕风者 2470

改善Java程序的20个实用建议

对于我们的例子来说,Client类在编译时字节码中就写上了"150",这个常量,而不是一个地址引用,因此无论你后续怎么修改常量类,只要不重新编译Client类,输出还是照旧。把参与运算的值扩大100倍,并转为整型,然后在展现时再缩小100倍,这样处理的好处是计算简单,准确,一般在非金融行业(如零售行业)应用较多。最近细读了秦小波老师的《编写高质量代码改善Jaav程序的151个建议》,要说是151个建议,其实更合适的说是避免Java的一些冷门的坑,下面整理了20个比较有趣的建议重新学习了一遍。

初念初恋的博客 663

改善Java程序的N个建议(一)

最近细读了秦小波老师的《编写高质量代码改善Jaav程序的151个建议》,要说是151个建议,其实更合适的说是避免Java的一些冷门的坑,下面整理了N个比较有趣的建议重新学习了一遍。 建议3:三元操作符的类型务必一致 三元操作符运算也称为三目运算,其表达式形如:"条件表达式 ? 表达式1 : 表达式2",在大部分语言中都有这样的三元操作符,其目的就是为了简化if-else,当条件表达式为真时执行表达式1,否则执行表达式2。 来分析一下下面这段代码: public class Proposal_3 {

qfchenjunbo的博客 388
上一篇: JAVA设计模式之建造者模式
下一篇: JAVA设计模式之代理模式
有志青年L
博客等级 码龄10年 30粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值