Java高级代码规范优选.docx

上传人:b****6 文档编号:8389883 上传时间:2023-01-31 格式:DOCX 页数:27 大小:33.03KB
下载 相关 举报
Java高级代码规范优选.docx_第1页
第1页 / 共27页
Java高级代码规范优选.docx_第2页
第2页 / 共27页
Java高级代码规范优选.docx_第3页
第3页 / 共27页
Java高级代码规范优选.docx_第4页
第4页 / 共27页
Java高级代码规范优选.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Java高级代码规范优选.docx

《Java高级代码规范优选.docx》由会员分享,可在线阅读,更多相关《Java高级代码规范优选.docx(27页珍藏版)》请在冰豆网上搜索。

Java高级代码规范优选.docx

Java高级代码规范优选

最新文件----------------仅供参考--------------------已改成-----------word文本---------------------方便更改

赠人玫瑰,手留余香。

Java高级代码规范

Comment:

一:

不允许使用汉语拼音命名

   欠规范代码示例:

   publicvoidzengJiaYongHu(){} 拼音方法名称

   规范代码示例:

   publicvoidaddUser(){}

   解析:

应当使用国际化语言,拼音使得代码难懂

   

二:

Package名必须全部小写,尽量使用单个单词

   欠规范代码示例:

    

   com.lxit.daoImpl 单词大写了,daoImpl多个单词

   规范代码示例:

   com.lxit.dao.impl

   解析:

这是一个大家都认同的习惯写法,也是一个默认的规范

   

三:

局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)

   欠规范代码示例:

   publicclassUserDAOImpl{

      privateintcount;

      pubicvoidpage(intcount){}

   }

   类字段和方法参数名相同

   规范代码示例:

    publicclassUserDAOImpl{

      privateintcount;

      pubicvoidpage(intpageCount){}

    }

   解析:

类变量会引起逻辑错误,引起覆盖。

   

四:

尽量不要在变量后面加魔法数字,英文单个字母和没有实际意义的英文数字单词来区分变量

   欠规范代码示例:

      StringOne; 命名一个英文数字的变量

      Useruser1=newUser();

      Useruser2=newUser();

   规范代码示例:

     UseruserAdd=newUser();

     UseruserUpdate=newUser();

   解析:

这样会降低代码的可读性,并且不容易日后开发人员的维护

   

五:

包,类,变量命名不要加下划线(常量除外)

   欠规范代码示例:

     com.tag_test.dao.jdbc_impl 有下划线的包名

     intuser_age;             带下划线的变量名

     publicclassClass_{}     带下划线的类名

   规范代码示例:

     com.tag.test.dao.jdbc.impl

     intuserAge;

     publicclassClasses{}

   解析:

一种习惯性的用法,默认的规范

   

六:

常量命名要大写,单词之间要用下划线分开.

   欠规范代码示例:

    publicstaticfinalStringteamAdd="teamAdd";  小写且没有下划线

   规范代码示例:

    publicstaticfinalStringTEAM_ADD="teamAdd";

   解析:

容易区分变量和常量

   

七:

方法名第一个字母小写(构造方法除外).

   欠规范代码示例:

   publicvoidFunction(){} 大写的方法名

   规范代码示例:

   publicvoidfunction(){}

   解析:

习惯用法,默认的规范

   

八:

两个单词以上的变量名要驼峰命名

   欠规范代码示例:

   intuserage; age单词'a' 小写

   欠规范代码示例:

   intuserAge;

   解析:

能够更清晰的看懂变量所带代表的意思

   

九:

每个变量要用看得懂的词语来描述,尽量不要省略.

   欠规范代码示例:

   privateStudengstu; 把student简写成stu

   规范代码示例:

   privateStudentstudent;

   解析:

使代码看起来清晰使人易懂

   

十:

一个类的命名一般是名词(有些ing的动词,形容词除外),变量名也是一样.函数的命名必须是动宾短语(构造词除外).

   欠规范代码示例:

   publicclassManage{}  动词类命

   规范代码示例:

   publicclass UserManage{}

   解析:

能使别人一看到类名就知道这个类大概是做什么的。

   

十一:

数据库连接对象的生成不能跟Model层混搅,必须将其放在一个单独的类里,用单例模式来实现数据库的连接.

   欠规范代码示例:

   

publicclassUserDAOImpl(){    

 privatestaticConnectionconnection; 

  publicstaticsynchronizedConnectiongetConnection(){ 

   if(connection==null){    

 try{}catch(SQLExceptione){}   

      catch(ClassNotFoundExceptione)

{e.printStackTrace()}

  }

   returnconnection;      

}   

}

   规范代码示例:

   

publicclassDBConnectionTools{

 privatestaticConnectionconnection;

    privateDBConnectionTools(){}

    publicstaticsynchronizedConnectiongetConnection(){

   if(connection==null){

       try{

        Class.forName(Constants.MYSQL_DRIVER);

            connection=DriverManager.getConnection(Constants.MYSQL_URL,Constants.MYSQL_USER_NAME,     

             Constants.MYSQL_PASSWORD);          

  }catch(SQLExceptione){

               e.printStackTrace();           

}catch(ClassNotFoundExceptione){  

             e.printStackTrace();            

}

      }

      returnconnection;

    }

 }

   解析:

数据库连接应当单独出去出来,以便其它类可以复用

      

十二:

id一般不用int类型,用long类型

   欠规范代码示例:

   intid;          int类型的关于人员的id

   规范代码示例:

   Longid;

   解析:

随着id的增长,当增长的id超出int的范围的时候就会出现异常

十三:

sql语句一定要用占位符,不能用拼写组成的语句

   欠规范代码示例:

 

publicvoidaddUser(Useruser){    

Stringsql="insertintostudent(ID,name,sex,address)values("+user.getId()+","+user.getName()+","+user.getSex()+","+user.getAddress()+")";

  //?

则代表占位符   

}

   规范代码示例:

publicvoidaddUser()

{

      sql="insertintostudent(ID,name,sex,address)values(?

?

?

?

)"//?

则代表占位符

      //可用预处理来发送sql语句

 }

   解析:

很容易出现错误,而且不清晰,不容易让人读懂。

十四:

PreparedStatement最好不要声明为类字段.

   欠规范代码示例:

   

publicclass UserDAOImpl()

{

     privatePreparedStatementpreparedStatement;

}

   规范代码示例:

publicclassUserDAOImpl{

  publicvoidaddUser(){

     PreparedStatementpreparedStatement=newPreparedStatement(sql);

   }

}

   解析:

虽然很多类都使用到了PrepareStatement对象,但各个方法里用到的PrepareStatement对象都是不同的,

   所以不能作为类字段,抽取出来做类字段的话会出现数据混乱的问题

十五:

做主键的列没有任何业务逻辑,没有任何实际意义,而且任何时候都不能修改。

   欠规范主键示例:

主键用一个身份证号码,或者学号

   规范主键示例:

主键用id,唯一性的,不可改变的。

   解析:

虽然身份证号码和学号也是唯一性的,但是他们是有意义的列,而且在程序升级时是可以更改的,

   而id主要就是用来做主键的

十六:

取记录的时候,拿数据库条件语句去比较,不要自己用Java代码去比较.

   欠规范代码示例:

publicvoiddeleteById(Longid){

   Stringsql="selectid,name,agefromuser";

   //........................

    ResultSetresult=ResultSet.executeQuery();

    where(result.next()){

      if(result.getLong("id")==id){

    //..........................................删除

      }

    }

}

   规范代码示例:

  

publicvoiddeleteById(Longid)

{

     Stringsql="deletefromuserwhereid=?

";

     //删除操作

}

   

   解析:

一旦取出的数据量过大,而用java代码的if判断的话,会影响运行速率,还可能导致内存不足等错误。

  

十七:

代码提交之前必须写注释,不管什么原因.

   欠规范代码示例:

暂时无

   规范代码示例:

  暂时无

   解析:

使别人能够很清晰的你知道做了哪些修改

   

十八:

提交之前先更新代码.

   欠规范代码示例:

暂时无

   规范代码示例:

  暂时无

   解析:

防止出现冲突

   

十九:

只要系统有红色错误,那么就不能提交,提交前要保证编译错误全部消除.

   欠规范代码示例:

暂时无

   规范代码示例:

   暂时无

   解析:

如果上传了错误的代码,会导致别人因为下载了错误代码而带来开发上的问题

   

二十:

每个人的代码每天尽量上传,代码在本地的时间不要超过2天.

  欠规范代码示例:

 暂时无

  规范代码示例:

    暂时无

  解析:

保持与资源库的同步

   

二十一:

提交java代码前应该检查是否有没用的语句如:

(System.out.println();),jsp页面上面是否有alert调试信息.

   欠规范代码示例:

暂时无

   规范代码示例:

   暂时无

   解析:

因为如果保留了有可能会影响到程序正常运行的结果,如:

   

for(inti=0;i<10;i++)

{

   System.out.println(i);

}

//如果测试for语句里有没有执行

for(inti=0;i<10;i++){

   System.out.println("测试代码是否运行到这里");

   System.out.println(i);

}

      如果没有删除测试语句,则结果就会不一样了,              

   

二十二:

两个不同的包不能出现相同的文件名

    欠规范示例:

    packgecom.lxitedu.work.MyWork.java

    packgecom.lxitedu.task.MyWork.java

    规范示例:

    packgecom.lxitedu.work.MyWork.java

    packgecom.lxitedu.task.Work.java

    解析:

当一个在一个庞大的系统的时候,很可能引起混淆

二十三:

提交代码前如果有TODO标签,要删除掉,如果要标记没有做完的任务或者以后要改进的任务,用LXTODO.

   欠规范代码示例:

暂时无

    规范代码示例:

暂时无

    解析:

暂时无

二十四:

注释掉的代码提交前要删除。

    欠规范代码示例:

   

 /*

publicvoidadd(){

   if(true){

      System.out.println("这段代码已

      经给注释掉了,程序中没有用到");

   }

}

*/

    提交前没有删除这段代码

    规范代码示例:

删掉就行了

    解析:

既然代码在程序中没有用到的话就要删除,以免其他队员看到误解和浪费他人时间来读其代码。

   

二十五:

代码提交的注释里面不要加自己的名字.

    欠规范代码示例:

暂时无

    规范代码示例:

  暂时无

    解析:

因为提交的时候,系统已经帮你提交了用户名。

  

二十六:

PreparedStatement、ResultSet、Statement.对象用完之后必须进行调用close()将会关闭,立即释放此Statement对象的数据库和JDBC资源,不然会占用系统很多资源.

  //此规范可以用适配器模式解决,不必手动去关闭了

   

二十七:

尽量不要在构造方法里初始化.

    欠规范代码示例:

  

publicclass Person{

    publicPerson(){

       Personperson=newPerson();

       add();

    }

}

   规范代码示例:

publicclass Person{

  publicPerson()

Unknownmacro:

{  //尽量少做些不必要的事情  }

}

   解析:

因为在构造器里初始化没办法控制,构造器多了也容易出现混乱。

如果有反射机制,也许会跳过构造方法。

  

   

二十八:

函数的返回值类型(如果有的话)要和其功能相匹配,要符合常规思维.

   欠规范代码示例:

             得到一个用户的姓名

            

publicStringgetPeopleName()            

{

   return"userName";

}

   规范代码示例:

得到一个用户的姓名的方法

 publicStringgetUserName(){

 return"userName";            

}

    解析:

是得到一个用户的姓名,而不是得到一个人的姓名,因为人不一定是用户,所以用getUserName更准确一点   

二十九:

内部类的变量不要设为全局变量,尽量少用全局变量.

   欠规范代码示例:

暂时无

   规范代码示例:

暂时无

   解析:

暂时无

   

三十:

如果是布尔型的变量则最好在命名用is或has开头。

例如:

isVisible,isExists等.

   欠规范代码示例:

   booleanisTrue=resultSet.next();

   规范代码示例:

   booleanhasNext=resultSet.next();

   解析:

难懂,且没有任何意义。

               

   

三十一:

如果变量命名要加注释,说明命名不是很准确.

   欠规范代码示例:

暂时无

   规范代码示例:

暂时无

   解析:

暂时无

   

三十二:

任何类字段除非必要,否则都要私有化.

   欠规范代码示例:

            

publicclassPerson        

{

    Stringname;

    Stringsex;

    intage;

}

   规范代码示例:

             

publicclassClassName            

{

   privateStringname;

   privateStringsex;

   privateintage;

}

   解析:

没有为程序的安全考虑。

可以被其他的类访问

  

   

三十三:

尽量减少一个类属性的作用域,在离使用它的最近的地方定义.

   欠规范代码示例:

intindex=1;//类似这种情况变量生命离使用地方有点远

Stringsql="insertintostudent(ID,name,password,sex,address)values(?

?

?

?

?

)";

      PreparedStatementpreparedStatement=connection.prepareStatement(sql);

      preparedStatement.setString(index++,user.getID());

      preparedStatement.setString(index++,user.getName());

      preparedStatement.setString(index++,user.getPassword());

      preparedStatement.setString(index++,user.getSex());

      preparedStatement.setString(index++,user.getAddress());

      preparedStatement.executeUpdate();

      preparedStatement.close();

   规范代码示例:

  

       Stringsql="insertintostudent(ID,name,password,sex,address)values(?

?

?

?

?

)";

      PreparedStatementpreparedStatement=connection.prepareStatement(sql);

      intindex=1;

      preparedStatement.setString(index++,user.getID());

      preparedStatement.setString(index++,user.getName());

      preparedStatement.setString(index++,user.getPassword());

      preparedStatement.setString(index++,user.getSex());

      preparedStatement.setString(index++,user.getAddress());

      preparedStatement.executeUpdate();

      preparedStatement.close();

  

   解析:

当别人维护易引起混淆,容易引发错误

      

三十四:

单例模式的使用必须要考虑到同步.

   欠规范代码示例:

   

//没有使用到同步

publicstaticConnectiongetConnection()throwsClassNotFoundException,SQLException{

    if(conn==null){

       Class.forName("com.p6spy.engine.spy.P6SpyDriver");

       conn=  DriverManager.getConnection("jdbc:

mysql:

//localhost:

3306/test","root","root");

    }

    returnconn;

}   

   规范代码示例:

    

//最熟悉的得到一个Connection连接

publicstaticsynchronizedConnectiongetConnection()throwsClassNotFoundException,SQLException{

   if(conn==null){

      Class.forName("com.p6spy.engine.spy.P6SpyDriver");

      conn=  DriverManager.getConnection("jdbc:

mysql:

//localhost:

3306/test","root","root");

   }

   returnconn;

}

   解析:

当有多个用户并发使用的时候会造成数据的混乱,导致线程不安全

三十五:

方法里面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1