Java编程准则

78、Java编程指南:设计与实现的最佳实践 本文详细介绍了Java编程的设计与实现的最佳实践,涵盖了追求优雅、分离类创建者和使用者、避免代码重复等设计准则,以及遵循Sun编码规范、避免使用“魔法数字”、构造函数考虑异常等实现准则。通过实践案例分析和常见问题的解决方案,帮助开发者编写更优雅、高效且可维护的Java代码,提升开发效率和代码质量。 阅读详情

设计

 

1. 优雅需要付出代价。

2. 先求能动在求快。

3. 记住“各个击破”原理。

4. 区分class开发者和class使用者。

5. 当你撰写class时,试着给予明了易懂的名称,减少不必要的注解。

6. 你的分析和设计必须让系统中的classes保持最少,也必须让其public interface保持最少,以及

    让这些classes和其他classes之间的关联性(尤其是base classes)保持最少。

7. 让所有东西尽量自动化。

8. 在你撰写代码之前先写测试码,一边验证你的class是否设计完备。

9. 所有软件设计上的问题,都可以通过“引入额外的概念性简介层(conceptual)”加以简化。

10. 简介层(indirection)应该要有意义。

11. 让class尽可能微小而无法切割(atomic)。

12. 小心冗长的引数列(argument lists)。

13. 不要一再重复。

14. 小心switch语句或成串的if-else子句。

15. 从设计观点来看,请找出变动的事物,并使它和不变的事物分离。

16. 不要利用subclassing来扩充基本功能。

17. 少就是多。

18. 大声念出你的classes,确认它们符合逻辑。

19. 当你犹豫不决于继承(inheritance)或合成(组合,composition)时,请你

      问问自己,是否需要向上转型(upcast)为基础型别。

20. 运用数据成员来表示数值的变化,运用经过复写的函数(overrided method)来代表行为的变化。

21. 小心重载(overriding)。

22. 使用异常体系(exception hierarchies)。

23. 有时候简单的聚合(aggregation)就够了。

24. 试着从客户程序员和程序维护者的角度思考。

25. 小心“巨大对象并发症”。

26. 如果你得用某种丑陋的方式来达成某个动作,请将丑陋的部分局限在某个class里头。

27. 如果你得使用某种不可移植方式来达成某个动作,请将它抽象化并局限于某个class里头。

28. 对象不应仅仅只用来持有数据。

29. 欲从既有的classes身上产生新的classes时,请以组合(composition)优先考量。

30. 运用继承和函数覆写机制来展现行为上的差异,运用fields(数据成员)来展现状态上的差异。

31. 当心变异性(ariance)。

32. 注意继承上的限制。

33. 使用设计模式(design pattern)来减少“赤裸裸无加掩饰的机能(naked functionality)”。

34. 当心“因分析而导致的瘫痪(analysis paralysis)”。

35. 当你认为你已经获得一份优秀的分析、设计或实现时,请试着加以演练。

 

 

实现(implementation)

 

36. 一般来说,请遵守Sun的程序编写习惯。

37. 无论使用何种编程风格,如果你的团队能够加以标准化,那么的确会带来显著效果。

38. 遵守标准的大小写规范。

39. 不要自己发明“装饰用的”private数据成员名称。

40. 当你撰写通用性class时,请遵守正规形式(canonical form)。

41. 对于那些“取得或改变private数据值”的函数,请使用JavaBeans的“get”、“set”、“is”等命名习惯。

42. 对于你所撰写的每一个class,请考虑为它加入static public test(),其中含有class功能测试码。

43. 有时候你需要通过继承,才得以访问base class的protected成员。

44. 避免纯粹为了效率考量而使用final函数。

45. 如果两个classes因某种功能性原因而产生了关联(例如容器containers和迭代器iterators),那么

      请试着让其中某个class成为另一个class的内隐类(inner class)。

46. 任何时候你都要注意那些高度耦合(coupling)的classes。请考虑内隐类(inner classes)

      为程序撰写和维护带来的好处。

47. 不要成为“过早最优化”的牺牲品。

48. 让范围(作用域,scope)尽可能愈小愈好,这么一来对象的可视范围和寿命都将尽可能地小。

49. 使用Java标准程序库提供的容器。

50. 对一个强固的(robust)程序而言,每一个组成都必须强固。

51. 宁可在编译期发生错误,也不要在执行期发生错误。

52. 当心冗长的函数定义。

53. 尽可能保持“private”。

54. 大量运用注解,并使用javadoc的“注解文档语法”来产生程序的说明文档。

55. 避免使用“魔术数字”,也就是那种写死在程序代码里头的数字。

56. 撰写构造函数时,请考虑异常状态。

57. 如果你的class需要在“客户程序员用完对象”后进行清理动作,请将清理动作放到单一而定义明确的函数中。

58. finalize()只可用于对象死亡条件的检验,俾有益于调试。

59. 如果某个对象在某个特定范围(scope)内必须被清理(cleaned up),而不是被垃圾回收机制收回,

      请使用一下方法:将对象初始化,成功后立刻进入拥有finally子句的try区段块。finally子句会引发清理动作。

60. 当你在继承过程中腹泻了finalize(),请记住调用super。finalize()。

61. 当你撰写固定大小的对象容器,请将它们转换为数组——尤其是从某个函数返回此一容器时。

62. 在interface(接口)和abstract class(抽象类)之间,优先前者。

63. 在构造函数中只做唯一必要动作:将对象设定至适当状态。

64. 为了避免一个十分令人泄气的经验,请确认你的classpath中的每个名称,都只有一个未被放到

       packages里头的class。

65. 留意一不小心犯下的重载(overriding)错误。

66. 当心过早最优化。

67. 记住,程序代码被阅读的时间多于它被撰写的时间。

掌握Effective Java:编程准则与实践 枚举(Enum)是一种数据类型,允许开发者定义一组具有预定义集合的常量。Java中的枚举类型是在Java 5中引入的,其声明方式与普通类类似,但有自己的语法和一些特殊的方法。在上面的例子中,Season是一个枚举类型,它具有四个预定义的实例:SPRINGSUMMERAUTUMN和WINTER。枚举的特性包括:类型安全:枚举提供了编译时的类型检查,因为不能将非枚举类型的值赋给枚举类型的变量。内置方法:枚举自动提供了如values()valueOf() 阅读详情

相关推荐

探索编程准则与面向对象的哲学

本文探讨了在编程与软件开发中遵循准则的重要性,以及深入学习计算和编程知识对于生产出伟大软件的必要性。同时,文章也对Java语言及其与Scheme语言的不同进行了比较,探讨了计算学科的几个关键问题,并介绍了如何使用本书提供的资源进行进一步学习。

weixin_29363791的博客 391

Java编程规约(源于阿里,精简版)

命名的目标就是让人见名知义,因此要先统一格式,比如,看到大驼峰命名就知道是个类名,并且还需要让人知道是个什么类,所以在命名的时候应该避开不适当的缩写、拼音与英文混用 等问题。

Fearless____的博客 1535

编程哲学与实践:软件开发的准则与设计

本篇博客深入探讨了软件开发中遵守编程准则的重要性,以及如何通过学习更多关于计算和编程的知识来提升软件质量。文章强调了面向对象编程语言如Java的学习对掌握编程哲学的重要性,并探讨了计算学科的基础问题。此外,文章还提供了关于如何构建真实世界程序的见解,以及学习计算科学和编程的资源推荐。

weixin_29363791的博客 344

放弃FFT全频计算!在STM32F407上用DFT单点计算提速50%的优化技巧

本文详细介绍了在STM32F407上通过DFT单点计算实现比FFT快50%的优化技巧,特别适用于生物阻抗分析、振动监测等只需关注单一频点的嵌入式场景。通过预计算相位角、查表法和混合精度计算等策略,显著提升计算效率和内存利用率,同时保持高精度。

weixin_28738397的博客 191

Dify平台+Excel批量分析实战:5分钟搞定大模型数据处理(附完整代码)

本文详细介绍了如何利用Dify平台的数据集功能,结合Excel和Python脚本,快速构建大模型批量数据处理流水线。通过实战案例演示,读者可在5分钟内完成客户反馈情感分析、产品文案生成等任务,实现从原始数据到结构化洞察的高效转化,极大提升工作效率。

3a9bq4r8t2y的博客 316

通用编程准则

本文是我们名为“ 高级Java ”的学院课程的一部分。 本课程旨在帮助您最有效地使用Java。 它讨论了高级主题,包括对象创建,并发,序列化,反射等。 它将指导您完成Java掌握的过程! 在这里查看 ! 目录 1.简介 2.可变范围 3.类字段和局部变量 4.方法参数和局部变量 5.装箱和拆箱 6.接口 7.琴弦 8.命名约定 9.标准库 ...

最佳 Java 编程 238

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4587

第二节 java 编程规范准则

标识符可以用来标识变量名、类名、类中的方法名和文件名等。 命名规则: (1) 由字母、数字、下划线、$组成,不能以数字开头。 (2) 大小写敏感。 (3) 不得使用java中的关键字和保留字。 关键字:都是小写的,jdk1.2多了strictfp(经准浮点型),关键字 jdk1.4多了assert(断言)关键字,jdk1.5多了enum(枚举) 关键字。 true、fal...

u010642584的博客 238

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 268

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

java编程准则_使用Java 2参考类的准则

当在Java 2平台中首次引入包含SoftReference , WeakReference和PhantomReference类的java.lang.ref软件包时,其实用性可能被夸大了。 它包含的类可能是有用的,但是它们具有某些局限性,从而使它们的吸引力有所降低,并使它们的应用程序非常特定于一组已定义的问题。 垃圾收集概述 引用类的主要特征是能够引用仍可以由垃圾收集器回收的对象。 在...

cusi77914的博客 241

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

Thinking in Java 附录之编程准则

侯捷翻译这份附录所提供的建议,可以帮助你进行低阶的程序设计,并帮助你写码。当然,这些都只是一种方针而不是硬性规则。你应该视它们为一种灵感来源。记住,某些情况下你需要加以变通或甚至打破规则。设计1. 优雅需要付出代价。从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时间。但当它终于能够正确执行并可轻易套用于新案例中,不需要花上数以时计,甚至以天计或以月计的辛苦代价时,你会看得到先

sunsnowad的专栏 645

Himall商城ExpressDaDaHelper 取消订单(线上环境)

Himall商城ExpressDaDaHelper 取消订单(线上环境)

GZM888888的博客 399

展锐 Android 15 无听筒方案删除配置

【代码】展锐 Android 15 无听筒方案删除配置。

m0_60898338的博客 165

Java 类设计的准则----编程的良好习惯

一定要保证数据的私有性:编写一个访问方法和一个修改方法一定要对数据进行初始化:Java不会对局部变量进行初始化,但会对实例变量进行初始化(0, false, null)不要过多的基本数据类型将类的职责适当分解(过多也没有一个标准说法)类的变量名和方法名一定要体现他们的职责

沈浦晟的博客 412

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

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

Java体系开发准则,成为优秀程序员必备的代码素养

将系统的不同功能模块分开,让每个处理器专注于其业务逻辑。

m0_73889530的博客 1019

Statistics and Machine Learning Toolbox

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

VC中sqlite的使用

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

Java面向对象编程的五大基本准则之单一职责原则

Java面向对象编程的五大基本准则之单一职责原则SRP 职责:所谓职责是指类变化的原因(功能、方法) 概念及概述: 如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。 单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类...

cm4002的博客 503

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【编程思想】03 编写高质量代码、Java 开发中通用的方法和准则

11、养成良好习惯,显式声明UID 介绍 a: 类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决支持条件。 b:JVM在反序列化时,会比较数据流中的serialVersionUID与类的serialVersionUID是否相同,如果相同,则认为类没有发生改变,可以把数据流load为实例对象;如果不相同,对不起,我JVM不干了,抛个异常InvalidClassException给你瞧瞧。这是一个非常好的校验机制,可以保证一个对象即使在

promiseful的博客 187

【编程思想】01 编写高质量代码、Java 开发中通用的方法和准则

1、【建议】: 不要在常量和变量中出现易混淆的字母 基本规范:包名全小写,类名首字母全大写,常量全部大写并用下划线分隔,变量采用驼峰命名法(Camel Case)命名等。 为了让程序更容易理解,字母“l”(还包括大写字母“O”)尽量不要和数字混用,以免使阅读者的理解与程序意图产生偏差。如果字母和数字必须混合使用,字母“l”务必大写,字母“O”则增加注释。 字母“l”作为长整型标志时务必大写。 2、【建议】: 莫让常量蜕变成变量 常量就是常量,在编译期就必须确定其值,不应该在运行期

promiseful的博客 232
上一篇: 四款5000元左右亲民热销超级本推荐
下一篇: 精彩博文收藏
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值