学习大多数语言刚开始的时候要接触到的东西都是差不多的。命名空间,访问权限,类,方法,属性,加减乘除的数学运算,接收键盘输入,输出到控制台。这些就是所谓的3天会走5天会跑7天会飞中能够学到的大部分的内容。学习了这些就可以开始编写一些程序,做一些联系,甚至紧急状况下顶一下,做一些低端的开发工作。当然,这篇文章并不是这些基础知识的教程,那些3天会走5天会跑7天会飞的教程网络上有很多,写得都挺好的,可以随便找一本来学习。而且笑着本人推荐先找一本这样的书来学习一下。整体了解一下这一门语言大概是怎么样的,可以快速的开始我们的第一个非HelloWord程序。
这篇文章要讨论的,是关于高质量编程方面的。高质量编程将要贯穿我们的整个职业生涯,能在学习开始的时候有个不错的开始,那么对未来的发展将会产生不可估量的好处。高质量编程一般是从可读性,可靠性,高效率,代码结构,重用性,使用适当的底层功能等等方面来考虑代码是否优秀。学习了一门语言的基础语法时候,主要涉及到的就是代码的可读性,其他方面需要对一门语言的深入了解。目前一般讨论这些问题的书籍文章都是分开的,技术就是技术,技术OK了,站在一个较高的高度来回头学习高质量编程。但是这样的缺点就是习惯养成了不太好改,很多人就不会再重视高质量编程这方面的事情。而且习惯的养成需要时间,先学好技术,然后回头重视程序质量这并不是一个好的学习方式。但是要提高某方面的程序质量又必须有相应的技术基础,所以笑着这个系列的文章打算从另外一个角度,按照学习的不同阶段来慢慢涉及到高质量编程以及其他种种注意事项的方方面面。会在后面的文章中慢慢讨论。
好了,下面我们来看看学会了Java的基础语法之后,我们应该,可以注意些什么。当然,所有的一切努力都是为了让您的代码美观,易读,高效,易维护。请牢记我们的目的,规矩不是死的,这里只是给出一些建议。事实上,每一个观点具体如何做好都曾经,或者还在引起广泛的讨论。笑着掌握的也许不是最新的。而且每个公司都会有自己的开发标准。适合自己的,才是最好的。记住我们的目的,其他人能够给你的,只是建议,参考。
首先,是一些基础的规范。大家也许已经知道,简单介绍一下。
1. 良好的命名。包括,
a. 类,函数,变量的名称要尽量体现出其所具有的功能。单词之间用大小写,下划线等明确区分。
b. 全局变量,局部变量,函数参数有明确的区分。比如函数的参数采用下划线开头的写法等。(一些编译器会自动采用不懂得颜色来帮忙区别,比如RAD)
c. 常量与变量有明确区别,比如常量所有字符大写。
d. 表明变量数据类型,比如nInput,strInput。这一点,曾经是C++里面经典的规范,但是Java世界里这条规范没有引起太广泛的共鸣。就个人喜好来讲,小这是比较喜欢这个规范的。
e. 尽量不要定义相同的类名。虽然不同的包下允许使用相同的类名,但是两个同样的名称为User类,会给自己带来不必要的麻烦。比如Java里面就有java.util.Date和java.sql.Date,这会给我们编程的时候造成困扰。所以不要认为不会出现这种情况。很容易,你就会“不小心”的定义两个同名的类。这多少是个设计上的问题,已经超出了基础的范围。
2. 区分你的代码块儿。
a. 把你的类的属性统一定义到类的开始或者结束的位置。现在应该很少人把类的属性跟类的方法穿插定义了。存在特殊情况,但是这里不想讨论。
b. 把你的属性,或者方法,按照访问权限不同来顺序定义。比如先定义public的属性(这里是举个例子,原则上是不推荐定义public属性的),然后protected的属性,然后private的属性,然后public的方法。。。。。以此类推。之所以这样,是因为代码阅读的时候会更加关心接口部分,也就是public出来,公开给别人部分的代码会更加引起关注。
c. 把同种类别的属性(方法)定义在一起,用换行来明确分隔。比如:
// 用户信息
private String a;
private String b;
private String c;
// 业务信息
private String d;
private String e;
private String f;
不分块儿的话就会很难快。效果如下:
private String a;
private String b;
private String c;
private String d;
private String e;
private String f;
d. 关于函数内使用的局部变量的定义,现在函数开始的地方统一定义,然后开始业务处理。这一条曾经争议非常大,因为存在另外一条矛盾的规则,尽量让你定义的变量保持最小的作用范围。不知道现在有什么结论。笑着的倾向是尽量遵守这个规则,但是可以根据具体情况将少量的变量定义在使用开始的地方。或则折衷一点每一个作用范围开始的地方定义所有的变量。这也许需要根据具体情况来采取不同的策略。
e. 函数内每一段相对独立的业务逻辑结束之后用换行来分割一下。参照c.把同种类别的属性(方法)定义在一起,用换行来明确分隔。
3. 适当的缩进,空格,对齐。
a. 适当的缩进。现在编译器应该都提供这个格式化功能了。但是这里有一个问题,缩进,你是用4个空格好呢?还是用Tab好呢?知道我再说什么?不同的IDE对于Tab的长度的解释是不一样的,它默认是4个空格,但是有的IDE可能把它定义为8个空格,程序员可能有的时候用Tab,有的时候用4个空格。于是乎,当你换一个IDE来看统一份代码的时候。。。。。天下大乱了。。。。。
b. 适当的空格,比如
a=a+1;
a = a+1;
a = a + 1;
哪一种看起来比较舒服?最后一种被采用的比较多。第二种也不错。第一种?有可能你需要调整一下自己的审美观点以保持跟大众的审美观一致。
c. 适当的对齐。一般出现在类的属性定义的时候。比如:
对齐前:
private String abc = “1”;
private String abcd = “1”;
private String abcde = “1”;
对齐后:
private String abc = “1”;
private String abcd = “1”;
private String abcde = “1”;
有一些极端喜欢对齐的人存在。但是笑着个人观点,差不多就可以了。属性定义这里会非常有效果,其他的地方,自己看着办就好了。
4.适当的列数。
适当的列数。当一行代码太多会影响阅读。从前一般定义列数不要超过80,现在因为种种原因,也有定义到120的。跟这一条相关的一个规则就是不要在函数调用中欠套过多的函数调用。比如,下面是一个反面例子。
g.draw(t.getText(s.getXXX(c.getXXX())));
下面列举几个其他的常见的例子。
例子1,函数参数过多。
反:
public void setXXX(String _param1, String _param2, String _param3, String _param4)
正:
public void setXXX(String _param1,
String _param2,
String _param3,
String _param4)
例子2,append
反:
s.append(a).append(b) .append(c) .append(d)
正:
s.append(a)
.append(b)
.append(c)
.append(d)
意思一下,类似的状况很多。不在编译器里面代码格式调整比较费劲不多举了。
5. 适当的行数。
一个函数,一个类,应该提供相对单纯的功能。如果你的函数,类的行数超过了一定的范围。那么一方面会影响到阅读代码时对代码的理解。另外一方面,那么多行的代码,这里肯定包含了过多的业务逻辑,耦合性加大对你的维护会带来非常大的麻烦。
6. 善用常量
尽量用一些有意义的常量来代替无意义的数值。比如:
if(status == 0){}
就不如定义一个常量,比如int opened = 0;然后
if(status == opened){}
7. 不要过多的嵌套逻辑分支控制,比如
if(){
if(){
if(){
if(){
if(){
}
}
}
}
}
这样的代码会让人很难读懂你的程序。你自己回头也很难读懂自己的程序。发生错误的可能性,测试的复杂度也会相应大幅度增加。而且,嵌套这么多层的话,你本身对业务需求的理解肯定或多或少的出了一些问题。最多嵌套3层左右也许是个比较合理的选择。
基础的,适用于任何开发语言的一些注意事项基本就是上面这么多。在基础之上,我们需要考虑一些语言特性。比如,
int i;
double a = 0;
for ( i = 0; i < 10 ;i++){
a = a + 0.1;
if (a == 1){
System.out.println("0.1加10次应该等于1" );
}
}
这里期待值是0.1加10次应该等于1,但是实际上是不是这样的呢?这段代码预期值跟实际值是不是一样的呢?
再比如String和StringBuffer,等等。
分享到:
相关推荐
在Java环境下开发IEC104规约程序,需要对TCP/IP编程有深入的理解,因为规约的实现很大程度上依赖于网络层的交互。Java的Socket API是实现这一目标的基础,它提供了创建和管理TCP连接的能力。同时,对于规约中的报文...
除了插件支持,阿里巴巴还提供了详细的Java开发规范文档,这是规约插件的基础。这份文档详尽地列出了Java开发中的最佳实践,包括基本编码风格、异常处理、并发控制、日志记录等多个方面,是开发者提升编码水平的宝贵...
《阿里巴巴Java代码规约插件源码解析:类图详解》 在2017年的杭州云栖大会上,阿里巴巴发布了一款备受瞩目的Java代码规约插件——p3c,这款插件专为提升代码质量和开发效率而设计,兼容Eclipse 4.2及以上版本和IDEA...
103规约,全称为IEC 60870-5-103,是国际电工委员会(IEC)制定的一种电力系统自动化设备通信协议。...同时,源代码也可以作为模板,为其他类似项目提供基础,减少了从零开始编写规约解析和通信逻辑的工作量。
### Java编码标准规约 #### 一、引言 在软件开发过程中,代码的质量直接影响到项目的成功与否。高质量的代码不仅能够...希望本文档能帮助开发者们更好地理解和应用Java编码规范,为开发高质量的软件奠定坚实的基础。
Java源码可能包含了实现这两个规约的类库或示例程序,帮助开发者快速集成到自己的项目中。这些源码可能涵盖了数据打包、解包、错误处理、网络通信等关键部分。通过分析和学习这些源码,我们可以更好地理解如何在实际...
这份"java基础PPT教材"涵盖了Java编程的基础知识,是初学者入门的宝贵资源。以下是根据PPT教材可能涵盖的一些关键知识点的详细说明: 1. **Java简介**: - Java是由Sun Microsystems(现为Oracle Corporation)...
总结,南自以太网103规约是对传统103规约的网络化改进,它在电力自动化领域提供了可靠的通信基础。而“PSL103Net.cpp”等代码资源则为开发者提供了实践103规约的宝贵参考,帮助他们更好地理解和应用这一通信协议。
通过深入学习通信规约和MINA通信程序,开发者能够更好地理解和实现网络应用中的数据交换,为复杂系统的构建打下坚实基础。无论是对通信协议的理解,还是对MINA框架的运用,都能提升项目开发的效率和质量。
Java SE(标准版)是Java开发平台的核心组成部分,主要用于桌面应用...压缩包中的"java_se_basics-master"很可能是包含这些练习代码的项目目录,建议按照目录结构逐一学习和实践,以便更好地掌握Java SE的基础知识。
水文监测数据通信规约SL651-2014是水利行业内部用于统一水文监测数据通信的标准化规范。它规定了数据通信的方法、格式、协议以及通信方式,确保水利行业产品在数据通信方面能够互相兼容和对接。这对于提高水利行业...
2. **异常处理规约**:异常处理是程序健壮性的重要保障。手册详细阐述了何时使用异常,如何正确捕获和抛出异常,以及避免滥用异常作为控制流程的工具。 3. **并发处理规约**:在多线程环境下,合理的并发处理至关...
阿里巴巴作为中国知名的互联网企业,其发布的《阿里巴巴Java开发规约手册》是业界广泛参考的Java编程规范。这份手册涵盖了命名规则、代码结构、异常处理、并发控制等多个方面,对于新手和有经验的程序员来说,都是一...
1. **基础规约**:这部分主要讲解了Java语言的基础使用规则,如命名规范、注释规范、类型系统、异常处理、集合框架的使用等。良好的基础规约能够确保代码的可读性和一致性。 2. **异常安全**:异常处理是Java编程中...
- 文档支持:阅读和理解376.1协议文档,以便更好地应用Java版实现。 综上所述,电力电表376.1协议Java版的实现是一个涵盖协议解析、数据通信和系统集成等多个方面的技术任务,对于电力行业软件开发人员来说,理解...
总的来说,电力系统IEC104规约是电力自动化通信的基础,它通过规范化的报文格式和传输机制,保证了电力系统的稳定运行和高效监控。在实际应用中,理解和掌握IEC104协议的原理和报文格式对于电力系统的设计、调试和...
1. **编程规约**:手册中对Java编程的基础规约进行了详尽阐述,如命名规范(类名、方法名、变量名等),注释规则,以及代码格式化要求,这些都是保证代码整洁度和一致性的重要基础。 2. **基本语法**:手册强调了...