JavaEE程序编码规范_第1页
JavaEE程序编码规范_第2页
JavaEE程序编码规范_第3页
JavaEE程序编码规范_第4页
JavaEE程序编码规范_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

名称版本号:X.X文件标识:comtop-scm-tmp-doc密级-PAGEII-目录JAVA程序编码规范 11 变量的命名规则 11.1 常量(包含静态的) 11.2 类变量(静态变量)及实例变量 11.3 局部变量 11.4 参数 21.5 其它 22 方法的命名规则 33 类及接口的命名规则 33.1 一般类名 33.2 值对象 33.3 Action 33.4 MyBatis配置文件 43.5 DAO 43.6 ApplicationService 43.7 工具类 43.8 门面类 43.9 代理类 43.10 异常类 43.11 接口类 53.12 接口实现类 54 作用域 54.1 类的作用域 54.2 方法的作用域 54.3 属性的作用域 54.4 局部变量的作用域 55 注释的编写规则 66 格式 76.1 缩进 76.2 每代码行的长度 76.3 大括号 86.4 空行 86.5 空格 96.6 import部分 96.7 数字 97 性能与安全 107.1 静态检查插件 107.2 空指针引用(nullpointerdereference) 107.3 数组引用问题(RETURNARRAY) 107.4 硬编码敏感数据(Hard-codedsensedata) 107.5 整数溢出 107.6 对象初始化 107.7 集合对象初始化容量 117.8 简单参数 117.9 Final类和方法 117.10 无用的代码 117.11 日志级别 117.12 序列化问题 117.13 通过名称比较类 127.14 类克隆 127.15 JDBC使用 137.16 SQL语句 137.17 数据库连接释放 137.18 使用存储过程 137.19 第三方组件 148 附件 14 第16页变量的命名规则常量(包含静态的)一个或多个英文单词的组合,所有字母均大写,单词之间以“_”分隔,如:publicstaticfinalStringUPDATE_FLAG=“T”;finaldoublePI=3.14;一般情况下常量的public等修饰符不可少。类变量(静态变量)及实例变量一个或多个英文单词的组合,第一个单词的首字母小写,其他单词首字母均大写,其余所有字母均小写。如:privateProjectSesprojectSes;privatestaticStringproviderUrl=“”;privateLoggerlogger=Logging.getLogger("TestLogger");一般情况下类变量(静态变量)及实例变量的public等修饰符不可少。局部变量一个或多个英文单词的组合,一般采用Hungarynnaming法(匈牙利定义法),如下:以下是基本数据类型的前缀列表前缀含义实例ch表示char类型charchTemp;i表示int类型intiNumber;byte表示Byte类型bytebyteGet;s表示short类型shortsNumber;l表示long类型longlNumber;f表示float类型floatfCount;d表示double类型doubledPrise;str表示String类型StringstrSend;b表示boolean类型BooleanbFlag;其他数据类型的前缀列表前缀含义实例col表示Collection类型CollectioncolUser=newArrayList();CollectioncolUser=newVector();lst表示List类型ListlstUser=newArrayList();date表示Date类型DatedateStart=newDate();sb表示StringBuffer类型StringBuffersbName=newStringBuffer(1024)除上述情况以外的数据类型,都以obj作为前缀,后面跟一个能说明变量功能或意义单词作为变量,如:UserVOobjUserVO;参数一个或多个英文单词的组合,第一个单词的首字母小写,其他单词首字母均大写,其余所有字母均小写。如:publicvoidsetProjectVO(ProjectVOprojectVO)publicvoidsetUserId(StringuserId)建议方法的参数不要超过5个,超过时可以将多个参数合并为一个对象进行传递。其它常用数据类型的变量,采用固定的命名,包括以下几种:Connectionconn;ResultSetrs;PreparedStatementpstmt;Statementstmt;数组变量命名与普通变量命名规则一致,如:intiProjectId[];publicStringuserName[];每个变量的声明单独占一行。不能一个类型同时声明两个变量。如:inti,j;这样的写法是不允许的。不要在代码中出现不使用的变量,如果以后会用到或有其他用途要写上注释说明。类名、变量名中含缩写词组:缩写词组全部大写,如:StringstrSQL;publicclassProjectDAO{}方法的命名规则方法命名的基本原则:容易看懂一般的方法名采用两个单词动宾结构形式的名称,两个单词之间不要带其它符号,第二个单词的首字母大写,其它的都小写。如:readBudget(intbudgetId)、deleteBudget(intbudgetId)只有一个动词形式的方法名不推荐使用。不容易看明白的方法名或有歧义的方法名可采用多单词的形式,每两个单词之间不要带其它符号,从第二个单词开始,每个单词的首字母大写,其它的都小写。如:readBudgetByProjectId(intprojectId)、readBudgetByProjectIdAndYear(intprojectId,intyear)方法命名不得采用缩写形式。类及接口的命名规则一般类名一个或多个英文单词的组合,所有单词的首字母大写,其余所有字母均小写,如:publicclassProjectUser{}值对象数据库表的逻辑名+VO,如:表PUB_DICTIONARY的值对象名为DictionaryVO。Action表名/模块名+Action,如:字典的Action类名为DictionaryAction。MyBatis配置文件表名/模块名+SQL.xml,如:字典模块的MyBatis配置文件命名为DictionarySQL.xml。DAODAO类名为模块名+DAO,如:字典DAO类名为:DictionaryDAOApplicationServiceApplicationService类名为模块名+AppService,如:字典ApplicationService类名为:DictionaryAppService工具类工具类的类名为模块名+Util,如:字典的工具类名为:DictionaryUtil门面类门面类的类名为模块名+Facade,如:字典的门面类名为:DictionaryFacade代理类代理类的类名为模块名+Man,如:字典的代理类名为:DictionaryMan异常类异常类的类名为模块名+Exception,如:字典的异常类名为:DictionaryException接口类接口类的类名为模块名+Interface,如:字典的接口类名为:DictionaryInterface接口实现类接口实现类的类名为实现名+Imp,如:字典的接口实现类名为:DictionaryImp作用域类的作用域类的作用域保持最小范围。供包外其它类引用的类才添加public作用域修饰符。方法的作用域只供对象或类内部调用的方法必须使用private作用域修饰符。包外不会调用的方法严禁使用public作用域修饰符。属性的作用域静态常量(类常量)属性可以使用各种作用域修饰符。对象属性变量严禁使用public作用域修饰符。VO对象属性变量必须使用private作用域修饰符。局部变量的作用域方法内的变量定义应该遵循最小作用域规则。如://iSize只在下面的for循环中使用intiSize=alItems.size();for(inti=0;i<iSize;i++){ ……………….}建议写成:for(inti=0,iSize=alItems.size();i<iSize;i++){ ……………….}属性是对象的特征,不要把非对象的属性定义为实例变量。注释的编写规则所有类及接口文件要写文件头注释(包含版权等),版权中的年度代码书写的开始年度(Copyright(C)2021),如下:/*******************************************************************************Copyright(C)2021SunLineInformationTechnologyCo.,Ltd*AllRightsReserved.*本软件为SunLine开发研制。未经本公司正式书面同意,其他任何个人、团体不得使用、*复制、修改或发布本软件.*****************************************************************************/所有类及接口头要写类注释(包含作者、创建日期等),@author、@history中要书写中文名,如果注释的内容比较长则需要加“<br>”。如下:/***技改项目业务代表实现类.实现新增项目,删除项目等方法,<br>*提供对表现层的接口.*@author张三*@sinceJDK1.4*@history2021-10-15张三新建*/类中必要的方法(包括私有方法)要写方法头注释。其中返回值(@return)需要说明含义,包括整型,布尔型,集合等,如对于整形:@return返回1表示成功,0表失败;对于集合类型要写明集合内元素的类型:@returnUserVO的集合。如果注释的内容比较长则需要加“<br>”,如下:/***修改投标人信息*@parambidderVO投标人信息*@throwsBidderException修改异常*@throwsNoPermissionException没有修改权限*@return修改成功返回1没有修改返回0*/publicintupdateBidder(BidderVObidderVO)throwsBidderException对代码块的注释,注释语句放在代码块之上,用”//”进行注释,如果注释语句本身超过一行,则用”/**/”进行注释。对某一行代码的注释,注释语句放在代码行的后面,用”//”进行注释。建议代码块之间空一行。如下:publicvoidinsertProject(ProjectVOprojectVO){ //新增项目信息 iProjectId=Toolkit.getInstance().getNextKey("Project");//取项目IDlogger.debug("GenerateProjectID:"+iProjectId);ProjectobjProject=projectHome.create(iProjectId);objProject.setProjectVO(projectVO);<空一行>/*从项目VO中取得申请人ID及联系人ID,并将申请人ID及联系人ID插入到PUB_ACCESS_CONTROL表*/projectVO.setProjectId(iProjectId);this.authProject(projectVO);}格式引入公司指定的格式化配置文件最新版本,使用Eclipse的格式化功能进行代码格式化。缩进设定为4个字符。每代码行的长度代码行的长度不超过120个字符。大括号大括号中的“{”与条件在同一行,“}”单独一行,即使大括号中只有一条执行语句也要使用大括号,如:if(a==b){return0;}空行类文件头注释、package语句、import语句、类头注释、类的属性、方法等之间都空一行。类的属性与属性之间、方法与方法之间都空一行。如下:/*******************************************************************************Copyright(C)2021SunLineInformationTechnologyCo.,Ltd*AllRightsReserved.*本软件为SunLine开发研制。未经本公司正式书面同意,其他任何个人、团体不得使用、*复制、修改或发布本软件.*****************************************************************************/<空一行>packagejectinfo.exception;<空一行>importtop.util.BaseException;<空一行>/***公共项目管理异常类.*@author张三*@sinceJDK1.4*@history2021-03-15张三新建*/publicclassProjectExceptionextendsBaseException{privateStringmessage; <空一行>/** ...... */publicProjectException(Stringmessage){super(message);this.message=message;}<空一行>/** ......*/publicStringgetMessage(){returnmessage;}}空格“=”、“+”、“==”等二元操作符两边分别空一格。如:inti=1;“,”的后面空一格。如:implementsRunnable,cloneableimport部分import引用要具体到类名,不能用“*”。import语句书写的顺序为:Java标准类,第三方软件类库,本公司自己的组件类、本工程其他包中的类。这四部分之间分别空一行。所有需要用到的其他包的类都要在import中应用,不要将类似“newjava.util.ArrayList()”的语句写在代码中。数字long、double、float型变量后的字母“L”、“D”、“F”均大写。16进制的前缀“0X”要大写“X”,数字部分“A”“F”要大写。代码中不要直接使用数字(-1,0,1除外),要先对数字进行变量声明。性能与安全静态检查插件有tptp-analysis、PMD、findbugs、checkStyle、commontools共5个插件做为代码自检的标准工具。按照给定的最新版插件配置文件检查,识别问题原因及改进范围,在上传配置库前改进代码格式及性能。空指针引用(nullpointerdereference)在使用或引用对象前,要先对其进行检查,判断其是否为空。数组引用问题(RETURNARRAY)不要直接返回指向包含敏感数据的内部数组的引用。不要传回一个数组,而是数组的拷贝。硬编码敏感数据(Hard-codedsensedata)应该将敏感数据保存在属性文件中,无论什么时候需要这些数据,都可以从该文件读取。如果数据极其敏感,那么在访问属性文件时,应用程序应该使用一些加密/解密技术,避免导致敏感数据泄露。整数溢出应该对所有整数计算的结果进行检查,防止整数溢出。对象初始化对变量的使用不要依赖于初始化。在使用对象之前,应该检查对象的初始化过程。可以采用如下方法实现:在每个类中都应该有一个在构造器中设置的私有布尔标志,在每个非static方法中,代码在任何进一步执行之前都应该检查该标志的值。如果该标志的值为true,那么控制应该进一步继续;否则,控制应该抛出一个例外并停止执行。集合对象初始化容量在初始化StringBuffer、集合类(List、Set、Map)等时,一般要指定对象的初始化容量,避免不必要的空间浪费,提升性能。StringBuffer的初始化容量比PMD插件检查后给出的建议值大一些的值;List、Set初始化容量可设置为估计值;Map初始化容量可设置为估计值的2倍到3倍。简单参数方法调用时,传入的参数应该是一个具体对象,而不是一个嵌套另一个方法。比如类似“this.a(b(c()))”,要将方法的返回值赋给变量再作为参数传递。Final类和方法应该将不允许扩展的类和方法应该声明为final,这样可以防止系统外的代码扩展类并修改类的行为。避免使用非final的公共静态变量。无用的代码应该将(除启动应用程序的main()方法之外的)main()方法、未使用的方法以及死代码从应用程序代码中除去。调试使用的控制台输出语句(System.out.println)在调试结束后要删除。日志级别使用正确的日志级别输出,注意info、warning、debug、error等级别的使用场合。禁止使用debug级别输出错误信息,禁止使用errror级别输出调试信息。序列化问题在包含系统资源的直接句柄和相对地址空间信息的字段前应该使用transient关键字。如果资源,如文件句柄,不被声明为transient,该对象在序列化状态下可能会被修改,从而使得被反序列化后获取对资源的不当访问。为了确保反序列化对象不包含违反一些不变量集合的状态,类应该定义自己的反序列化方法并使用ObjectInputValidation接口验证这些变量。为了保护虚拟机外的字节流,可以对序列化包产生的流进行加密。字节流加密防止解码或读取被序列化的对象的私有状态。如果决定加密,应该管理好密钥,密钥的存放地点以及将密钥交付给反序列化程序的方式等。如果一个类定义了自己的序列化方法,它就不能向任何DataInput/DataOuput方法传递内部数组。所有的DataInput/DataOuput方法都能被重写。注意默认序列化不会向DataInput/DataOuput字节数组方法暴露私有字节数组字段。通过名称比较类在那些非得根据名称来比较类的情况下,必须确保使用了当前类的ClassLoader的当前名称空间,如下面示例中所示的一种更好的比较方法:if(obj.getClass()==this.getClassLoader().loadClass("com.bar.Vnet")){//object'sclassisequalto//theclassthatthisclasscalls"com.bar.Vnet"}else{//object'sclassisnotequaltotheclassthat//thisclasscalls"com.bar.Vnet"}比较类的更好方法是直接比较类对象看它们是否相等:if(a.getClass()==b.getClass()){//objectshavethesameclass}else{//objectshavedifferentclasses}应该尽可能少用直接名称比较。类克隆除非有明确的需求,否则要保证你定义的类是不可克隆的。要使类不可被复制,只要在每个类里定义如下方法:publicfinalObjectclone()‏throwsjava.lang.CloneNotSupportedException{thrownewjava.lang.CloneNotSupportedException();}如果想让您的类可克隆并且您已经考虑了这一选择的后果,请在你的类中定义一个为final的克隆方法publicfinalObjectclone()‏super.clone();}JDBC使用SQL语句变量使用“?”绑定变量。在DAO中,所有SQL语句中的变量都要使用“?”来绑定变量,禁止直接拼凑变量到SQL语句中;查询分页数据方法中,避免取所有记录的方式。在DAO中,查询分页数据的方法,不得使用取所有记录出来后再分页的方式,而要使用分页SQL语句包装方法。SQL语句不得在DAO外书写。不得在DAO类外写好SQL语句后传入DAO执行。查询数据集合时要使用DAO方式,避免使用EntityBean查询数据集合。SQL语句类中包含的SQL语句必须全部大写(包括关键字、表名、字段名等),如:SELECTPROJECT_NAMEFROMIMP_PROJECTWHEREPROJECT_ID=1EJB的EJB-QL中关键字(如WHERE等)必须全部大写,实体类的别名为英文单词(组合)且单词首字母大写,其余字母全部小写。如:SELECTOBJECT(User)FROMUserASUserWHEREUser.Id=?1数据库连接释放数据库访问可使用EJB的EntityBean等,对数据集的访问必须使用DAO方式。不管代码是否失败,均关闭对数据库的连接。DAO层可使用iBatic等开源框架,如果是手工写SQL语句访问,必须在try语句的finilly块中安全释放数据库连接。使用存储过程对于复杂的数据库操作应该使用存储过程。存储过程具有更短运行时间和更短的事务锁,具有更高的运行效率。第三方组件慎重使用第三方组件。如果必须使用第三方组件,那必须遵守以下原则:1、向你要重用的提供商询问,是否用过findbugs或者类似的工具检查组件,确保供应商进行过足够的安全测试。2、在你购买之前要求一个findbugs的报告,这可能增加对组件的信任3、可以对使用的第三方组件进行独立的安全测试。附件

论大学生写作能力写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。没有积累,胸无点墨,怎么也不会写出作文来的。写作能力是每个大学生必须具备的能力。从目前高校整体情况上看,大学生的写作能力较为欠缺。一、大学生应用文写作能力的定义那么,大学生的写作能力究竟是指什么呢?叶圣陶先生曾经说过,“大学毕业生不一定能写小说诗歌,但是一定要写工作和生活中实用的文章,而且非写得既通顺又扎实不可。”对于大学生的写作能力应包含什么,可能有多种理解,但从叶圣陶先生的谈话中,我认为:大学生写作能力应包括应用写作能力和文学写作能力,而前者是必须的,后者是“不一定”要具备,能具备则更好。众所周知,对于大学生来说,是要写毕业论文的,我认为写作论文的能力可以包含在应用写作能力之中。大学生写作能力的体现,也往往是在撰写毕业论文中集中体现出来的。本科毕业论文无论是对于学生个人还是对于院系和学校来说,都是十分重要的。如何提高本科毕业论文的质量和水平,就成为教育行政部门和高校都很重视的一个重要课题。如何提高大学生的写作能力的问题必须得到社会的广泛关注,并且提出对策去实施解决。二、造成大学生应用文写作困境的原因:(一)大学写作课开设结构不合理。就目前中国多数高校的学科设置来看,除了中文专业会系统开设写作的系列课程外,其他专业的学生都只开设了普及性的《大学语文》课。学生写作能力的提高是一项艰巨复杂的任务,而我们的课程设置仅把这一任务交给了大学语文教师,可大学语文教师既要在有限课时时间内普及相关经典名著知识,又要适度提高学生的鉴赏能力,且要教会学生写作规律并提高写作能力,任务之重实难完成。(二)对实用写作的普遍性不重视。“大学语文”教育已经被严重地“边缘化”。目前对中国语文的态度淡漠,而是呈现出全民学英语的大好势头。中小学如此,大学更是如此。对我们的母语中国语文,在大学反而被漠视,没有相关的课程的设置,没有系统的学习实践训练。这其实是国人的一种偏见。应用写作有它自身的规律和方法。一个人学问很大,会写小说、诗歌、戏剧等,但如果不晓得应用文写作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论