`
wdmcygah
  • 浏览: 62050 次
社区版块
存档分类
最新评论

三、编写高质量的代码—类、对象和方法(笔记)

    博客分类:
  • J2SE
阅读更多

 

本博文为《编写高质量代码—改善Java程序的151个建议》一书的阅读笔记。该书从很多方面给予了编写高质量代码的宝贵经验。而且该书应该是那种开发经验越丰富,体会越深的书籍。在阅读过程中,从该书中收获良多,这里主要作下书籍笔记,有体会的地方加点自己的想法。受限于知识水平,部分内容还没能深刻体会,所以更多更好的内容和具体实例还需要从书中去找寻。

一、静态方法不能覆写可以隐藏

在Java中可以通过覆写(Override)来增强或减弱父类的方法和行为,但覆写是针对非静态方法(也叫做实例方法,只有生成实例才能调用的方法)的,不能针对静态方法(static修饰的方法,也叫类方法)。
如果在了类中构建与父类相同的方法名、输入参数、输出参数、访问权限(权限可以扩大)并且父类子类都是静态方法,此种行为叫做隐藏。与覆写有两点不同:
1. 表现形式不同:隐藏用于静态方法,覆写用于非静态方法。在代码的表现上是:@Override注解可以用于覆写,不能用于隐藏。
2. 职责不同:隐藏的目的是为了抛弃父类静态方法。
所以在静态方法调用时一定要注意避免使用实例对象访问静态方法或静态属性,而应该使用类进行访问。

二、构造函数尽量简化

书中举了一个非常好的例子,这里限于篇幅不搬上来了。总之构造函数如果过于复杂,可能导致由于类的构造顺序问题出现意想不到的结果。因此在类初始化时如果有什么复杂逻辑可以考虑抽出单独的init或start方法,尽量保证构造函数的简化。

三、避免在构造函数中初始化其它类

在构造函数中初始化其它类可能导致在复杂项目中出现类对象循环构造的情况,所以需要尽量避免。

四、使用构造代码块精炼程序

构造代码块是指在类中没有任何的前缀或后缀,并使用“{}”括起来的代码片段。例如

public class Child {
	{
		System.out.println("这是构造代码块");
	}

	public Child() {
		System.out.println("这是无参构造函数");
	}
}

 编译器会把构造代码块插入到每个构造函数的最前端,所以在生成对象时总是会先执行构造代码块,再执行构造函数的代码。(不过有一种情况例外,遇到this关键字时,即构造函数中调用其它构造函数时,此方法不会插入构造代码块)
构造代码块主要适用于如下场景:(1)初始化实例变量;(2)初始化实例环境。

五、覆写equals方法要注意

关于覆盖equals方法的中肯建议,《Effective Java》一书中给了非常好的建议。首先equals方法实现了等价关系,需要满足自反性、对称性、传递性、一致性。
编写高质量equals方法的诀窍为:
1. 使用==操作符检查“参数是否为这个对象的引用”,如果是,则返回true;
2. 使用instanceof操作符检查“参数是否为正确的类型”,如果不是,则返回false;
3. 把参数转化为正确的类型;
4. 对于该类中的每个“关键域”,检查参数中的域是否与该对象中对应的域相匹配;
5. 编写单元测试查看是否满足对称性、传递性、一致性;
6. 覆写equals方法总要覆盖hashCode方法;
7. 不要将equals声明中的Object对象声替换成其他的类型。
equals方法可以通过IDE(例如eclipse)自动进行生成,避免不必要的错误。

六、覆写equals方法必须覆盖hashCode方法

如果覆写了equals方法而没有覆写hashCode方法,则违背了Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运行。
关于HashCode的写法《Effective Java》中有详细的建议,在实际编写中可以使用IDE(例如eclipse)自动生成,或者使用Commons-lang包中的HashCodeBuilder类进行生成。

七、推荐覆写toString方法

由于JDK提供的默认toString方法并不友好,所以为了打印的内容便于理解,推荐覆写toString方法。

八、不要主动进行垃圾回收 

如果不是对于JVM非常了解,不要在代码中主动进行垃圾回收,这样可能导致极大的项目风险。

 

 

1
0
分享到:
评论

相关推荐

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

    ### 编写高质量代码:改善...以上总结了《编写高质量代码:改善Java程序的151个建议》中的一些关键知识点,涵盖了命名规范、基本类型处理、类与对象管理等多个方面,旨在帮助开发者编写更加健壮、易于维护的Java代码。

    java面向对象、类与对象的定义笔记

    理解类与对象以及面向对象编程的这些基本概念,对于学习Java语言以及开发高质量的应用程序至关重要。通过类和对象,我们可以组织和管理代码,使其结构更加清晰,易于理解和维护。而封装、继承和多态这三大特性,不仅...

    (强烈推荐大家看一看)高质量C++编程指南(有笔记)下

    书中会详细讲解类和对象的创建,包括封装、继承和多态这三大面向对象原则。通过实例,读者可以学习如何设计和实现复用性强、易于维护的代码结构。同时,也会涉及模板和STL(Standard Template Library),这是C++中...

    (读书笔记)《编写好质量代码》--马伟

    综上所述,《编写好质量代码》这本书中的建议涵盖了从数据类型的选择到程序控制语句的优化等多个方面,对于希望编写高质量C程序的开发者来说非常实用。遵循这些建议可以帮助开发者编写出更加安全、健壮、高效的代码...

    编写高质量代码改善C#程序的建议读书笔记

    编写高质量代码改善C#程序的建议读书笔记 本文旨在总结编写高质量代码的建议,旨在帮助C#程序员编写高效、可读性强的代码。在本文中,我们将讨论三个重要的建议,包括正确操作字符串拼接、使用默认转型方法和区别...

    高质量程序设计指南:C++C语言(第三版)笔记

    《高质量程序设计指南:C++/C 语言(第三版)》是一本深入探讨软件开发质量和C++/C 编程规范的书籍...通过深入阅读和实践,读者将能够掌握编写高质量C++/C程序的技巧,并理解如何在实际开发中实施有效的软件工程方法。

    高质量JAVA程序设计-个人学习笔记

    通过这份学习笔记,你可以系统地学习和掌握Java编程的核心技术,并逐步提升编写高质量Java程序的能力。同时,不断实践和反思,将理论知识转化为实际编程经验,是成为优秀Java程序员的必经之路。

    高质量java程序设计读书笔记

    本文将基于"高质量java程序设计读书笔记"的主题,深入探讨Java编程中的异常处理以及面向对象编程(OOP)中的继承和组合设计原则。 首先,异常处理是Java程序设计中的重要组成部分,它提供了一种结构化的方式来处理...

    (强烈推荐大家看一看)高质量C++编程指南(有笔记)_a

    《高质量C++编程指南》是一本深受欢迎的C++学习资料,特别适合初学者作为入门教程。这本书结合了丰富的编程经验和实例,旨在帮助读者掌握C++编程的核心概念、语法和最佳实践。通过阅读这本书和相应的笔记,学习者...

    深入理解javascript学习笔记(一) 编写高质量代码

    在讨论编写高质量JavaScript代码时,首先要避免的是全局变量的滥用。在JavaScript中,变量的声明并不总是必需的,未声明的变量会自动成为全局对象(在浏览器中通常指window对象)的属性,这是一种非常危险的做法,...

    CodeNotebook代码笔记本源代码

    优秀的源代码会包含单元测试和集成测试,以确保代码的质量和稳定性。源代码中可能包含了测试框架和测试脚本,这对于理解和验证代码行为至关重要。 通过对CodeNotebook的源代码进行深入研究,开发者不仅可以学习到...

    编写高质量代码 Web前端开发修炼之道 书摘精要

    《编写高质量代码 Web前端开发修炼之道》是一本深入探讨前端开发实践...总之,《编写高质量代码 Web前端开发修炼之道》全面地涵盖了Web前端开发的核心知识和最佳实践,对于提升代码质量和开发效率具有极大的指导价值。

    (强烈推荐大家看一看)高质量C++编程指南(有笔记)1

    这份"(强烈推荐大家看一看)高质量C++编程指南(有笔记)1"提供了丰富的资源,旨在帮助学习者提升C++编程技能,特别是在理解和应用方面。下面将详细讨论这份指南中可能涵盖的关键知识点。 1. **基础语法与数据类型**...

    java学习笔记

    在Java学习的初期阶段,理解并掌握面向对象编程的原则和概念对于掌握Java语言和编写高质量的代码非常重要。通过面向对象的方式编写程序,可以使我们的代码更加模块化,易于理解和维护,同时也是面向对象设计模式和...

    vc++代码 学习笔记

    这些类提供了与控件交互的方法和属性,比如设置文本、响应鼠标和键盘事件等。例如,CButton类用于创建按钮控件,你可以设置其文字、大小、位置,以及响应按钮被点击的事件。 在实际编程中,我们通常会用到消息映射...

    java中对象转型多态抽象类接口笔记.doc

    ### Java中的对象转型与多态 #### 一、对象转型 在Java中,对象转型(Casting)是指将一个对象的引用从一个类转换到另一个类的过程。这通常发生在类的继承关系...理解这些概念对于开发高质量的Java应用程序至关重要。

Global site tag (gtag.js) - Google Analytics