读-秦小波-编写高质量代码:改善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高清完整版 立即下载

相关推荐

DIY等离子环:从Class-E电路到七彩辉光,手把手教你打造炫酷科学玩具

本文手把手教你DIY一个炫酷的等离子环科学玩具。从解析等离子体辉光放电原理入手,详细介绍了核心的Class-E自激振荡电路设计、关键元件选型与参数计算,并提供了从物料准备、电路搭建、腔体密封到上电调试的全流程指南。通过调制电路或填充不同气体,还能实现七彩变换与交互效果,是学习高频电路与电磁场知识的绝佳实践项目。

weixin_29305337的博客 633

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

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

qq_42605751的博客 836

离线语音识别模块LD3320实战:如何低成本给STM32设备加上‘耳朵’和‘嘴巴’?

本文详细介绍了如何为STM32设备集成LD3320离线语音识别模块,实现低成本语音交互方案。从硬件连接到STM32底层驱动实现,再到指令训练与词条优化技巧,完整解析了唤醒词检测与自定义指令识别的全过程。LD3320作为非特定人声识别芯片,无需网络连接,适用于智能家居、工业控制等场景,是嵌入式开发者的理想选择。

weixin_30906185的博客 555

JAVA高质量代码的12条建议

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

xiaocai 816

9篇9章1节:认识 SHARE 数据库

SHARE数据库是欧洲最大的跨国老龄化追踪调查项目,覆盖28个欧洲国家和以色列的50岁及以上人群。自2004年启动以来,已完成14-16万受访者的50-60万次访谈,形成跨度20年的纵向数据。该数据库采用标准化的多阶段抽样方法,收集健康、经济和社会关系等领域的多维度信息,具有高度的跨国可比性。SHARE与美国HRS、英国ELSA等调查对接,构成全球老龄化研究网络。数据免费向科研人员开放,但需注册并承诺仅用于非商业性研究。该项目由欧盟委员会等多方资助,为老龄化研究和政策制定提供了重要实证依据。

MD Code 899

全志T527 适配双目tp2815_mipi

在全志T527 linux下适配双目TP2815 mipi摄像头,支持六路同时输出,四路可用作360环视、一路face id等,一路用于其它开发。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3812

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

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

Meteors.的博客 6765

自然语言处理(扩展学习1):Scheduled Sampling(计划采样)与Teacher forcing(教师强制)

作者:安静到无声作者简介:人工智能和硬件设计博士生、优快云与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。o( ̄▽ ̄)d。

安静到无声 2143

改善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

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

基于 YOLOv26 的遥感图像目标检测系统:从原理到模型

本文介绍了基于YOLOv26的遥感图像目标检测系统。YOLOv26凭借端到端设计、轻量化架构和小目标优化能力,有效解决了遥感图像中多尺度目标、复杂背景、小目标检测等挑战。系统采用CSPDarknet骨干网络和FPN+PAN特征融合模块,通过MuSGD优化器和改进损失函数提升训练效果。文章详细阐述了数据预处理、模型训练流程和优化技巧,包括Tile推理和混合精度训练。系统支持多种部署方式,在CPU上推理速度提升43%,能实现高精度、实时性的遥感目标检测,适用于城市规划、农业监测等场景。

一键难忘的博客 566

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

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

chetianyao8457的博客 352

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 488

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

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

jjc4261的博客 238

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

biubiubiubibibi的博客 261

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

dingtuo8134的博客 208

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

改善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、付费专栏及课程。

余额充值