首页编程java编程为什么要制定java代码规范?为什么要遵守Java代码规范

为什么要制定java代码规范?为什么要遵守Java代码规范

编程之家2023-10-1192次浏览

大家好,今天给各位分享为什么要制定java代码规范的一些知识,其中也会对为什么要遵守Java代码规范进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

为什么要制定java代码规范?为什么要遵守Java代码规范

为什么要学习Java编程

为什么要学习Java编程?近些年学习Java编程的小伙伴越来越多,难道是单纯的跟风吗?小编郑重其事的告诉你并不是,很多小伙伴参加Java培训是需要交学费的,学习Java培训最终的目的是为了获得更好的就业,甚至说是为了获得高薪就业,那么学习Java编程可以获得高薪就业吗?下面小编从Java介绍开始带领大家进入Java世界。

一、什么是Java

经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系。是的,什么是Java,我想技术体系四个字应该是最好的概括了吧。Java设计者们将Java划分为3种结构独立但却彼此依赖的技术体系分支,它们分别对应着不同的规范集合和组件:

为什么要制定java代码规范?为什么要遵守Java代码规范

JavaSE(标准版),主要活跃在桌面领域,主要包含了JavaAPI组件。

JavaEE(企业版),活跃在企业级领域,除了包含JavaAPI组件外,还扩充有Web组件、事务组件、分布式组件、EJB组件、消息组件等,综合这些技术,开发人员完全可以构建出一个具备高性能、结构严谨的企业级应用,并且JavaEE也是用于构建SOA(面向服务架构)的首选平台。

JavaME(精简版),活跃在嵌入式领域,称之为精简版的原因是,它仅保留了JavaAPI中的部分组件,以及适应设备的一些特有组件。

为什么要制定java代码规范?为什么要遵守Java代码规范

上面讲到Java技术体系的分支,那既然Java是一种技术体系,我们来看一下组成这种技术体系的技术:

Java编程语言

字节码

JavaAPI,包括JavaAPI类库和来自商业机构以及开源社区的第三方类库

Java虚拟机

很多时候我们只关注了第一点,因为第一点才是和工作切实相关的。

二、Java的优点

Java能获得如此广泛的认可,除了它拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽视的优点:

1、它摆脱了硬件平台的束缚,实现了“一次编写、到处运行”。

2、它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题。

3、它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能。

4、它有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能。

5、它与身俱来对分布式技术的支持就比较完善。

但是,Java最大的优势和财富还不是以上这些,就像高翔龙老师在《Java虚拟机精讲》中写的,Java真正强大的地方是因为拥有全世界最多的技术拥护者和开源社区支持,他们无时无刻都保持着最充沛的体力与思维,一步一步地驱动着Java技术的走向。

三、JDK和JRE

两个常见的重要概念。其实上面的图中已经划分出了JDK和JRE的范围了。我们对这张图做一个归纳,用我们的语言简单地总结一下什么是JDK和JRE:

1、JDK(JavaDevelopmentKit),是用于支持Java程序开发的最小环境,基本上Java程序设计语言、Java虚拟机、JavaAPI类库这三部分组成了JDK。

2、JRE(JavaRuntimeEnviroment),是支持Java程序运行的标准环境,JavaAPI类库中的JavaSEAPI自己和Java虚拟机这两部分组成了JRE。

四、OpenJDK

前面有讲过,“Java真正强大的地方是因为拥有全世界最多的技术拥护者和开源社区支持,他们无时无刻都保持着最充沛的体力与思维,一步一步地驱动着Java技术的走向”。其实JDK在一开始并不是开源的,但是随着开源运动的蓬勃发展,2006年Sun公司宣布将对Java开放源代码,开源的Java平台开发主要集中在OpenJDK项目上。

OpenJDK中的代码基本上都来自于OracleJDK,属于OracleJDK的一个分支,但是其中去除了一些非开源的组件和代码,替换成了开源的组件和代码,主要是加密和图形的部分。因此用OpenJDK代替OracleJDK可能会有一些的不兼容。

五、JCP和JSR

JCP(JavaCommunityProcess)是一套制定Java技术规范的机制,通过制定和审查JSR(JavaSpecificationRequests)推动Java技术规范的发展。一个已经提交的JSR要想成为最终状态,需要经过正式的公开审查,并由JCP委员会投票决定,最终的JSR会提供一个参考实现,它是免费而且公开源代码的。

JSR并非只由Oracle管理,任何个人都可以注册并参与审查JSR,对于Java语言发展动态感兴趣的人来说,跟踪JSR的动态发展是一条不错的学习途径。在JCP官网#/中可以查看所有的JSR,下面列举几个大家熟悉的JSR:

JSR14,泛型

JSR51,NIO

JSR175,注解

JSR201,枚举以及自动装箱等

JSR221,JDBC4.0API

六、Java虚拟机

最后,轮到这个大哥登场,也是之后文章的主角。为什么Java可以实现所谓的“一次编写,到处运行”,主要是因为虚拟机的存在。Java虚拟机负责Java程序设计语言的安全特性和平台无关性。

Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译器只需要生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。Java虚拟机使得Java摆脱了具体机器的束缚,使跨越不同平台编写程序成为了可能。

要多提一句,我们现在说的Java虚拟机基本上都是JDK自带的虚拟机HotSpot,这款虚拟机也是目前商用虚拟中市场份额最大的一款虚拟机,可以通过在命令行程序中输入“java-version”来查看。

那其实市面上还有很多别的优秀的虚拟机。Sun公司除了有大名鼎鼎的HotSpot外,还有KVM、SquawkVM、MaxineVM,BEA公司有JRockitVM、IBM公司有J9VM等等。

以上内容是关于Java的详细介绍,如果你也对Java感兴趣,想要学习Java技术开发不妨来昌平北大青鸟参加Java培训班免费体验课程。从而确定自己是否适合学习Java编程。

免责声明:内容来源于公开网络,若涉及侵权联系尽快删除!

为什么要遵守Java代码规范

为什么要遵守Java代码规范?当你第一次接触到Java代码规范的时候,你是不是觉得很麻烦呢?比如关于统一的原则,一再的强调,但是你一再的忘记,或者压根就不想照做,会出现什么样的后果呢?今天动力节点IT培训的小编将借Java代码规范中的统一来说说,自己对为什么要遵守Java代码规范,发表自己简单的看法。

Java代码规范中的统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。

而如果你在一个项目中不遵守已经制定好的统一规范,那么不仅是给自己带来麻烦,也是给其他工作人员带来不便,在要进行整理的时候,你的不同,会带来不必要的交流麻烦。作为一个Java程序员,你一般是属于团队中的一员,你不遵守制定好的Java代码规范,其他人也不遵守那么你们的团队就得乱套了,所以面对Java代码规范的学习,不要觉得无趣,还是得用心记住,并且予以遵守。

java软件开发的代码规范

1、组织与风格

(1).关键词和操作符之间加适当的空格。

(2).相对独立的程序块与块之间加空行

(3).较长的语句、表达式等要分成多行书写。

(4).划分出的新行要进行适应的缩进,使排版整齐,语句可读。

(5).长表达式要在低优先级操作符处划分新行,操作符放在新行之首。

(6).循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。

(7).若函数或过程中的参数较长,则要进行适当的划分。

(8).不允许把多个短语句写在一行中,即一行只写一条语句。

(9).函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。

注:如果大家有兴趣可以到安安DIY创作室博客,有相关说明性的文章和解释。

2、注解

Java的语法与 C++及为相似,那么,你知道 Java的注释有几种吗?是两种?

//注释一行

/*......*/注释若干行

不完全对,除了以上两种之外,还有第三种,文档注释:

/**......*/注释若干行,并写入 javadoc文档

注释要简单明了。

String userName= null;//用户名

边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。

在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防止注释二义性。

保持注释与其描述的代码相邻,即注释的就近原则。

对代码的注释应放在其上方相邻位置,不可放在下面。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;

同一结构中不同域的注释要对齐。

变量、常量的注释应放在其上方相邻位置或右方。

全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。

在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等。

/**

* Copy Right Information: Neusoft IIT

* Project: eTrain

* JDK version used: jdk1.3.1

* Comments: config path

* Version: 1.01

* Modification history:2003.5.1

* Sr Date Modified By Why& What is modified

* 1. 2003.5.2 Kevin Gao new

**/

在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等

/**

* Description:checkout提款

*@param Hashtable cart info

*@param OrderBean order info

*@return String

*/

public String checkout(Hashtable htCart,

OrderBean orderBean)

throws Exception{

}

javadoc注释标签语法

@author对类的说明标明开发该类模块的作者

@version对类的说明标明该类模块的版本

@see对类、属性、方法的说明参考转向,也就是相关主题

@param对方法的说明对方法中某参数的说明

@return对方法的说明对方法返回值的说明

@exception对方法的说明对方法可能抛出的异常进行说明

3、命名规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)较短的单词可通过去掉元音形成缩写;要不然最后自己写的代码自己都看不懂了,那可不行。

较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。

使用匈牙利表示法

Package的命名

Package的名字应该都是由一个小写单词组成。

package com.neu.util

Class的命名

Class的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。

public class ThisAClassName{}

Class变量的命名

变量的名字必须用一个小写字母开头。后面的单词用大写字母开头

userName, thisAClassMethod

Static Final变量的命名

static Final变量的名字应该都大写,并且指出完整含义。

/**

*DBConfig PATH

**/

public static final String

DB_CONFIG_FILE_PATH=com.neu.etrain.dbconfig;

参数的命名

参数的名字必须和变量的命名规范一致。

数组的命名

数组应该总是用下面的方式来命名:

byte[] buffer;

而不是:

byte buffer[];

方法的参数

使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

SetCounter(int size){

this.size= size;

}

4、文件样式

所有的 Java(*.java)文件都必须遵守如下的样式规则:

版权信息

版权信息必须在 java文件的开头,比如:

/*

* Copyright? 2000 Shanghai XXX Co. Ltd.

* All right reserved.

*/

其他不需要出现在 javadoc的信息也可以包含在这里。

Package/Imports

package行要在 import行之前,import中标准的包名要在本地的包名之前,而且按照字母

顺序排列。如果 import行中包含了同一个包中的不同子目录,则应该用*来处理。

package hotlava.net.stats;

import java io.*;

import java.util.Observable;

import hotlava.util.Application;

这里 java。io.*使用来代替InputStream and OutputStream的。

Class

接下来的是类的注释,一般是用来解释类的。

/**

* A class representing a set of packet and byte counters

* It is observable to allow it to be watched, but only

* reports changes when the current set is complete

*/

接下来是类定义,包含了在不同的行的 extends和 implements

public class CounterSet

extends Observable

implements Cloneable

Class Fields

接下来是类的成员变量:

/**

* Packet counters

*/

protected int[] packets;

public的成员变量必须生成文档(JavaDoc)。proceted、private和 package定义的成

员变量如果名字含义明确的话,可以没有注释。

存取方法

接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的

写在一行上。

/**

* Get the counters

*@return an array containing the statistical data. This array has been

* freshly allocated and can be modified by the caller.

*/

public int[] getPackets(){ return copyArray(packets, offset);}

public int[] getBytes(){ return copyArray(bytes, offset);}

public int[] getPackets(){ return packets;}

public void setPackets(int[] packets){ this.packets= packets;}

其它的方法不要写在一行上

构造函数

接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。

访问类型(public, private等.)和任何 static, final或 synchronized应该在一行

中,并且方法和参数另写一行,这样可以使方法和参数更易读。

public

CounterSet(int size){

this.size= size;

}

克隆方法

如果这个类是可以被克隆的,那么下一步就是 clone方法:

public

Object clone(){

try{

CounterSet obj=(CounterSet)super.clone();

obj.packets=(int[])packets.clone();

obj.size= size;

return obj;

}catch(CloneNotSupportedException e){

throw new InternalError(Unexpected CloneNotSUpportedException:+

e.getMessage());

}

}

类方法

下面开始写类的方法:

/**

* Set the packet counters

*(such as when restoring from a database)

*/

protected final

void setArray(int[] r1, int[] r2, int[] r3, int[] r4)

throws IllegalArgumentException

{

//

// Ensure the arrays are of equal size

//

if(r1.length!= r2.length|| r1.length!= r3.length|| r1.length!= r4.length)

throw new IllegalArgumentException(Arrays must be of the same size);

System.arraycopy(r1, 0, r3, 0, r1.length);

System.arraycopy(r2, 0, r4, 0, r1.length);

}

toString方法

无论如何,每一个类都应该定义 toString方法:

public

String toString(){

String retval= CounterSet:;

for(int i= 0; i< data.length(); i++){

retval+= data.bytes.toString();

retval+= data.packets.toString();

}

return retval;

}

}

main方法

如果main(String[])方法已经定义了,那么它应该写在类的底部.

5、代码可读性

避免使用不易理解的数字,用有意义的标识来替代。

不要使用难懂的技巧性很高的语句。

源程序中关系较为紧密的代码应尽可能相邻。

6、代码性能

在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。

不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。

不必要的对象构造

不要在循环中构造和释放对象

使用 StringBuffer对象

在处理 String的时候要尽量使用 StringBuffer类,StringBuffer类是构成 String类的基础。

String类将 StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer来实现大部分的工作,当工作完成后将 StringBuffer对象再转换为需要的 String对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和她的 append()方法。如果我们用 String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的 CPU时间。大家可以来安安DIY创作室一起讨论。

避免太多的使用 synchronized关键字避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。

7、编程技巧

byte数组转换到 characters

为了将 byte数组转换到 characters,你可以这么做:

Hello world!.getBytes();

Utility类

Utility类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。

初始化

下面的代码是一种很好的初始化数组的方法:

objectArguments= new Object[]{ arguments};

枚举类型

JAVA对枚举的支持不好,但是下面的代码是一种很有用的模板:

class Colour{

public static final Colour BLACK= new Colour(0, 0, 0);

public static final Colour RED= new Colour(0xFF, 0, 0);

public static final Colour GREEN= new Colour(0, 0xFF, 0);

public static final Colour BLUE= new Colour(0, 0, 0xFF);

public static final Colour WHITE= new Colour(0xFF, 0xFF, 0xFF);

}

这种技术实现了RED, GREEN, BLUE等可以象其他语言的枚举类型一样使用的常量。

他们可以用'=='操作符来比较。

但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0)

那么这就是另外一个对象,'=='操作符就会产生错误。她的 equal()方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。

8、编写格式

代码样式

代码应该用 unix的格式,而不是 windows的(比如:回车变成回车+换行)

文档化

必须用 javadoc来为类生成文档。不仅因为它是标准,这也是被各种 java编译器都认可的方法。使用@author标记是不被推荐的,因为代码不应该是被个人拥有的。

缩进

缩进应该是每行2个空格.不要在源文件中保存Tab字符.在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.如果你使用 UltrEdit作为你的 Java源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符,方法是通过 UltrEdit中先设定 Tab使用的长度室2个空格,然后用 Format|Tabs to Spaces菜单将 Tab转换为空格。

页宽

页宽应该设置为80字符.源代码一般不会超过这个宽度,并导致无法完整显示,但这一设置也可以灵活调整.在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行.一条语句折行后,应该比原来的语句再缩进2个字符.

{}对

{}中的语句应该单独作为一行.例如,下面的第1行是错误的,第2行是正确的:

if(i>0){ i++};//错误,{和}在同一行

if(i>0){

i++

};//正确,{单独作为一行

}语句永远单独作为一行.如果}语句应该缩进到与其相对应的{那一行相对齐的位置。

括号

左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格.下面的例子说明括号和空格的错误及正确使用:

CallProc( AParameter);//错误

CallProc(AParameter);//正确

不要在语句中使用无意义的括号.括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:

if((I)= 42){//错误-括号毫无意义

if(I== 42) or(J== 42) then//正确-的确需要括号

9、代码编译

1.编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。

2.同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。

3.合理地设计软件系统目录,方便开发人员使用。

4.打开编译器的所有告警开关对程序进行编译。

5.在同一项目组或产品组中,要统一编译开关选项。

6.使用工具软件(如Visual SourceSafe)对代码版本进行维护。如果大家有不明白的可以到安安DIY创作室留言。

10、可移植性

Borland Jbulider不喜欢 synchronized这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。

换行

如果需要换行的话,尽量用 println来代替在字符串中使用\n。

你不要这样:

System.out.print(Hello,world!\n);

要这样:

System.out.println(Hello,world!);

或者你构造一个带换行符的字符串,至少要象这样:

String newline= System.getProperty(line.separator);

System.out.println(Hello world+ newline);

PrintStream

PrintStream已经被不赞成(deprecated)使用,用 PrintWrite来代替它。

好了,文章到这里就结束啦,如果本次分享的为什么要制定java代码规范和为什么要遵守Java代码规范问题对您有所帮助,还望关注下本站哦!

java中的返回值代表什么(java中的返回值是什么意思)island是什么意思(dynamic island是什么意思)