- 浏览: 91902 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (148)
- 全文检索 (1)
- java (29)
- xml (2)
- json (2)
- redis springmvc (1)
- Redis (5)
- 开发常识 (1)
- tomcat (2)
- 单元测试Junit (2)
- 设计模式 (2)
- spring (10)
- jvm (2)
- eclipse (4)
- echart (1)
- mybatis (1)
- mysql (3)
- web (1)
- js (2)
- PL/SQL (2)
- 其他 (1)
- 人生 (1)
- 安全 (2)
- jsp (2)
- 硬件电脑 (1)
- linux (3)
- git (10)
- oracle (8)
- ant (1)
- maven (2)
- 正则表达式 (2)
- chrome (1)
- 面试 (6)
- 多线程 (19)
- bug (11)
- java工具类 (3)
- 算法 (1)
- bug,git (1)
- shell (2)
- springmvc (2)
- Java8 (1)
- 消息队列-rocketmq (1)
- es (1)
- dubbo (0)
- spring cloud (0)
- hashmap (0)
- springboot (1)
- velocity (0)
Java编程思想第四版 附录C Java 编程规则
本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一
般性指导:
(1)类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java1.1和Java 1.2的区别之一)。
(2)为了常规用途而创建一个类时,请采取"经典形式",并包含对下述元素的定义:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3)对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。
(4)应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。
理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的
几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍
应只做同样的一件事情)。
(5) 设计一个类时,请设身处地地为客户程序员考虑一下(类的使用方法应该是非常明
确的)。然后,再设身处地地为管理代码的人考虑一下(预计有可能进行哪些形式的修改
,想想用什么方法可把它们变得更简单)。
(6)使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:
WW:一个复杂的开关语句:考虑采用"多形"机制
WW:数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
WW:许多成员变量在特征上有很大的差别:考虑使用几个类
(7)让一切东西都尽可能地"私有"--private。可使库的某一部分"公共化"(一个方法、
类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的
代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改
变其他任何东西。在多线程环境中,隐私是特别重要的一个因素----只有private字段
才能在非同步使用的情况下受到保护。
(8)谨慎"巨大对象综合症"。对于一些习惯于顺序编程思维.且初涉OOP领域的新手,往
往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原
理,对象表达的应该是应用程序的概念,而非应用程序本身。
(9)若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。
(10)任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从
而改善编码及维护工作
(11)尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
(12)避免使用"魔术数字",这些数字很难与代码很好地配合。如以后需要修改她,无
疑会成为一场噩梦,因为根本不知道"100"到底是指"数组大小"还是"其他全然不同的
东西"。所以,我们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个
程序中都采用常数标识符。这样可使程序更易理解以及更易维护。
(13)涉及构建器和异常的时候,通常希望重新丢弃在构建器中捕获的任何异常----如
果它造成了那个对象的创建失败。这样一来,调用者就不会以为那个对象已正确地创
建,从而盲目地继续。
(14)当客户程序员用完对象以后,若你的类要求进行任何清除工作,可考虑将清除代
码置于一个良好定义的方法里,采用类似于cleanup()这样的名字,明确表明自己的用
途。除此以外,可在类内放置一个boolean(布尔)标记,指出对象是否已被清除。在类
的finalize()方法里,请确定对象已被清除,并已丢弃了从RuntimeException继承的
一个类(如果还没有的话),从而指出一个编程错误。在采取像这样的方案之前,请确
定finalize()能够在自己的系统中工作(可能需要调用System.runFinalizersOnExit
(true),从而确保这一行为)。
(15)在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),请采用
下述方法:初始化对象;若成功,则立即进入一个含有finally从句的try块,开始清除
工作。
(16)若在初始化过程中需要覆盖(取消)finalize(),请记住调用super.finalize()(若
Object属于我们的直接超类,则无此必要)。在对finalize()进行覆盖的过程中,对
super.finalize()的调用应属于最后一个行动,而不应是第一个行动,这样可确保在
需要基础类组件的时候它们依然有效。
(17)创建大小固定的对象集合时,请将它们传输至一个数组(若准备从一个方法里返回
这个集合,更应如此操作)。这样一来,我们就可享受到数组在编译期进行类型检查的
好处。此外,为使用它们,数组的接收者也许并不需要将对象"造型"到数组里。
(18)尽量使用interface ,不要使用abstract类。若已知某样东西准备成为一个基础
类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义
或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户
希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
(19)在构建器内部,只进行那些将对象设为正确状态所需的工作。尽可能地避免调用
其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知
的结果。
(20)对象不应只是简单地容纳一些数据:它们的行为也应得到良好的定义。
(21)在现成类的基础上创建新类时,请首先选择"新建"或"创作"。只有自己的设计要
求必须继承时,才应考虑这方面的问题。若在本来允许新建的场合使用了继承,则整
个设计会变得没有必要地复杂。
(22)用继承及方法覆盖来表示行为间的差异,而用字段表示状态间的区别。一个非常
极端的例子是通过对不同类的继承来表示颜色,这是绝对应该避免的;应直接使用一
个“颜色”字段。
(23) 为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。否则,编译
器可能先找到同名的另一个类,并报告出错消息。若怀疑自己碰到了类路径问题,请试试在类路径的每一个
起点,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件“适配器”时,特别容易碰到一个陷阱。若覆盖了某个适配器方法,同时
拼写方法没有特别讲究,最后的结果就是新添加一个方法,而不是覆盖现成方法。然而,由于这样做是完全
合法的,所以不会从编译器或运行期系统获得任何出错提示——只不过代码的工作就变得不正常了。
(25) 用合理的设计方案消除“伪功能”。也就是说,假若只需要创建类的一个对象,就不要提前限制自己使
用应用程序,并加上一条“只生成其中一个”注释。请考虑将其封装成一个“独生子”的形式。若在主程序
里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。
(26) 警惕“分析瘫痪”。请记住,无论如何都要提前了解整个项目的状况,再去考察其中的细节。由于把握
了全局,可快速认识自己未知的一些因素,防止在考察细节的时候陷入“死逻辑”中。
(27) 警惕“过早优化”。首先让它运行起来,再考虑变得更快——但只有在自己必须这样做、而且经证实在
某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。除非用专门的工具分析瓶颈,否则很有可能是
在浪费自己的时间。性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
(28) 请记住,阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细
致的解释以及一些示例往往具有不可估量的价值。无论对你自己,还是对后来的人,它们都是相当重要的。
如对此仍有怀疑,那么请试想自己试图从联机 Java 文档里找出有用信息时碰到的挫折,这样或许能将你说服。
(29) 如认为自己已进行了良好的分析、设计或者实施,那么请稍微更换一下思维角度。试试邀请一些外来人
士——并不一定是专家,但可以是来自本公司其他部门的人。请他们用完全新鲜的眼光考察你的工作,看看
是否能找出你一度熟视无睹的问题。采取这种方式,往往能在最适合修改的阶段找出一些关键性的问题,避
免产品发行后再解决问题而造成的金钱及精力方面的损失。
(30) 良好的设计能带来最大的回报。简言之,对于一个特定的问题,通常会花较长的时间才能找到一种最恰
当的解决方案。但一旦找到了正确的方法,以后的工作就轻松多了,再也不用经历数小时、数天或者数月的
痛苦挣扎。我们的努力工作会带来最大的回报(甚至无可估量)。而且由于自己倾注了大量心血,最终获得
一个出色的设计方案,成功的快感也是令人心动的。坚持抵制草草完工的诱惑——那样做往往得不偿失。
(31) 可在Web上找到大量的编程参考资源,甚至包括大量新闻组、讨论组、邮寄列表等。下面这个地方提供
了大量有益的链接:
http://www.ulb.ac.be/esp/ip-Links/Java/joodcs/mm-WebBiblio.html
发表评论
-
linux 文件 dos unix格式,unix和dos下文本文件得区别
2023-09-06 23:23 159问题: 当在window ... -
java 枚举values()方法
2019-07-30 20:41 418工作中,同事 ... -
newHashMapWithExpectedSize
2019-07-30 19:45 1285newHashMapWithExpectedSize VS ... -
java 8 stream应用
2019-07-15 11:43 01.生成map List<BusinessFacili ... -
技术知识点汇总
2019-02-12 15:47 01. LTS(light-task-scheduler) ... -
架构演进
2018-12-21 00:54 371一传统垂直mvc项目 垂直架构图:表示层->业务逻辑层- ... -
集群中session共享
2018-12-20 23:25 0当项目演进时,一个节点出错,如何保证域名能访问到别的节点。 一 ... -
父类子类静态代码块执行
2018-08-22 15:23 0先看一个基础面试题: package com.jbx.te ... -
数组元素的初始化
2018-07-10 17:16 494直接上代码 ,char的初始化值是'\u0000' p ... -
统计一个字符串中每个字符串出现的次数
2018-07-03 17:43 602经常遇到这个问题:总结一下 思路和代码 import ja ... -
DateUtil
2018-03-15 20:53 496记录一下常用的工具类,方便使用的时候可以获取。 pack ... -
indexOf判断一个字符串是否包含另一个字符串
2018-02-26 08:58 512jdk中的表述如下 indexOf public int in ... -
eclipse 添加反编译
2018-01-25 08:57 322为eclipse中*.clsas/*.class withou ... -
Java读取配置文件
2018-01-24 16:00 313Java读取配置文件test.properties 文件tes ... -
HTTP请求头
2017-12-29 16:49 0Request Headers 当访问一个action时,在谷 ... -
阿里巴巴Java开发手册(终极版)
2017-11-13 16:37 486前言 《阿里巴巴 Java 开发手册》是阿里巴巴集团技术团队 ... -
JavaEE 基础实用教程(二)------Jsp应用基础
2017-11-03 17:22 659习题 1.画出HTML文件的基 ... -
JavaEE 基础实用教程(一)---简述
2017-11-03 14:55 594第一部分 实用教程 第 ... -
实现普通用户登录
2017-11-03 11:09 0页面元素: 用户名,密码,验证码,登录 1.创建登录页 ... -
Java容器-- 99集
2017-10-26 14:21 0API接口 Collection Set List H ...
相关推荐
附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的测试代码 D.2.2 JDK性能评测 D.2.3 特殊工具 D.2.4 性能评测的技巧 D.3 提速方法 D.3.1 常规手段 D.3.2 依赖语言的方法 D.3.3 特殊情况 D...
《Java编程思想》第四版是一本经典的Java编程书籍,由Bruce Eckel编写,全面而深入地介绍了Java语言。该书被广泛认可为学习Java语言的重要资源,尤其适合有一定编程基础,希望深入理解Java及其编程范式的读者。 ## ...
《Java 2参考大全(第四版)》是关于Java语言学习的权威指南,适用于初学者和进阶开发者。书籍共分为四个部分,共包含31个章节,细致地覆盖了Java语言的基础知识、标准库的使用、软件开发的方法论、应用程序的构建,...
Java SE是Java Standard ...通过这个实验,你不仅能够提升Java编程技能,还能学习到如何有效地组织和表达你的编程思想,这对于成为一个合格的程序员至关重要。记得在编写报告时保持清晰和简洁,以便于他人理解和评审。
- 推荐阅读《Java语言实用教程》第二版和《Java编程思想》第四版。 6. **设计进度**: - 准备阶段:4学时,选题、理解设计目标和查找相关资料。 - 模块设计分析:4学时,进行程序总体和详细设计。 - 代码编写...
《数据结构与算法分析Java版》是一本由Robert Lafore撰写的书籍,该书详细介绍了如何利用Java编程语言来实现和操作各种数据结构和算法。全书共分为六个部分,分别涵盖了数据结构的基本概念、数组、简单的排序算法、...
《C程序设计语言(第2版)》是由C语言的两位主要创造者Brian W. Kernighan和Dennis M. Ritchie所著的经典教材。该书自1978年出版以来,一直被认为是学习C语言的权威指南。第二版于1988年推出,内容更加完善,反映了...
通过上述内容,我们可以看出,《Java版数据结构与算法分析》不仅是一本系统介绍数据结构与算法的教材,同时也是一本实用的编程指南。书中通过大量的Java代码示例帮助读者加深理解,并且采用了直观的图形化方式解释...
##### 第四部分:高级数据结构 - **第10章:2-3-4树与外部存储** - 内容简介:本章介绍了2-3-4树这种多路搜索树,并探讨了其在外部存储中的应用。 - **第11章:哈希表** - 内容简介:哈希表是一种基于哈希函数的...
7.7 第四次重构 7.7.1 关于OSGi的好处 7.7.2 小结并准备下一次重构 7.8 第五次重构 7.9 第六次重构 7.10 第七次重构 7.11 事后剖析 7.11.1 关于模块测试 7.11.2 关于管理模块依赖 7.11.3 关于模块重用 7.11.4 关于...
7.7 第四次重构 7.7.1 关于OSGi的好处 7.7.2 小结并准备下一次重构 7.8 第五次重构 7.9 第六次重构 7.10 第七次重构 7.11 事后剖析 7.11.1 关于模块测试 7.11.2 关于管理模块依赖 7.11.3 关于模块重用 ...